12fe8fb19SBen Gras/* 22fe8fb19SBen Gras * Written by J.T. Conklin <jtc@NetBSD.org>. 32fe8fb19SBen Gras * Public domain. 42fe8fb19SBen Gras */ 52fe8fb19SBen Gras 62fe8fb19SBen Gras#include <machine/asm.h> 72fe8fb19SBen Gras 8*84d9c625SLionel SambucRCSID("$NetBSD: s_floor.S,v 1.9 2011/06/18 21:24:51 joerg Exp $") 92fe8fb19SBen Gras 102fe8fb19SBen GrasENTRY(floor) 112fe8fb19SBen Gras#ifdef __i386__ 122fe8fb19SBen Gras pushl %ebp 132fe8fb19SBen Gras movl %esp,%ebp 142fe8fb19SBen Gras subl $8,%esp 152fe8fb19SBen Gras 162fe8fb19SBen Gras fstcw -4(%ebp) /* store fpu control word */ 172fe8fb19SBen Gras movw -4(%ebp),%dx 182fe8fb19SBen Gras orw $0x0400,%dx /* round towards -oo */ 192fe8fb19SBen Gras andw $0xf7ff,%dx 202fe8fb19SBen Gras movw %dx,-8(%ebp) 212fe8fb19SBen Gras fldcw -8(%ebp) /* load modfied control word */ 222fe8fb19SBen Gras 23*84d9c625SLionel Sambuc fldl 8(%ebp) /* round */ 242fe8fb19SBen Gras frndint 252fe8fb19SBen Gras 262fe8fb19SBen Gras fldcw -4(%ebp) /* restore original control word */ 272fe8fb19SBen Gras 282fe8fb19SBen Gras leave 292fe8fb19SBen Gras#else 302fe8fb19SBen Gras movsd %xmm0, -8(%rsp) 312fe8fb19SBen Gras fstcw -12(%rsp) 322fe8fb19SBen Gras movw -12(%rsp),%dx 332fe8fb19SBen Gras orw $0x0400,%dx 342fe8fb19SBen Gras andw $0xf7ff,%dx 352fe8fb19SBen Gras movw %dx,-16(%rsp) 362fe8fb19SBen Gras fldcw -16(%rsp) 372fe8fb19SBen Gras fldl -8(%rsp) 382fe8fb19SBen Gras frndint 392fe8fb19SBen Gras fldcw -12(%rsp) 402fe8fb19SBen Gras fstpl -8(%rsp) 412fe8fb19SBen Gras movsd -8(%rsp),%xmm0 422fe8fb19SBen Gras#endif 432fe8fb19SBen Gras ret 44