diff options
Diffstat (limited to 'sysdeps/i386/fpu')
-rw-r--r-- | sysdeps/i386/fpu/s_asinh.S | 11 | ||||
-rw-r--r-- | sysdeps/i386/fpu/s_asinhf.S | 11 | ||||
-rw-r--r-- | sysdeps/i386/fpu/s_asinhl.S | 7 |
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) |