/** * 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. */ /* * Written by J.T. Conklin . * Changes for long double by Ulrich Drepper * Public domain. */ #include <_mingw_mac.h> .file "copysignl.S" .text #ifdef __x86_64__ .align 8 #else .align 4 #endif .globl __MINGW_USYMBOL(copysignl) .def __MINGW_USYMBOL(copysignl); .scl 2; .type 32; .endef __MINGW_USYMBOL(copysignl): #if defined(_AMD64_) || defined(__x86_64__) movq (%rdx), %rax movq %rax, (%rcx) movq 8(%rdx), %rax movq 8(%r8), %rdx andq $0x777f, %rax andq $0x8000, %rdx orq %rdx, %rax movq %rax, 8(%rcx) movq %rcx, %rax ret #elif defined(_ARM_) || defined(__arm__) fcmpzd d1 fmstat bmi 1f /* jump if d1 is negative */ fcmpzd d0 fmstat vnegmi.f64 d0, d0 /* negate d0 if it is negative */ bx lr 1: fcmpzd d0 fmstat vnegpl.f64 d0, d0 /* negate d0 if it is positive */ bx lr #elif defined(_X86_) || defined(__i386__) movl 24(%esp),%edx movl 12(%esp),%eax andl $0x8000,%edx andl $0x7fff,%eax orl %edx,%eax movl %eax,12(%esp) fldt 4(%esp) ret #endif