about summary refs log tree commit diff
path: root/src/math/i386/scalbn.s
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 /src/math/i386/scalbn.s
parentc879a9592f09a49c1807ee95d4305c406f44882e (diff)
parentbaa43bca0a051e8deb0d6a9a8882ceeea5c27249 (diff)
downloadmusl-03c52e137a28f65519bf6e7c303e5bd25df6e929.tar.gz
musl-03c52e137a28f65519bf6e7c303e5bd25df6e929.tar.xz
musl-03c52e137a28f65519bf6e7c303e5bd25df6e929.zip
Merge branch 'master' of git://git.etalabs.net/musl
Diffstat (limited to 'src/math/i386/scalbn.s')
-rw-r--r--src/math/i386/scalbn.s19
1 files changed, 16 insertions, 3 deletions
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