fix excess precision in return value of i386 acos[f] and asin[f]

analogous to commit 1c9afd6905 for
atan[2][f].
This commit is contained in:
Rich Felker
2020-02-06 13:21:26 -05:00
parent 1c9afd6905
commit 141c8d4ccb
6 changed files with 75 additions and 42 deletions
+3 -13
View File
@@ -1,22 +1,10 @@
# use acos(x) = atan2(fabs(sqrt((1-x)*(1+x))), x)
.global acosf
.type acosf,@function
acosf:
flds 4(%esp)
jmp 1f
.global acosl
.type acosl,@function
acosl:
fldt 4(%esp)
jmp 1f
.global acos
.type acos,@function
acos:
fldl 4(%esp)
1: fld %st(0)
fld %st(0)
fld1
fsub %st(0),%st(1)
fadd %st(2)
@@ -25,4 +13,6 @@ acos:
fabs # fix sign of zero (matters in downward rounding mode)
fxch %st(1)
fpatan
fstpl 4(%esp)
fldl 4(%esp)
ret
+16 -1
View File
@@ -1 +1,16 @@
# see acos.s
.global acosf
.type acosf,@function
acosf:
flds 4(%esp)
fld %st(0)
fld1
fsub %st(0),%st(1)
fadd %st(2)
fmulp
fsqrt
fabs # fix sign of zero (matters in downward rounding mode)
fxch %st(1)
fpatan
fstps 4(%esp)
flds 4(%esp)
ret
+14 -1
View File
@@ -1 +1,14 @@
# see acos.s
.global acosl
.type acosl,@function
acosl:
fldt 4(%esp)
fld %st(0)
fld1
fsub %st(0),%st(1)
fadd %st(2)
fmulp
fsqrt
fabs # fix sign of zero (matters in downward rounding mode)
fxch %st(1)
fpatan
ret
+7 -25
View File
@@ -1,23 +1,3 @@
.global asinf
.type asinf,@function
asinf:
flds 4(%esp)
mov 4(%esp),%eax
add %eax,%eax
cmp $0x01000000,%eax
jae 1f
# subnormal x, return x with underflow
fld %st(0)
fmul %st(1)
fstps 4(%esp)
ret
.global asinl
.type asinl,@function
asinl:
fldt 4(%esp)
jmp 1f
.global asin
.type asin,@function
asin:
@@ -25,15 +5,17 @@ asin:
mov 8(%esp),%eax
add %eax,%eax
cmp $0x00200000,%eax
jae 1f
# subnormal x, return x with underflow
fsts 4(%esp)
ret
1: fld %st(0)
jb 1f
fld %st(0)
fld1
fsub %st(0),%st(1)
fadd %st(2)
fmulp
fsqrt
fpatan
fstpl 4(%esp)
fldl 4(%esp)
ret
# subnormal x, return x with underflow
1: fsts 4(%esp)
ret
+23 -1
View File
@@ -1 +1,23 @@
# see asin.s
.global asinf
.type asinf,@function
asinf:
flds 4(%esp)
mov 4(%esp),%eax
add %eax,%eax
cmp $0x01000000,%eax
jb 1f
fld %st(0)
fld1
fsub %st(0),%st(1)
fadd %st(2)
fmulp
fsqrt
fpatan
fstps 4(%esp)
flds 4(%esp)
ret
# subnormal x, return x with underflow
1: fld %st(0)
fmul %st(1)
fstps 4(%esp)
ret
+12 -1
View File
@@ -1 +1,12 @@
# see asin.s
.global asinl
.type asinl,@function
asinl:
fldt 4(%esp)
fld %st(0)
fld1
fsub %st(0),%st(1)
fadd %st(2)
fmulp
fsqrt
fpatan
ret