summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--sysdeps/x86_64/fpu/s_copysign.S19
2 files changed, 17 insertions, 8 deletions
diff --git a/ChangeLog b/ChangeLog
index 54676399b5..44451b2d96 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2002-08-31 Andreas Jaeger <aj@suse.de>
+
+ * sysdeps/x86_64/fpu/s_copysign.S: Fix algorithm.
+
+ * sysdeps/x86_64/fpu/libm-test-ulps: Add ulps for double tests.
+
2002-08-31 Ulrich Drepper <drepper@redhat.com>
* stdio-common/Makefile (generated): Add errlist-compat.c.
diff --git a/sysdeps/x86_64/fpu/s_copysign.S b/sysdeps/x86_64/fpu/s_copysign.S
index acb4c3a16e..f1ebcf8bf1 100644
--- a/sysdeps/x86_64/fpu/s_copysign.S
+++ b/sysdeps/x86_64/fpu/s_copysign.S
@@ -27,10 +27,14 @@
#endif
.align ALIGNARG(4)
- ASM_TYPE_DIRECTIVE(mask,@object)
-mask:
+ ASM_TYPE_DIRECTIVE(signmask,@object)
+signmask:
.byte 0, 0, 0, 0, 0, 0, 0, 0x80
- ASM_SIZE_DIRECTIVE(mask)
+ .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)
#ifdef PIC
#define MO(op) op##(%rip)
@@ -39,11 +43,10 @@ mask:
#endif
ENTRY(__copysign)
- movlpd MO(mask),%xmm3
- andps %xmm3,%xmm0
- andnpd %xmm1,%xmm3
- orpd %xmm3,%xmm0
- retq
+ andpd MO(othermask),%xmm0
+ andpd MO(signmask),%xmm1
+ orpd %xmm1,%xmm0
+ ret
END (__copysign)
weak_alias (__copysign, copysign)