提交 ad2d2b96 编写于 作者: R Rich Felker

asm for hypot and hypotf

special care is made to avoid any inexact computations when either arg
is zero (in which case the exact absolute value of the other arg
should be returned) and to support the special condition that
hypot(±inf,nan) yields inf.

hypotl is not yet implemented since avoiding overflow is nontrivial.
上级 a9e85c0a
.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
.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
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册