| /* | |
| Cephes Math Library Release 2.7: May, 1998 | |
| Copyright 1984, 1987, 1988, 1992, 1998 by Stephen L. Moshier | |
| Extracted from floorl.387 for use in libmingwex.a by | |
| Danny Smith <dannysmith@users.sourceforge.net> | |
| 2002-06-20 | |
| */ | |
| /* | |
| * frexpl(long double x, int* expnt) extracts the exponent from x. | |
| * It returns an integer power of two to expnt and the significand | |
| * between 0.5 and 1 to y. Thus x = y * 2**expn. | |
| */ | |
| .align 2 | |
| .globl _frexpl | |
| _frexpl: | |
| pushq %rbp | |
| movq %rsp,%rbp | |
| subq $24,%rsp | |
| pushq %rsi | |
| pushq %rbx | |
| fldt 16(%rbp) | |
| movq 40(%rbp),%rbx | |
| fld %st(0) | |
| fstpt -24(%rbp) | |
| leaq -8(%rbp),%rcx | |
| movw -8(%rbp),%dx | |
| andq $32767,%rdx | |
| jne L25 | |
| fldz | |
| fucompp | |
| fnstsw %ax | |
| andb $68,%ah | |
| xorb $64,%ah | |
| jne L21 | |
| movq $0,(%rbx) | |
| fldz | |
| jmp L24 | |
| .align 2,0x90 | |
| .align 2,0x90 | |
| L21: | |
| fldt -24(%rbp) | |
| fadd %st(0),%st | |
| fstpt -24(%rbp) | |
| decq %rdx | |
| movw (%rcx),%si | |
| andq $32767,%rsi | |
| jne L22 | |
| cmpq $-66,%rdx | |
| jg L21 | |
| L22: | |
| addq %rsi,%rdx | |
| jmp L19 | |
| .align 2,0x90 | |
| L25: | |
| fstp %st(0) | |
| L19: | |
| addq $-16382,%rdx | |
| movq %rdx,(%rbx) | |
| movw (%rcx),%ax | |
| andq $-32768,%rax | |
| orq $16382,%rax | |
| movw %ax,(%rcx) | |
| fldt -24(%rbp) | |
| L24: | |
| leaq -40(%rbp),%rsp | |
| popq %rbx | |
| popq %rsi | |
| leave | |
| ret |