about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/math/i386/exp.s9
-rw-r--r--src/math/i386/expm1.s13
-rw-r--r--src/math/i386/llrint.s8
-rw-r--r--src/math/i386/llrintf.s9
-rw-r--r--src/math/i386/llrintl.s8
-rw-r--r--src/math/i386/log.s7
-rw-r--r--src/math/i386/log10.s7
-rw-r--r--src/math/i386/log10f.s7
-rw-r--r--src/math/i386/log10l.s7
-rw-r--r--src/math/i386/logf.s7
-rw-r--r--src/math/i386/logl.s7
-rw-r--r--src/math/i386/lrint.s7
-rw-r--r--src/math/i386/lrintf.s7
-rw-r--r--src/math/i386/lrintl.s7
14 files changed, 109 insertions, 1 deletions
diff --git a/src/math/i386/exp.s b/src/math/i386/exp.s
index 18f6cd67..f4769d59 100644
--- a/src/math/i386/exp.s
+++ b/src/math/i386/exp.s
@@ -34,6 +34,15 @@ exp:
 .type exp2,@function
 exp2:
 	fldl 4(%esp)
+1:	fxam
+	fnstsw %ax
+	sahf
+	jnp 1f
+	jnc 1f
+	fstps 4(%esp)
+	mov $0xfe,%al
+	and %al,7(%esp)
+	flds 4(%esp)
 1:	fld %st(0)
 	frndint
 	fxch %st(1)
diff --git a/src/math/i386/expm1.s b/src/math/i386/expm1.s
index d6d511ef..bbb5d12e 100644
--- a/src/math/i386/expm1.s
+++ b/src/math/i386/expm1.s
@@ -14,12 +14,23 @@ expm1l:
 .type expm1,@function
 expm1:
 	fldl 4(%esp)
+1:	fxam
+	fnstsw %ax
+	sahf
+	jnp 1f
+	jnc 1f
+	fstps 4(%esp)
+	mov $0xfe,%al
+	and %al,7(%esp)
+	flds 4(%esp)
 1:	fldl2e
 	fmulp
 	fld %st(0)
 	frndint
 	fldz
-	fcompi
+	fcomp
+	fnstsw %ax
+	sahf
 	jnz 1f
 	fstp %st(0)
 	f2xm1
diff --git a/src/math/i386/llrint.s b/src/math/i386/llrint.s
new file mode 100644
index 00000000..e961b35d
--- /dev/null
+++ b/src/math/i386/llrint.s
@@ -0,0 +1,8 @@
+.global llrint
+.type llrint,@function
+llrint:
+	fldl 4(%esp)
+	fistpl 4(%esp)
+	mov 4(%esp),%eax
+	mov 8(%esp),%edx
+	ret
diff --git a/src/math/i386/llrintf.s b/src/math/i386/llrintf.s
new file mode 100644
index 00000000..1905cdcd
--- /dev/null
+++ b/src/math/i386/llrintf.s
@@ -0,0 +1,9 @@
+.global llrintf
+.type llrintf,@function
+llrintf:
+	sub $8,%esp
+	flds 12(%esp)
+	fistpq (%esp)
+	pop %eax
+	pop %edx
+	ret
diff --git a/src/math/i386/llrintl.s b/src/math/i386/llrintl.s
new file mode 100644
index 00000000..84e63867
--- /dev/null
+++ b/src/math/i386/llrintl.s
@@ -0,0 +1,8 @@
+.global llrintl
+.type llrintl,@function
+llrintl:
+	fldt 4(%esp)
+	fistpl 4(%esp)
+	mov 4(%esp),%eax
+	mov 8(%esp),%edx
+	ret
diff --git a/src/math/i386/log.s b/src/math/i386/log.s
new file mode 100644
index 00000000..fcccf030
--- /dev/null
+++ b/src/math/i386/log.s
@@ -0,0 +1,7 @@
+.global log
+.type log,@function
+log:
+	fldln2
+	fldl 4(%esp)
+	fyl2x
+	ret
diff --git a/src/math/i386/log10.s b/src/math/i386/log10.s
new file mode 100644
index 00000000..28eb5b2f
--- /dev/null
+++ b/src/math/i386/log10.s
@@ -0,0 +1,7 @@
+.global log10
+.type log10,@function
+log10:
+	fldlg2
+	fldl 4(%esp)
+	fyl2x
+	ret
diff --git a/src/math/i386/log10f.s b/src/math/i386/log10f.s
new file mode 100644
index 00000000..c0c0c67e
--- /dev/null
+++ b/src/math/i386/log10f.s
@@ -0,0 +1,7 @@
+.global log10f
+.type log10f,@function
+log10f:
+	fldlg2
+	flds 4(%esp)
+	fyl2x
+	ret
diff --git a/src/math/i386/log10l.s b/src/math/i386/log10l.s
new file mode 100644
index 00000000..aaa44f2f
--- /dev/null
+++ b/src/math/i386/log10l.s
@@ -0,0 +1,7 @@
+.global log10l
+.type log10l,@function
+log10l:
+	fldlg2
+	fldt 4(%esp)
+	fyl2x
+	ret
diff --git a/src/math/i386/logf.s b/src/math/i386/logf.s
new file mode 100644
index 00000000..da7ff3ae
--- /dev/null
+++ b/src/math/i386/logf.s
@@ -0,0 +1,7 @@
+.global logf
+.type logf,@function
+logf:
+	fldln2
+	flds 4(%esp)
+	fyl2x
+	ret
diff --git a/src/math/i386/logl.s b/src/math/i386/logl.s
new file mode 100644
index 00000000..d4e3339b
--- /dev/null
+++ b/src/math/i386/logl.s
@@ -0,0 +1,7 @@
+.global logl
+.type logl,@function
+logl:
+	fldln2
+	fldt 4(%esp)
+	fyl2x
+	ret
diff --git a/src/math/i386/lrint.s b/src/math/i386/lrint.s
new file mode 100644
index 00000000..02b83d9f
--- /dev/null
+++ b/src/math/i386/lrint.s
@@ -0,0 +1,7 @@
+.global lrint
+.type lrint,@function
+lrint:
+	fldl 4(%esp)
+	fistpl 4(%esp)
+	mov 4(%esp),%eax
+	ret
diff --git a/src/math/i386/lrintf.s b/src/math/i386/lrintf.s
new file mode 100644
index 00000000..907aac29
--- /dev/null
+++ b/src/math/i386/lrintf.s
@@ -0,0 +1,7 @@
+.global lrintf
+.type lrintf,@function
+lrintf:
+	flds 4(%esp)
+	fistpl 4(%esp)
+	mov 4(%esp),%eax
+	ret
diff --git a/src/math/i386/lrintl.s b/src/math/i386/lrintl.s
new file mode 100644
index 00000000..3ae05aac
--- /dev/null
+++ b/src/math/i386/lrintl.s
@@ -0,0 +1,7 @@
+.global lrintl
+.type lrintl,@function
+lrintl:
+	fldt 4(%esp)
+	fistpl 4(%esp)
+	mov 4(%esp),%eax
+	ret