1/* 2 * Written by J.T. Conklin <jtc@netbsd.org>. 3 * Public domain. 4 */ 5 6#include <machine/asm.h> 7 8RCSID("$NetBSD: s_floor.S,v 1.4 1995/05/09 00:01:59 jtc Exp $") 9 10ENTRY(__floor) 11 fldl 4(%esp) 12 subl $8,%esp 13 14 fstcw 4(%esp) /* store fpu control word */ 15 16 /* We use here %edx although only the low 1 bits are defined. 17 But none of the operations should care and they are faster 18 than the 16 bit operations. */ 19 movl $0x400,%edx /* round towards -oo */ 20 orl 4(%esp),%edx 21 andl $0xf7ff,%edx 22 movl %edx,(%esp) 23 fldcw (%esp) /* load modified control word */ 24 25 frndint /* round */ 26 27 fldcw 4(%esp) /* restore original control word */ 28 29 addl $8,%esp 30 ret 31END (__floor) 32weak_alias (__floor, floor) 33