diff --git a/lib/libm/arch/i387/s_copysignf.S b/lib/libm/arch/i387/s_copysignf.S index a217d357f54b..470d3ff82717 100644 --- a/lib/libm/arch/i387/s_copysignf.S +++ b/lib/libm/arch/i387/s_copysignf.S @@ -9,7 +9,7 @@ * XXXfvdl split this file. */ -RCSID("$NetBSD: s_copysignf.S,v 1.6 2011/06/18 20:49:26 joerg Exp $") +RCSID("$NetBSD: s_copysignf.S,v 1.7 2011/06/21 21:52:49 joerg Exp $") #ifdef __x86_64__ .Lneg: @@ -28,14 +28,10 @@ ENTRY(copysignf) movl %eax,4(%esp) flds 4(%esp) #else - movss %xmm0,-4(%rsp) - movss %xmm1,-8(%rsp) - movl -8(%rsp),%edx - andl $0x80000000,%edx - movl -4(%rsp),%eax - andl $0x7fffffff,%eax - orl %edx,%eax - movl %eax,-4(%rsp) - movss -4(%rsp),%xmm0 + movss .Lpos(%rip),%xmm2 + movss .Lneg(%rip),%xmm3 + pand %xmm2,%xmm1 + pand %xmm3,%xmm0 + por %xmm1,%xmm0 #endif ret