Cygwin: (mostly) drop NT4 and Samba < 3.0 support
[newlib-cygwin.git] / winsup / cygwin / math / internal_logl.S
blobf8a075774a68f77a7d7b553073c119b120a2e888
1 /**
2  * This file has no copyright assigned and is placed in the Public Domain.
3  * This file is part of the mingw-w64 runtime package.
4  * No warranty is given; refer to the file DISCLAIMER.PD within this package.
5  */
6 #include <_mingw_mac.h>
8         .file   "internal_logl.S"
9         .text
10 #ifdef __x86_64__
11         .align 8
12 #else
13         .align 4
14 #endif
15 one:    .double 1.0
16         /* It is not important that this constant is precise.  It is only
17            a value which is known to be on the safe side for using the
18            fyl2xp1 instruction.  */
19 limit:  .double 0.29
21 .globl __MINGW_USYMBOL(__logl_internal)
22         .def    __MINGW_USYMBOL(__logl_internal);       .scl    2;      .type   32;     .endef
23 __MINGW_USYMBOL(__logl_internal):
24 #ifdef __x86_64__
25         fldln2                  // log(2)
26         fldt    (%rdx)          // x : log(2)
27         fld     %st             // x : x : log(2)
28         fsubl   one(%rip)       // x-1 : x : log(2)
29         fld     %st             // x-1 : x-1 : x : log(2)
30         fabs                    // |x-1| : x-1 : x : log(2)
31         fcompl  limit(%rip)     // x-1 : x : log(2)
32         fnstsw                  // x-1 : x : log(2)
33         andb    $0x45, %ah
34         jz      2f
35         fstp    %st(1)          // x-1 : log(2)
36         fyl2xp1                 // log(x)
37         movq    %rcx,%rax
38         movq    $0,8(%rcx)
39         fstpt   (%rcx)
40         ret
42 2:      fstp    %st(0)          // x : log(2)
43         fyl2x                   // log(x)
44         movq    %rcx,%rax
45         movq    $0,8(%rcx)
46         fstpt   (%rcx)
47         ret
48 #else
49         fldln2                  // log(2)
50         fldt    4(%esp)         // x : log(2)
51         fld     %st             // x : x : log(2)
52         fsubl   one             // x-1 : x : log(2)
53         fld     %st             // x-1 : x-1 : x : log(2)
54         fabs                    // |x-1| : x-1 : x : log(2)
55         fcompl  limit           // x-1 : x : log(2)
56         fnstsw                  // x-1 : x : log(2)
57         andb    $0x45, %ah
58         jz      2f
59         fstp    %st(1)          // x-1 : log(2)
60         fyl2xp1                 // log(x)
61         ret
63 2:      fstp    %st(0)          // x : log(2)
64         fyl2x                   // log(x)
65         ret
66 #endif