Welcome to mirror list, hosted at ThFree Co, Russian Federation.

copysignl.S « math « cygwin « winsup - cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: ffe6240d5dbfe4ab51da9e7deb00324e21e5d47d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
/**
 * 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 <jtc@netbsd.org>.
 * Changes for long double by Ulrich Drepper <drepper@cygnus.com>
 * 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