asm for inverse trig functions
authorRich Felker <dalias@aerifal.cx>
Mon, 19 Mar 2012 08:56:07 +0000 (04:56 -0400)
committerRich Felker <dalias@aerifal.cx>
Mon, 19 Mar 2012 08:56:07 +0000 (04:56 -0400)
unlike trig functions, these are easy to do in asm because they do not
involve (arbitrary-precision) argument reduction. fpatan automatically
takes care of domain issues, and in asin and acos, fsqrt takes care of
them for us.

12 files changed:
src/math/i386/acos.s [new file with mode: 0644]
src/math/i386/acosf.s [new file with mode: 0644]
src/math/i386/acosl.s [new file with mode: 0644]
src/math/i386/asin.s [new file with mode: 0644]
src/math/i386/asinf.s [new file with mode: 0644]
src/math/i386/asinl.s [new file with mode: 0644]
src/math/i386/atan.s [new file with mode: 0644]
src/math/i386/atan2.s [new file with mode: 0644]
src/math/i386/atan2f.s [new file with mode: 0644]
src/math/i386/atan2l.s [new file with mode: 0644]
src/math/i386/atanf.s [new file with mode: 0644]
src/math/i386/atanl.s [new file with mode: 0644]

diff --git a/src/math/i386/acos.s b/src/math/i386/acos.s
new file mode 100644 (file)
index 0000000..6f9ef7f
--- /dev/null
@@ -0,0 +1,24 @@
+.global acosf
+.type acosf,@function
+acosf:
+       flds 4(%esp)
+       jmp 1f
+
+.global acosl
+.type acosl,@function
+acosl:
+       fldt 4(%esp)
+       jmp 1f
+
+.global acos
+.type acos,@function
+acos:
+       fldl 4(%esp)
+1:     fld %st(0)
+       fmul %st(0)
+       fld1
+       fsubp %st(1)
+       fsqrt
+       fxch %st(1)
+       fpatan
+       ret
diff --git a/src/math/i386/acosf.s b/src/math/i386/acosf.s
new file mode 100644 (file)
index 0000000..6c95509
--- /dev/null
@@ -0,0 +1 @@
+# see acos.s
diff --git a/src/math/i386/acosl.s b/src/math/i386/acosl.s
new file mode 100644 (file)
index 0000000..6c95509
--- /dev/null
@@ -0,0 +1 @@
+# see acos.s
diff --git a/src/math/i386/asin.s b/src/math/i386/asin.s
new file mode 100644 (file)
index 0000000..cab7bfc
--- /dev/null
@@ -0,0 +1,23 @@
+.global asinf
+.type asinf,@function
+asinf:
+       flds 4(%esp)
+       jmp 1f
+
+.global asinl
+.type asinl,@function
+asinl:
+       fldt 4(%esp)
+       jmp 1f
+
+.global asin
+.type asin,@function
+asin:
+       fldl 4(%esp)
+1:     fld %st(0)
+       fmul %st(0)
+       fld1
+       fsubp %st(1)
+       fsqrt
+       fpatan
+       ret
diff --git a/src/math/i386/asinf.s b/src/math/i386/asinf.s
new file mode 100644 (file)
index 0000000..e07bf59
--- /dev/null
@@ -0,0 +1 @@
+# see asin.s
diff --git a/src/math/i386/asinl.s b/src/math/i386/asinl.s
new file mode 100644 (file)
index 0000000..e07bf59
--- /dev/null
@@ -0,0 +1 @@
+# see asin.s
diff --git a/src/math/i386/atan.s b/src/math/i386/atan.s
new file mode 100644 (file)
index 0000000..7e28b39
--- /dev/null
@@ -0,0 +1,7 @@
+.global atan
+.type atan,@function
+atan:
+       fldl 4(%esp)
+       fld1
+       fpatan
+       ret
diff --git a/src/math/i386/atan2.s b/src/math/i386/atan2.s
new file mode 100644 (file)
index 0000000..5c795af
--- /dev/null
@@ -0,0 +1,7 @@
+.global atan2
+.type atan2,@function
+atan2:
+       fldl 4(%esp)
+       fldl 12(%esp)
+       fpatan
+       ret
diff --git a/src/math/i386/atan2f.s b/src/math/i386/atan2f.s
new file mode 100644 (file)
index 0000000..08627e6
--- /dev/null
@@ -0,0 +1,7 @@
+.global atan2f
+.type atan2f,@function
+atan2f:
+       flds 4(%esp)
+       flds 8(%esp)
+       fpatan
+       ret
diff --git a/src/math/i386/atan2l.s b/src/math/i386/atan2l.s
new file mode 100644 (file)
index 0000000..adf6e10
--- /dev/null
@@ -0,0 +1,7 @@
+.global atan2l
+.type atan2l,@function
+atan2l:
+       fldt 4(%esp)
+       fldt 16(%esp)
+       fpatan
+       ret
diff --git a/src/math/i386/atanf.s b/src/math/i386/atanf.s
new file mode 100644 (file)
index 0000000..3cd4023
--- /dev/null
@@ -0,0 +1,7 @@
+.global atanf
+.type atanf,@function
+atanf:
+       flds 4(%esp)
+       fld1
+       fpatan
+       ret
diff --git a/src/math/i386/atanl.s b/src/math/i386/atanl.s
new file mode 100644 (file)
index 0000000..c508bc4
--- /dev/null
@@ -0,0 +1,7 @@
+.global atanl
+.type atanl,@function
+atanl:
+       fldt 4(%esp)
+       fld1
+       fpatan
+       ret