diff options
| -rw-r--r-- | src/math/i386/atan2.s | 12 | ||||
| -rw-r--r-- | src/math/i386/atan2f.s | 14 | 
2 files changed, 24 insertions, 2 deletions
| diff --git a/src/math/i386/atan2.s b/src/math/i386/atan2.s index 5c795aff..a7d2979b 100644 --- a/src/math/i386/atan2.s +++ b/src/math/i386/atan2.s @@ -4,4 +4,14 @@ atan2:  	fldl 4(%esp)  	fldl 12(%esp)  	fpatan -	ret +	fstl 4(%esp) +	mov 8(%esp),%eax +	add %eax,%eax +	cmp $0x00200000,%eax +	jae 1f +		# subnormal x, return x with underflow +	fnstsw %ax +	and $16,%ax +	jnz 1f +	fsts 4(%esp) +1:	ret diff --git a/src/math/i386/atan2f.s b/src/math/i386/atan2f.s index 08627e63..14b88ce5 100644 --- a/src/math/i386/atan2f.s +++ b/src/math/i386/atan2f.s @@ -4,4 +4,16 @@ atan2f:  	flds 4(%esp)  	flds 8(%esp)  	fpatan -	ret +	fsts 4(%esp) +	mov 4(%esp),%eax +	add %eax,%eax +	cmp $0x01000000,%eax +	jae 1f +		# subnormal x, return x with underflow +	fnstsw %ax +	and $16,%ax +	jnz 1f +	fld %st(0) +	fmul %st(1) +	fstps 4(%esp) +1:	ret | 
