s_copysign.S revision 1.7
11.1Sjtc/*
21.6Ssalo * Written by J.T. Conklin <jtc@NetBSD.org>.
31.3Sjtc * Public domain.
41.1Sjtc */
51.1Sjtc
61.5Sfvdl/*
71.5Sfvdl * XXXfvdl might as well split this file.
81.5Sfvdl */
91.5Sfvdl
101.1Sjtc#include <machine/asm.h>
111.1Sjtc
121.7SjoergRCSID("$NetBSD: s_copysign.S,v 1.7 2011/06/18 20:49:26 joerg Exp $")
131.5Sfvdl
141.5Sfvdl#ifdef __x86_64__
151.5Sfvdl.Lpos:
161.5Sfvdl	.quad	0x8000000000000000
171.5Sfvdl.Lneg:
181.5Sfvdl	.quad	0x7fffffffffffffff
191.5Sfvdl#endif
201.5Sfvdl
211.2Sjtc
221.1SjtcENTRY(copysign)
231.5Sfvdl#ifdef __i386__
241.1Sjtc	movl	16(%esp),%edx
251.1Sjtc	andl	$0x80000000,%edx
261.1Sjtc	movl	8(%esp),%eax
271.1Sjtc	andl	$0x7fffffff,%eax
281.1Sjtc	orl	%edx,%eax
291.1Sjtc	movl	%eax,8(%esp)
301.1Sjtc	fldl	4(%esp)
311.5Sfvdl#else
321.5Sfvdl	movq	.Lpos(%rip),%xmm2
331.5Sfvdl	movq	.Lneg(%rip),%xmm3
341.5Sfvdl	pand	%xmm2,%xmm1
351.5Sfvdl	pand	%xmm3,%xmm0
361.5Sfvdl	por	%xmm1,%xmm0
371.5Sfvdl#endif
381.1Sjtc	ret
39