diff options
Diffstat (limited to 'lib/x86_64/floatundisf.s')
-rw-r--r-- | lib/x86_64/floatundisf.s | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/lib/x86_64/floatundisf.s b/lib/x86_64/floatundisf.s new file mode 100644 index 00000000..b4086874 --- /dev/null +++ b/lib/x86_64/floatundisf.s @@ -0,0 +1,30 @@ +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. + +// float __floatundisf(du_int a); + +#ifdef __x86_64__ + +.literal4 +two: .single 2.0 + +#define REL_ADDR(_a) (_a)(%rip) + +.text +.align 4 +.globl ___floatundisf +___floatundisf: + movq $1, %rsi + testq %rdi, %rdi + js 1f + cvtsi2ssq %rdi, %xmm0 + ret + +1: andq %rdi, %rsi + shrq %rdi + orq %rsi, %rdi + cvtsi2ssq %rdi, %xmm0 + mulss REL_ADDR(two), %xmm0 + ret + +#endif // __x86_64__
\ No newline at end of file |