Browse Source

asm for inverse trig functions

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.
Rich Felker 13 years ago
parent
commit
bc33e61704

+ 24 - 0
src/math/i386/acos.s

@@ -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

+ 1 - 0
src/math/i386/acosf.s

@@ -0,0 +1 @@
+# see acos.s

+ 1 - 0
src/math/i386/acosl.s

@@ -0,0 +1 @@
+# see acos.s

+ 23 - 0
src/math/i386/asin.s

@@ -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

+ 1 - 0
src/math/i386/asinf.s

@@ -0,0 +1 @@
+# see asin.s

+ 1 - 0
src/math/i386/asinl.s

@@ -0,0 +1 @@
+# see asin.s

+ 7 - 0
src/math/i386/atan.s

@@ -0,0 +1,7 @@
+.global atan
+.type atan,@function
+atan:
+	fldl 4(%esp)
+	fld1
+	fpatan
+	ret

+ 7 - 0
src/math/i386/atan2.s

@@ -0,0 +1,7 @@
+.global atan2
+.type atan2,@function
+atan2:
+	fldl 4(%esp)
+	fldl 12(%esp)
+	fpatan
+	ret

+ 7 - 0
src/math/i386/atan2f.s

@@ -0,0 +1,7 @@
+.global atan2f
+.type atan2f,@function
+atan2f:
+	flds 4(%esp)
+	flds 8(%esp)
+	fpatan
+	ret

+ 7 - 0
src/math/i386/atan2l.s

@@ -0,0 +1,7 @@
+.global atan2l
+.type atan2l,@function
+atan2l:
+	fldt 4(%esp)
+	fldt 16(%esp)
+	fpatan
+	ret

+ 7 - 0
src/math/i386/atanf.s

@@ -0,0 +1,7 @@
+.global atanf
+.type atanf,@function
+atanf:
+	flds 4(%esp)
+	fld1
+	fpatan
+	ret

+ 7 - 0
src/math/i386/atanl.s

@@ -0,0 +1,7 @@
+.global atanl
+.type atanl,@function
+atanl:
+	fldt 4(%esp)
+	fld1
+	fpatan
+	ret