FreeBSD and NetBSD both use derivates of Sun's math library. On FreeBSD,
[dragonfly.git] / lib / libm / arch / i386 / s_ceilf.S
1 /*
2  * Written by J.T. Conklin <jtc@NetBSD.org>.
3  * Public domain.
4  *
5  * $NetBSD: s_ceilf.S,v 1.8 2004/07/16 18:40:24 drochner Exp $
6  * $DragonFly: src/lib/libm/arch/i386/s_ceilf.S,v 1.1 2005/07/26 21:15:19 joerg Exp $
7  */
8
9 #include <machine/asm.h>
10
11 ENTRY(ceilf)
12 #ifdef __i386__
13         pushl   %ebp
14         movl    %esp,%ebp
15         subl    $8,%esp
16
17         fstcw   -4(%ebp)                /* store fpu control word */
18         movw    -4(%ebp),%dx
19         orw     $0x0800,%dx             /* round towards +oo */
20         andw    $0xfbff,%dx
21         movw    %dx,-8(%ebp)
22         fldcw   -8(%ebp)                /* load modfied control word */
23
24         flds    8(%ebp);                /* round */
25         frndint
26
27         fldcw   -4(%ebp)                /* restore original control word */
28
29         leave
30 #else
31         fstcw   -8(%rsp)
32         movw    -8(%rsp),%dx
33         orw     $0x0800,%dx
34         andw    $0xfbff,%dx
35         movw    %dx,-12(%rsp)
36         fldcw   -12(%rsp)
37         movss   %xmm0,-4(%rsp)
38         flds    -4(%rsp)
39         frndint
40         fldcw   -8(%rsp)
41         fstps   -4(%rsp)
42         movss   -4(%rsp),%xmm0
43 #endif
44         ret