Merge from vendor branch CVS:
[dragonfly.git] / lib / msun / i387 / s_ceil.S
1 /*
2  * Written by J.T. Conklin <jtc@NetBSD.org>.
3  * Public domain.
4  */
5
6 #include <machine/asm.h>
7
8 #include "abi.h"
9
10 #if 0
11 RCSID("$NetBSD: s_ceil.S,v 1.6 2002/03/26 15:17:37 fvdl Exp $")
12 #endif
13 RCSID("$DragonFly: src/lib/msun/i387/Attic/s_ceil.S,v 1.3 2004/12/29 11:40:18 asmodai Exp $")
14
15 ENTRY(ceil)
16 #ifdef __i386__
17         pushl   %ebp
18         movl    %esp,%ebp
19         subl    $8,%esp
20
21         fstcw   -4(%ebp)                /* store fpu control word */
22         movw    -4(%ebp),%dx
23         orw     $0x0800,%dx             /* round towards +oo */
24         andw    $0xfbff,%dx
25         movw    %dx,-8(%ebp)
26         fldcw   -8(%ebp)                /* load modfied control word */
27
28         fldl    8(%ebp);                /* round */
29         frndint
30
31         fldcw   -4(%ebp)                /* restore original control word */
32
33         leave
34 #else
35         fstcw   -12(%rsp)
36         movw    -12(%rsp),%dx
37         orw     $0x0800,%dx
38         andw    $0xfbff,%dx
39         movw    %dx,-16(%rsp)
40         fldcw   -16(%rsp)
41         movsd   %xmm0,-8(%rsp)
42         fldl    -8(%rsp)
43         frndint
44         fldcw   -12(%rsp)
45         fstpl   -8(%rsp)
46         movsd   -8(%rsp),%xmm0
47 #endif
48         ret