about summary refs log tree commit diff
path: root/src/math/i386/hypotf.s
diff options
context:
space:
mode:
Diffstat (limited to 'src/math/i386/hypotf.s')
-rw-r--r--src/math/i386/hypotf.s42
1 files changed, 42 insertions, 0 deletions
diff --git a/src/math/i386/hypotf.s b/src/math/i386/hypotf.s
new file mode 100644
index 00000000..068935e2
--- /dev/null
+++ b/src/math/i386/hypotf.s
@@ -0,0 +1,42 @@
+.global hypotf
+.type hypotf,@function
+hypotf:
+	mov 4(%esp),%eax
+	mov 8(%esp),%ecx
+	add %eax,%eax
+	add %ecx,%ecx
+	and %eax,%ecx
+	cmp $0xff000000,%ecx
+	jae 2f
+	test %eax,%eax
+	jnz 1f
+	flds 8(%esp)
+	fabs
+	ret
+1:	mov 8(%esp),%eax
+	add %eax,%eax
+	jnz 1f
+	flds 4(%esp)
+	fabs
+	ret
+1:	flds 4(%esp)
+	fld %st(0)
+	fmulp
+	flds 8(%esp)
+	fld %st(0)
+	fmulp
+	faddp
+	fsqrt
+	ret
+2:	cmp $0xff000000,%eax
+	jnz 1f
+	flds 4(%esp)
+	fabs
+	ret
+1:	mov 8(%esp),%eax
+	add %eax,%eax
+	cmp $0xff000000,%eax
+	flds 8(%esp)
+	jnz 1f
+	fabs
+1:	ret