projects
/
musl
/ 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
47f365e
..
af423a2
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
6c95509
..
d2cdfdb
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
6c95509
..
599c823
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
920d967
..
2bc8356
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
e07bf59
..
0590975
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
e07bf59
..
e973fc8
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