optimize scalbn family
[musl] / src / math / i386 / scalbnf.s
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