Remove building with NOCRYPTO option
[minix.git] / sys / external / bsd / compiler_rt / dist / lib / builtins / i386 / floatundixf.S
blobd60ad7dbf0d82ffbde70ca11ca75eb9509761c8f
1 // This file is dual licensed under the MIT and the University of Illinois Open
2 // Source Licenses. See LICENSE.TXT for details.
4 #include "../assembly.h"
6 // long double __floatundixf(du_int a);16
8 #ifdef __i386__
10 #if defined(__APPLE__)
11         .const
12 #elif defined(__ELF__)
13         .section .rodata
14 #else
15         .section .rdata,"rd"
16 #endif
18         .balign 16
19 twop52:
20         .quad 0x4330000000000000
22         .balign 16
23 twop84_plus_twop52_neg:
24         .quad 0xc530000000100000
26         .balign 16
27 twop84:
28         .quad 0x4530000000000000
30 #define REL_ADDR(_a)    (_a)-0b(%eax)
32 .text
33 .balign 4
34 DEFINE_COMPILERRT_FUNCTION(__floatundixf)
35         calll   0f
36 0:      popl    %eax
37         movss   8(%esp),                        %xmm0   // hi 32 bits of input
38         movss   4(%esp),                        %xmm1   // lo 32 bits of input
39         orpd    REL_ADDR(twop84),       %xmm0   // 2^84 + hi (as a double)
40         orpd    REL_ADDR(twop52),       %xmm1   // 2^52 + lo (as a double)
41         addsd   REL_ADDR(twop84_plus_twop52_neg),       %xmm0   // hi - 2^52 (no rounding occurs)
42         movsd   %xmm1,                          4(%esp)
43         fldl    4(%esp)
44         movsd   %xmm0,                          4(%esp)
45         faddl   4(%esp)
46         ret
47 END_COMPILERRT_FUNCTION(__floatundixf)
49 #endif // __i386__