netbsd/lib/libc/arch/i386/gen/flt_rounds.S
2015-10-15 10:25:28 +02:00

23 lines
452 B
ArmAsm

/* $NetBSD: flt_rounds.S,v 1.10 2014/05/23 02:34:19 uebayasi 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
END(__flt_rounds)