Merge branch 'master' of git://git.etalabs.net/musl
authornsz <nsz@port70.net>
Tue, 20 Mar 2012 09:25:02 +0000 (10:25 +0100)
committernsz <nsz@port70.net>
Tue, 20 Mar 2012 09:25:02 +0000 (10:25 +0100)
src/math/i386/remquo.s
src/math/i386/scalbn.s
src/math/i386/scalbnf.s
src/math/i386/scalbnl.s

index 86ae2dc..37a2445 100644 (file)
@@ -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
index e275d14..8bf302f 100644 (file)
@@ -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
index 40232b6..9cb9ef5 100644 (file)
@@ -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
index 224b1be..54414c2 100644 (file)
@@ -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)