-rw-r--r-- | src/math/i386/scalbn.s | 19 | ||||
-rw-r--r-- | src/math/i386/scalbnf.s | 18 | ||||
-rw-r--r-- | src/math/i386/scalbnl.s | 16 |
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 0ドルx3ffe,%eax + cmp 0ドルx7ffd,%eax + jb 1f + sub 0ドルx3ffe,%eax + sar 31,ドル%eax + xor 0ドルxfff,%eax + add 0ドルx3ffe,%eax +1: inc %eax fldl 4(%esp) - fscale - fstp %st(1) + mov %eax,12(%esp) + mov 0ドルx80000000,%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 0ドルx3fe,%eax + cmp 0ドルx7fd,%eax + jb 1f + sub 0ドルx3fe,%eax + sar 31,ドル%eax + xor 0ドルx1ff,%eax + add 0ドルx3fe,%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 0ドルx3ffe,%eax + cmp 0ドルx7ffd,%eax + jae 1f + inc %eax + fldt 4(%esp) + mov %eax,12(%esp) + mov 0ドルx80000000,%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) |