Browse Source

math: fix i386 atan2.s to raise underflow for subnormal results

Szabolcs Nagy 11 years ago
parent
commit
411efb3bc6
2 changed files with 24 additions and 2 deletions
  1. 11 1
      src/math/i386/atan2.s
  2. 13 1
      src/math/i386/atan2f.s

+ 11 - 1
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

+ 13 - 1
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