sortix-mirror/libm/arch/i387/flt_rounds.S

22 lines
432 B
ArmAsm

/* $NetBSD: flt_rounds.S,v 1.9 2011/09/30 23:42:00 christos Exp $ */
#include <machine/asm.h>
/*
* 00 0 round to zero
* 01 1 round to nearest
* 10 2 round to positive infinity
* 11 3 round to negative infinity
*/
.text
_ALIGN_TEXT
ENTRY(__flt_rounds)
fnstcw -4(%esp)
movl -4(%esp), %ecx
shrl $9, %ecx
andl $6, %ecx
movl $0x2d, %eax /* 0x2d = 00.10.11.01 */
sarl %cl, %eax /* 0,1,2,3 -> 1,3,2,0 */
andl $3, %eax
ret