Merge from vendor branch OPENSSL:
[dragonfly.git] / lib / msun / i387 / s_copysign.S
1 /*
2  * Written by J.T. Conklin <jtc@NetBSD.org>.
3  * Public domain.
4  */
5
6 /*
7  * XXXfvdl might as well split this file.
8  */
9
10 #include <machine/asm.h>
11
12 #if 0
13 RCSID("$NetBSD: s_copysign.S,v 1.5 2001/06/19 00:26:30 fvdl Exp $")
14 #endif
15 RCSID("$DragonFly: src/lib/msun/i387/Attic/s_copysign.S,v 1.3 2004/12/29 11:40:18 asmodai Exp $")
16
17 #ifdef __x86_64__
18 .Lpos:
19         .quad   0x8000000000000000
20 .Lneg:
21         .quad   0x7fffffffffffffff
22 #endif
23
24
25 ENTRY(copysign)
26 #ifdef __i386__
27         movl    16(%esp),%edx
28         andl    $0x80000000,%edx
29         movl    8(%esp),%eax
30         andl    $0x7fffffff,%eax
31         orl     %edx,%eax
32         movl    %eax,8(%esp)
33         fldl    4(%esp)
34 #else
35 #if 0
36         /*
37          * XXXfvdl gas doesn't grok this yet.
38          */
39         movq    .Lpos(%rip),%xmm2
40         movq    .Lneg(%rip),%xmm3
41         pand    %xmm2,%xmm1
42         pand    %xmm3,%xmm0
43         por     %xmm1,%xmm0
44 #else
45         movsd   %xmm0,-8(%rsp)
46         movsd   %xmm1,-16(%rsp)
47         movl    -12(%rsp),%edx
48         andl    $0x80000000,%edx
49         movl    -4(%rsp),%eax
50         andl    $0x7fffffff,%eax
51         orl     %edx,%eax
52         movl    %eax,-4(%rsp)
53         movsd   -8(%rsp),%xmm0
54 #endif
55 #endif
56         ret