Fix atan / atan2 missing underflows (bug 15319).
[glibc.git] / sysdeps / i386 / fpu / e_atan2.S
blob6f5481fb5c1affa5da9ee46f31b0ffeebbcc82f3
1 /*
2  * Written by J.T. Conklin <jtc@netbsd.org>.
3  * Public domain.
4  */
6 #include <machine/asm.h>
8 RCSID("$NetBSD: e_atan2.S,v 1.4 1995/05/08 23:46:28 jtc Exp $")
10         .section .rodata.cst8,"aM",@progbits,8
12         .p2align 3
13         .type dbl_min,@object
14 dbl_min:        .byte 0, 0, 0, 0, 0, 0, 0x10, 0
15         ASM_SIZE_DIRECTIVE(dbl_min)
17 #ifdef PIC
18 # define MO(op) op##@GOTOFF(%ecx)
19 #else
20 # define MO(op) op
21 #endif
23         .text
24 ENTRY(__ieee754_atan2)
25 #ifdef  PIC
26         LOAD_PIC_REG (cx)
27 #endif
28         fldl     4(%esp)
29         fldl    12(%esp)
30         fpatan
31         fldl    MO(dbl_min)
32         fld     %st(1)
33         fabs
34         fucompp
35         fnstsw
36         sahf
37         jnc 1f
38         subl    $8, %esp
39         cfi_adjust_cfa_offset (8)
40         fld     %st(0)
41         fmul    %st(0)
42         fstpl   (%esp)
43         fstpl   (%esp)
44         fldl    (%esp)
45         addl    $8, %esp
46         cfi_adjust_cfa_offset (-8)
47 1:      ret
48 END (__ieee754_atan2)
49 strong_alias (__ieee754_atan2, __atan2_finite)