diff options
author | Rich Felker <dalias@aerifal.cx> | 2012-03-19 09:42:51 -0400 |
---|---|---|
committer | Rich Felker <dalias@aerifal.cx> | 2012-03-19 09:42:51 -0400 |
commit | 27deb538896b5c3b8ceca206ec505ff834c97300 (patch) | |
tree | 9f7a69b5997510e68cffffb6bbfd093dab56871f /src/math/i386/remquo.s | |
parent | 02db27d9deaee71b244c91e720ec819c74dab150 (diff) | |
download | musl-27deb538896b5c3b8ceca206ec505ff834c97300.tar.gz musl-27deb538896b5c3b8ceca206ec505ff834c97300.tar.xz musl-27deb538896b5c3b8ceca206ec505ff834c97300.zip |
asm for remquo
this could perhaps use some additional testing for corner cases, but it seems to be correct.
Diffstat (limited to 'src/math/i386/remquo.s')
-rw-r--r-- | src/math/i386/remquo.s | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/src/math/i386/remquo.s b/src/math/i386/remquo.s new file mode 100644 index 00000000..86ae2dc3 --- /dev/null +++ b/src/math/i386/remquo.s @@ -0,0 +1,41 @@ +.global remquof +.type remquof,@function +remquof: + mov 12(%esp),%ecx + fldl 4(%esp) + fldl 8(%esp) + jmp 1f + +.global remquol +.type remquol,@function +remquol: + mov 28(%esp),%ecx + fldl 4(%esp) + fldl 16(%esp) + jmp 1f + +.global remquo +.type remquo,@function +remquo: + mov 20(%esp),%ecx + fldl 4(%esp) + fldl 12(%esp) +1: fld %st(1) +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) + ret |