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