aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/x86_64/fpu/s_copysign.S
diff options
context:
space:
mode:
authorAndreas Jaeger <aj@suse.de>2002-07-23 19:36:20 +0000
committerAndreas Jaeger <aj@suse.de>2002-07-23 19:36:20 +0000
commit83a5fcc0b4ea84bf6d8f786d7c7e4949cf22e43f (patch)
treeab3d21ddf6423e5a820b4197d07637ae3998b9ff /sysdeps/x86_64/fpu/s_copysign.S
parent67ee6db0fdc36dc8760e44893db9675ea6899dbe (diff)
downloadglibc-83a5fcc0b4ea84bf6d8f786d7c7e4949cf22e43f.tar
glibc-83a5fcc0b4ea84bf6d8f786d7c7e4949cf22e43f.tar.gz
glibc-83a5fcc0b4ea84bf6d8f786d7c7e4949cf22e43f.tar.bz2
glibc-83a5fcc0b4ea84bf6d8f786d7c7e4949cf22e43f.zip
Use optimized version.
Diffstat (limited to 'sysdeps/x86_64/fpu/s_copysign.S')
-rw-r--r--sysdeps/x86_64/fpu/s_copysign.S19
1 files changed, 8 insertions, 11 deletions
diff --git a/sysdeps/x86_64/fpu/s_copysign.S b/sysdeps/x86_64/fpu/s_copysign.S
index f1ebcf8bf1..acb4c3a16e 100644
--- a/sysdeps/x86_64/fpu/s_copysign.S
+++ b/sysdeps/x86_64/fpu/s_copysign.S
@@ -27,14 +27,10 @@
#endif
.align ALIGNARG(4)
- ASM_TYPE_DIRECTIVE(signmask,@object)
-signmask:
+ ASM_TYPE_DIRECTIVE(mask,@object)
+mask:
.byte 0, 0, 0, 0, 0, 0, 0, 0x80
- .byte 0, 0, 0, 0, 0, 0, 0, 0
-othermask:
- .byte 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f
- .byte 0, 0, 0, 0, 0, 0, 0, 0
- ASM_SIZE_DIRECTIVE(othermask)
+ ASM_SIZE_DIRECTIVE(mask)
#ifdef PIC
#define MO(op) op##(%rip)
@@ -43,10 +39,11 @@ othermask:
#endif
ENTRY(__copysign)
- andpd MO(othermask),%xmm0
- andpd MO(signmask),%xmm1
- orpd %xmm1,%xmm0
- ret
+ movlpd MO(mask),%xmm3
+ andps %xmm3,%xmm0
+ andnpd %xmm1,%xmm3
+ orpd %xmm3,%xmm0
+ retq
END (__copysign)
weak_alias (__copysign, copysign)