From 27deb538896b5c3b8ceca206ec505ff834c97300 Mon Sep 17 00:00:00 2001 From: Rich Felker Date: Mon, 19 Mar 2012 09:42:51 -0400 Subject: [PATCH] asm for remquo this could perhaps use some additional testing for corner cases, but it seems to be correct. --- src/math/i386/remquo.s | 41 +++++++++++++++++++++++++++++++++++++++++ src/math/i386/remquof.s | 1 + src/math/i386/remquol.s | 1 + 3 files changed, 43 insertions(+) create mode 100644 src/math/i386/remquo.s create mode 100644 src/math/i386/remquof.s create mode 100644 src/math/i386/remquol.s 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 diff --git a/src/math/i386/remquof.s b/src/math/i386/remquof.s new file mode 100644 index 00000000..511a6bc7 --- /dev/null +++ b/src/math/i386/remquof.s @@ -0,0 +1 @@ +# see remquo.s diff --git a/src/math/i386/remquol.s b/src/math/i386/remquol.s new file mode 100644 index 00000000..511a6bc7 --- /dev/null +++ b/src/math/i386/remquol.s @@ -0,0 +1 @@ +# see remquo.s