about summary refs log tree commit diff
path: root/src/math/i386/hypot.s
diff options
context:
space:
mode:
authornsz <nsz@port70.net>2012-03-23 11:16:56 +0100
committernsz <nsz@port70.net>2012-03-23 11:16:56 +0100
commitc5ec5b2ce93bd87eb3dbf966d8bf279089f8a35d (patch)
tree35a276d479538eb3898e47358e9e8eded63cf5cc /src/math/i386/hypot.s
parent6d8df2b9720b7133a0735c9d5a2aae55021bb2c2 (diff)
parentad2d2b963a4bf9e2631b345c898e8715b36b459e (diff)
downloadmusl-c5ec5b2ce93bd87eb3dbf966d8bf279089f8a35d.tar.gz
musl-c5ec5b2ce93bd87eb3dbf966d8bf279089f8a35d.tar.xz
musl-c5ec5b2ce93bd87eb3dbf966d8bf279089f8a35d.zip
Merge branch 'master' of git://git.etalabs.net/musl
Diffstat (limited to 'src/math/i386/hypot.s')
-rw-r--r--src/math/i386/hypot.s45
1 files changed, 45 insertions, 0 deletions
diff --git a/src/math/i386/hypot.s b/src/math/i386/hypot.s
new file mode 100644
index 00000000..299c2e18
--- /dev/null
+++ b/src/math/i386/hypot.s
@@ -0,0 +1,45 @@
+.global hypot
+.type hypot,@function
+hypot:
+	mov 8(%esp),%eax
+	mov 16(%esp),%ecx
+	add %eax,%eax
+	add %ecx,%ecx
+	and %eax,%ecx
+	cmp $0xffe00000,%ecx
+	jae 2f
+	or 4(%esp),%eax
+	jnz 1f
+	fldl 12(%esp)
+	fabs
+	ret
+1:	mov 16(%esp),%eax
+	add %eax,%eax
+	or 12(%esp),%eax
+	jnz 1f
+	fldl 4(%esp)
+	fabs
+	ret
+1:	fldl 4(%esp)
+	fld %st(0)
+	fmulp
+	fldl 12(%esp)
+	fld %st(0)
+	fmulp
+	faddp
+	fsqrt
+	ret
+2:	sub $0xffe00000,%eax
+	or 4(%esp),%eax
+	jnz 1f
+	fldl 4(%esp)
+	fabs
+	ret
+1:	mov 16(%esp),%eax
+	add %eax,%eax
+	sub $0xffe00000,%eax
+	or 12(%esp),%eax
+	fldl 12(%esp)
+	jnz 1f
+	fabs
+1:	ret