about summary refs log tree commit diff
path: root/sysdeps/i386/fpu/e_atan2.S
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/i386/fpu/e_atan2.S')
-rw-r--r--sysdeps/i386/fpu/e_atan2.S35
1 files changed, 34 insertions, 1 deletions
diff --git a/sysdeps/i386/fpu/e_atan2.S b/sysdeps/i386/fpu/e_atan2.S
index e76f8e2a78..6f5481fb5c 100644
--- a/sysdeps/i386/fpu/e_atan2.S
+++ b/sysdeps/i386/fpu/e_atan2.S
@@ -7,10 +7,43 @@
 
 RCSID("$NetBSD: e_atan2.S,v 1.4 1995/05/08 23:46:28 jtc Exp $")
 
+	.section .rodata.cst8,"aM",@progbits,8
+
+	.p2align 3
+	.type dbl_min,@object
+dbl_min:	.byte 0, 0, 0, 0, 0, 0, 0x10, 0
+	ASM_SIZE_DIRECTIVE(dbl_min)
+
+#ifdef PIC
+# define MO(op) op##@GOTOFF(%ecx)
+#else
+# define MO(op) op
+#endif
+
+	.text
 ENTRY(__ieee754_atan2)
+#ifdef  PIC
+	LOAD_PIC_REG (cx)
+#endif
 	fldl	 4(%esp)
 	fldl	12(%esp)
 	fpatan
-	ret
+	fldl	MO(dbl_min)
+	fld	%st(1)
+	fabs
+	fucompp
+	fnstsw
+	sahf
+	jnc 1f
+	subl	$8, %esp
+	cfi_adjust_cfa_offset (8)
+	fld	%st(0)
+	fmul	%st(0)
+	fstpl	(%esp)
+	fstpl	(%esp)
+	fldl	(%esp)
+	addl	$8, %esp
+	cfi_adjust_cfa_offset (-8)
+1:	ret
 END (__ieee754_atan2)
 strong_alias (__ieee754_atan2, __atan2_finite)