From: nsz Date: Tue, 20 Mar 2012 09:25:02 +0000 (+0100) Subject: Merge branch 'master' of git://git.etalabs.net/musl X-Git-Url: http://nsz.repo.hu/git/?p=musl;a=commitdiff_plain;h=03c52e137a28f65519bf6e7c303e5bd25df6e929;hp=c879a9592f09a49c1807ee95d4305c406f44882e Merge branch 'master' of git://git.etalabs.net/musl --- 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)