asm for hypot and hypotf
[musl] / src / math / i386 / hypotf.s
diff --git a/src/math/i386/hypotf.s b/src/math/i386/hypotf.s
new file mode 100644 (file)
index 0000000..068935e
--- /dev/null
@@ -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