/* | |
* Written by J.T. Conklin <jtc@netbsd.org>. | |
* Public domain. | |
* | |
* Changes for long double by Ulrich Drepper <drepper@cygnus.com> | |
* | |
*/ | |
.file "floorl.S" | |
.text | |
.align 4 | |
.globl _floorl | |
.def _floorl; .scl 2; .type 32; .endef | |
_floorl: | |
fldt 4(%esp) | |
subl $8,%esp | |
fstcw 4(%esp) /* store fpu control word */ | |
/* We use here %edx although only the low 1 bits are defined. | |
But none of the operations should care and they are faster | |
than the 16 bit operations. */ | |
movl $0x400,%edx /* round towards -oo */ | |
orl 4(%esp),%edx | |
andl $0xf7ff,%edx | |
movl %edx,(%esp) | |
fldcw (%esp) /* load modified control word */ | |
frndint /* round */ | |
fldcw 4(%esp) /* restore original control word */ | |
addl $8,%esp | |
ret |