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 năm trước cách đây
mục cha
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