summaryrefslogtreecommitdiff
path: root/src/math
diff options
context:
space:
mode:
Diffstat (limited to 'src/math')
-rw-r--r--src/math/i386/exp.s45
-rw-r--r--src/math/i386/llrint.s2
-rw-r--r--src/math/i386/llrintl.s2
3 files changed, 24 insertions, 25 deletions
diff --git a/src/math/i386/exp.s b/src/math/i386/exp.s
index 76ab4d64..ca0de1d4 100644
--- a/src/math/i386/exp.s
+++ b/src/math/i386/exp.s
@@ -68,21 +68,19 @@ exp:
.type exp2,@function
exp2:
fldl 4(%esp)
-1: mov $0x47000000,%eax
- push %eax
+1: pushl $0x467ff000
flds (%esp)
- shl $7,%eax
- push %eax
- add %eax,%eax
+ xorl %eax,%eax
+ pushl $0x80000000
push %eax
fld %st(1)
fabs
fucom %st(1)
fnstsw
- sahf
- ja 2f
fstp %st(0)
fstp %st(0)
+ sahf
+ ja 2f
fld %st(0)
fistpl 8(%esp)
fildl 8(%esp)
@@ -99,22 +97,23 @@ exp2:
add $12,%esp
ret
-2: fstp %st(0)
- fstp %st(0)
- fsts 8(%esp)
- mov 8(%esp),%eax
- lea (%eax,%eax),%ecx
- cmp $0xff000000,%ecx
- ja 2f
+2: fld %st(0)
+ fstpt (%esp)
+ mov 9(%esp),%ah
+ and $0x7f,%ah
+ cmp $0x7f,%ah
+ jne 1f
+ decb 9(%esp)
fstp %st(0)
- xor %ecx,%ecx
- inc %ecx
- add %eax,%eax
- jc 1f
- mov $0x7ffe,%ecx
-1: mov %ecx,8(%esp)
fldt (%esp)
- fld %st(0)
- fmulp
-2: add $12,%esp
+1: fld %st(0)
+ frndint
+ fxch %st(1)
+ fsub %st(1)
+ f2xm1
+ fld1
+ faddp
+ fscale
+ fstp %st(1)
+ add $12,%esp
ret
diff --git a/src/math/i386/llrint.s b/src/math/i386/llrint.s
index e961b35d..eaa7f1fb 100644
--- a/src/math/i386/llrint.s
+++ b/src/math/i386/llrint.s
@@ -2,7 +2,7 @@
.type llrint,@function
llrint:
fldl 4(%esp)
- fistpl 4(%esp)
+ fistpq 4(%esp)
mov 4(%esp),%eax
mov 8(%esp),%edx
ret
diff --git a/src/math/i386/llrintl.s b/src/math/i386/llrintl.s
index 84e63867..fd9a1cbd 100644
--- a/src/math/i386/llrintl.s
+++ b/src/math/i386/llrintl.s
@@ -2,7 +2,7 @@
.type llrintl,@function
llrintl:
fldt 4(%esp)
- fistpl 4(%esp)
+ fistpq 4(%esp)
mov 4(%esp),%eax
mov 8(%esp),%edx
ret