summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornsz <nsz@port70.net>2012-03-20 10:25:02 +0100
committernsz <nsz@port70.net>2012-03-20 10:25:02 +0100
commit03c52e137a28f65519bf6e7c303e5bd25df6e929 (patch)
treef5fe7ae916d9039adfe82217716e2aafd08702fb
parentc879a9592f09a49c1807ee95d4305c406f44882e (diff)
parentbaa43bca0a051e8deb0d6a9a8882ceeea5c27249 (diff)
downloadmusl-03c52e137a28f65519bf6e7c303e5bd25df6e929.tar.gz
Merge branch 'master' of git://git.etalabs.net/musl
-rw-r--r--src/math/i386/remquo.s43
-rw-r--r--src/math/i386/scalbn.s19
-rw-r--r--src/math/i386/scalbnf.s18
-rw-r--r--src/math/i386/scalbnl.s16
4 files changed, 72 insertions, 24 deletions
diff --git a/src/math/i386/remquo.s b/src/math/i386/remquo.s
index 86ae2dc3..37a24450 100644
--- a/src/math/i386/remquo.s
+++ b/src/math/i386/remquo.s
@@ -2,40 +2,49 @@
.type remquof,@function
remquof:
mov 12(%esp),%ecx
- fldl 4(%esp)
fldl 8(%esp)
+ fldl 4(%esp)
+ mov 11(%esp),%dh
+ xor 7(%esp),%dh
jmp 1f
.global remquol
.type remquol,@function
remquol:
mov 28(%esp),%ecx
- fldl 4(%esp)
fldl 16(%esp)
+ fldl 4(%esp)
+ mov 25(%esp),%dh
+ xor 13(%esp),%dh
jmp 1f
.global remquo
.type remquo,@function
remquo:
mov 20(%esp),%ecx
- fldl 4(%esp)
fldl 12(%esp)
-1: fld %st(1)
+ fldl 4(%esp)
+ mov 19(%esp),%dh
+ xor 11(%esp),%dh
1: fprem1
fnstsw %ax
sahf
jp 1b
- fsubr %st(0),%st(2)
- fxch %st(2)
- fdivp
- mov $0x4f000000,%eax
- mov %eax,4(%esp)
- flds 4(%esp)
- fxch %st(1)
-1: fprem
- fnstsw %ax
- sahf
- jp 1b
- fistpl (%ecx)
- fstp %st(0)
+ fstp %st(1)
+ mov %ah,%dl
+ shr %dl
+ and $1,%dl
+ mov %ah,%al
+ shr $5,%al
+ and $2,%al
+ or %al,%dl
+ mov %ah,%al
+ shl $2,%al
+ and $4,%al
+ or %al,%dl
+ test %dh,%dh
+ jns 1f
+ neg %dl
+1: movsbl %dl,%edx
+ mov %edx,(%ecx)
ret
diff --git a/src/math/i386/scalbn.s b/src/math/i386/scalbn.s
index e275d14f..8bf302f2 100644
--- a/src/math/i386/scalbn.s
+++ b/src/math/i386/scalbn.s
@@ -11,10 +11,23 @@ scalbln:
.global scalbn
.type scalbn,@function
scalbn:
- fildl 12(%esp)
+ mov 12(%esp),%eax
+ add $0x3ffe,%eax
+ cmp $0x7ffd,%eax
+ jb 1f
+ sub $0x3ffe,%eax
+ sar $31,%eax
+ xor $0xfff,%eax
+ add $0x3ffe,%eax
+1: inc %eax
fldl 4(%esp)
- fscale
- fstp %st(1)
+ mov %eax,12(%esp)
+ mov $0x80000000,%eax
+ mov %eax,8(%esp)
+ xor %eax,%eax
+ mov %eax,4(%esp)
+ fldt 4(%esp)
+ fmulp
fstpl 4(%esp)
fldl 4(%esp)
ret
diff --git a/src/math/i386/scalbnf.s b/src/math/i386/scalbnf.s
index 40232b6a..9cb9ef5f 100644
--- a/src/math/i386/scalbnf.s
+++ b/src/math/i386/scalbnf.s
@@ -11,10 +11,22 @@ scalblnf:
.global scalbnf
.type scalbnf,@function
scalbnf:
- fildl 8(%esp)
+ mov 8(%esp),%eax
+ add $0x3fe,%eax
+ cmp $0x7fd,%eax
+ jb 1f
+ sub $0x3fe,%eax
+ sar $31,%eax
+ xor $0x1ff,%eax
+ add $0x3fe,%eax
+1: inc %eax
+ shl $20,%eax
flds 4(%esp)
- fscale
- fstp %st(1)
+ mov %eax,8(%esp)
+ xor %eax,%eax
+ mov %eax,4(%esp)
+ fldl 4(%esp)
+ fmulp
fstps 4(%esp)
flds 4(%esp)
ret
diff --git a/src/math/i386/scalbnl.s b/src/math/i386/scalbnl.s
index 224b1bef..54414c2e 100644
--- a/src/math/i386/scalbnl.s
+++ b/src/math/i386/scalbnl.s
@@ -11,7 +11,21 @@ scalblnl:
.global scalbnl
.type scalbnl,@function
scalbnl:
- fildl 16(%esp)
+ mov 16(%esp),%eax
+ add $0x3ffe,%eax
+ cmp $0x7ffd,%eax
+ jae 1f
+ inc %eax
+ fldt 4(%esp)
+ mov %eax,12(%esp)
+ mov $0x80000000,%eax
+ mov %eax,8(%esp)
+ xor %eax,%eax
+ mov %eax,4(%esp)
+ fldt 4(%esp)
+ fmulp
+ ret
+1: fildl 16(%esp)
fldt 4(%esp)
fscale
fstp %st(1)