/** * This file has no copyright assigned and is placed in the Public Domain. * This file is part of the mingw-w64 runtime package. * No warranty is given; refer to the file DISCLAIMER.PD within this package. */ #include <_mingw_mac.h> /* * 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. */ #ifdef __x86_64__ .align 8 #else .align 2 #endif .globl __MINGW_USYMBOL(frexpl) __MINGW_USYMBOL(frexpl): #ifdef __x86_64__ pushq %rbp movq %rsp,%rbp subq $48,%rsp pushq %rsi fldt (%rdx) movq %rcx,%r9 fld %st(0) fstpt -12(%rbp) leaq -4(%rbp),%rcx movw -4(%rbp),%dx andl $32767,%edx jne L25 fldz fucompp fnstsw %ax andb $68,%ah xorb $64,%ah jne L21 movl $0,(%r8) fldz jmp L24 .align 4,0x90 .align 4,0x90 L21: fldt -12(%rbp) fadd %st(0),%st fstpt -12(%rbp) decl %edx movw (%rcx),%si andl $32767,%esi jne L22 cmpl $-66,%edx jg L21 L22: add %esi,%edx jmp L19 .align 2,0x90 L25: fstp %st(0) L19: addl $-16382,%edx movl %edx,(%r8) movw (%rcx),%ax andl $-32768,%eax orl $16382,%eax movw %ax,(%rcx) fldt -12(%rbp) L24: popq %rsi movq %r9,%rax movq $0,8(%r9) fstpt (%r9) leave ret #else pushl %ebp movl %esp,%ebp subl $24,%esp pushl %esi pushl %ebx fldt 8(%ebp) movl 20(%ebp),%ebx fld %st(0) fstpt -12(%ebp) leal -4(%ebp),%ecx movw -4(%ebp),%dx andl $32767,%edx jne L25 fldz fucompp fnstsw %ax andb $68,%ah xorb $64,%ah jne L21 movl $0,(%ebx) fldz jmp L24 .align 2,0x90 .align 2,0x90 L21: fldt -12(%ebp) fadd %st(0),%st fstpt -12(%ebp) decl %edx movw (%ecx),%si andl $32767,%esi jne L22 cmpl $-66,%edx jg L21 L22: addl %esi,%edx jmp L19 .align 2,0x90 L25: fstp %st(0) L19: addl $-16382,%edx movl %edx,(%ebx) movw (%ecx),%ax andl $-32768,%eax orl $16382,%eax movw %ax,(%ecx) fldt -12(%ebp) L24: leal -32(%ebp),%esp popl %ebx popl %esi leave ret #endif