xref: /minix3/lib/libm/arch/i387/s_copysign.S (revision 84d9c625bfea59e274550651111ae9edfdc40fbd)
12fe8fb19SBen Gras/*
22fe8fb19SBen Gras * Written by J.T. Conklin <jtc@NetBSD.org>.
32fe8fb19SBen Gras * Public domain.
42fe8fb19SBen Gras */
52fe8fb19SBen Gras
62fe8fb19SBen Gras/*
72fe8fb19SBen Gras * XXXfvdl might as well split this file.
82fe8fb19SBen Gras */
92fe8fb19SBen Gras
102fe8fb19SBen Gras#include <machine/asm.h>
112fe8fb19SBen Gras
12*84d9c625SLionel SambucRCSID("$NetBSD: s_copysign.S,v 1.7 2011/06/18 20:49:26 joerg Exp $")
132fe8fb19SBen Gras
142fe8fb19SBen Gras#ifdef __x86_64__
152fe8fb19SBen Gras.Lpos:
162fe8fb19SBen Gras	.quad	0x8000000000000000
172fe8fb19SBen Gras.Lneg:
182fe8fb19SBen Gras	.quad	0x7fffffffffffffff
192fe8fb19SBen Gras#endif
202fe8fb19SBen Gras
212fe8fb19SBen Gras
222fe8fb19SBen GrasENTRY(copysign)
232fe8fb19SBen Gras#ifdef __i386__
242fe8fb19SBen Gras	movl	16(%esp),%edx
252fe8fb19SBen Gras	andl	$0x80000000,%edx
262fe8fb19SBen Gras	movl	8(%esp),%eax
272fe8fb19SBen Gras	andl	$0x7fffffff,%eax
282fe8fb19SBen Gras	orl	%edx,%eax
292fe8fb19SBen Gras	movl	%eax,8(%esp)
302fe8fb19SBen Gras	fldl	4(%esp)
312fe8fb19SBen Gras#else
322fe8fb19SBen Gras	movq	.Lpos(%rip),%xmm2
332fe8fb19SBen Gras	movq	.Lneg(%rip),%xmm3
342fe8fb19SBen Gras	pand	%xmm2,%xmm1
352fe8fb19SBen Gras	pand	%xmm3,%xmm0
362fe8fb19SBen Gras	por	%xmm1,%xmm0
372fe8fb19SBen Gras#endif
382fe8fb19SBen Gras	ret
39