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:
+3
-13
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user