projects
/
oweals
/
musl.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
1c9afd6
)
fix excess precision in return value of i386 acos[f] and asin[f]
author
Rich Felker
<dalias@aerifal.cx>
Thu, 6 Feb 2020 17:06:30 +0000
(12:06 -0500)
committer
Rich Felker
<dalias@aerifal.cx>
Thu, 6 Feb 2020 18:21:26 +0000
(13:21 -0500)
analogous to commit
1c9afd69051a64cf085c6fb3674a444ff9a43857
for
atan[2][f].
src/math/i386/acos.s
patch
|
blob
|
history
src/math/i386/acosf.s
patch
|
blob
|
history
src/math/i386/acosl.s
patch
|
blob
|
history
src/math/i386/asin.s
patch
|
blob
|
history
src/math/i386/asinf.s
patch
|
blob
|
history
src/math/i386/asinl.s
patch
|
blob
|
history
diff --git
a/src/math/i386/acos.s
b/src/math/i386/acos.s
index 47f365efb1ea7493c34f7d64b7db33761e4337bd..af423a2fcdbdac84409c4155e49be84ae354cd96 100644
(file)
--- a/
src/math/i386/acos.s
+++ b/
src/math/i386/acos.s
@@
-1,22
+1,10
@@
# use acos(x) = atan2(fabs(sqrt((1-x)*(1+x))), x)
# 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)
.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)
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
fabs # fix sign of zero (matters in downward rounding mode)
fxch %st(1)
fpatan
+ fstpl 4(%esp)
+ fldl 4(%esp)
ret
ret
diff --git
a/src/math/i386/acosf.s
b/src/math/i386/acosf.s
index 6c95509f78be5f308b715722095f46aa6692b684..d2cdfdbfefd6f15a0c94540e42d57fa9b9f27077 100644
(file)
--- a/
src/math/i386/acosf.s
+++ b/
src/math/i386/acosf.s
@@
-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
diff --git
a/src/math/i386/acosl.s
b/src/math/i386/acosl.s
index 6c95509f78be5f308b715722095f46aa6692b684..599c8230cd74099d14045f19a590a4efb1eff39f 100644
(file)
--- a/
src/math/i386/acosl.s
+++ b/
src/math/i386/acosl.s
@@
-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
diff --git
a/src/math/i386/asin.s
b/src/math/i386/asin.s
index 920d967acfd257e0a6ac1a1d17a867cca7e6d4f7..2bc8356f49ab4125d17a515b564133ab87e9acc5 100644
(file)
--- a/
src/math/i386/asin.s
+++ b/
src/math/i386/asin.s
@@
-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:
.global asin
.type asin,@function
asin:
@@
-25,15
+5,17
@@
asin:
mov 8(%esp),%eax
add %eax,%eax
cmp $0x00200000,%eax
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
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
ret
diff --git
a/src/math/i386/asinf.s
b/src/math/i386/asinf.s
index e07bf5999cd19a57f6398aba01af76f68c6de52a..059097532ef046a87d7316da32e27d4fe9abaa65 100644
(file)
--- a/
src/math/i386/asinf.s
+++ b/
src/math/i386/asinf.s
@@
-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
diff --git
a/src/math/i386/asinl.s
b/src/math/i386/asinl.s
index e07bf5999cd19a57f6398aba01af76f68c6de52a..e973fc85fb26d517f6e387c04b1259eed27f68e9 100644
(file)
--- a/
src/math/i386/asinl.s
+++ b/
src/math/i386/asinl.s
@@
-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