]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/compiler-rt/lib/builtins/x86_64/floatundisf.S
Merge ACPICA 20160422.
[FreeBSD/FreeBSD.git] / contrib / compiler-rt / lib / builtins / x86_64 / floatundisf.S
1 // This file is dual licensed under the MIT and the University of Illinois Open
2 // Source Licenses. See LICENSE.TXT for details.
3
4 #include "../assembly.h"
5
6 // float __floatundisf(du_int a);
7
8 #ifdef __x86_64__
9
10 CONST_SECTION
11
12         .balign 16
13 two:
14         .single 2.0
15
16 #define REL_ADDR(_a)    (_a)(%rip)
17
18 .text
19 .balign 4
20 DEFINE_COMPILERRT_FUNCTION(__floatundisf)
21         movq            $1,                     %rsi
22         testq           %rdi,           %rdi
23         js                      1f
24         cvtsi2ssq       %rdi,           %xmm0
25         ret
26         
27 1:      andq            %rdi,           %rsi
28         shrq            %rdi
29         orq                     %rsi,           %rdi
30         cvtsi2ssq       %rdi,           %xmm0
31         mulss   REL_ADDR(two),  %xmm0
32         ret
33 END_COMPILERRT_FUNCTION(__floatundisf)
34
35 #endif // __x86_64__