aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/i386/fpu
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/i386/fpu')
-rw-r--r--sysdeps/i386/fpu/s_asinh.S11
-rw-r--r--sysdeps/i386/fpu/s_asinhf.S11
-rw-r--r--sysdeps/i386/fpu/s_asinhl.S7
3 files changed, 26 insertions, 3 deletions
diff --git a/sysdeps/i386/fpu/s_asinh.S b/sysdeps/i386/fpu/s_asinh.S
index e4c0c67..7123772 100644
--- a/sysdeps/i386/fpu/s_asinh.S
+++ b/sysdeps/i386/fpu/s_asinh.S
@@ -100,7 +100,16 @@ ENTRY(__asinh)
4: fld %st // x : x
faddl MO(huge) // huge+x : x
fstp %st(0) // x
- ret
+ cmpl $0x00100000, %eax
+ jae 8f
+ subl $8, %esp
+ cfi_adjust_cfa_offset (8)
+ fld %st(0)
+ fmul %st(0)
+ fstpl (%esp)
+ addl $8, %esp
+ cfi_adjust_cfa_offset (-8)
+8: ret
// |x| > 2^28 => y = sign(x) * (log(|x|) + log(2))
.align ALIGNARG(4)
diff --git a/sysdeps/i386/fpu/s_asinhf.S b/sysdeps/i386/fpu/s_asinhf.S
index b1a28e7..77ebae4 100644
--- a/sysdeps/i386/fpu/s_asinhf.S
+++ b/sysdeps/i386/fpu/s_asinhf.S
@@ -100,7 +100,16 @@ ENTRY(__asinhf)
4: fld %st // x : x
faddl MO(huge) // huge+x : x
fstp %st(0) // x
- ret
+ cmpl $0x00800000, %eax
+ jae 8f
+ subl $4, %esp
+ cfi_adjust_cfa_offset (4)
+ fld %st(0)
+ fmul %st(0)
+ fstps (%esp)
+ addl $4, %esp
+ cfi_adjust_cfa_offset (-4)
+8: ret
// |x| > 2^14 => y = sign(x) * (log(|x|) + log(2))
.align ALIGNARG(4)
diff --git a/sysdeps/i386/fpu/s_asinhl.S b/sysdeps/i386/fpu/s_asinhl.S
index 6a5defe..8799da6 100644
--- a/sysdeps/i386/fpu/s_asinhl.S
+++ b/sysdeps/i386/fpu/s_asinhl.S
@@ -108,7 +108,12 @@ ENTRY(__asinhl)
fldt MO(huge) // huge : x : x
faddp // huge+x : x
fstp %st(0) // x
- ret
+ cmpl $0x0001, %eax
+ jae 8f
+ fld %st(0)
+ fmul %st(0)
+ fstp %st(0)
+8: ret
// |x| > 2^34 => y = sign(x) * (log(|x|) + log(2))
.align ALIGNARG(4)