diff options
author | Andreas Jaeger <aj@suse.de> | 2002-08-31 10:33:26 +0000 |
---|---|---|
committer | Andreas Jaeger <aj@suse.de> | 2002-08-31 10:33:26 +0000 |
commit | 7c9466bc7688e084cfbf9311eb91bdbaed1ea888 (patch) | |
tree | b3f17e8757bae3da71ef07fa4eee967236983fd5 /sysdeps/x86_64 | |
parent | 22ca6116c0c24ddcbc8be0de69a0bb497c64220a (diff) | |
download | glibc-7c9466bc7688e084cfbf9311eb91bdbaed1ea888.tar.gz glibc-7c9466bc7688e084cfbf9311eb91bdbaed1ea888.tar.xz glibc-7c9466bc7688e084cfbf9311eb91bdbaed1ea888.zip |
Update.
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.
Diffstat (limited to 'sysdeps/x86_64')
-rw-r--r-- | sysdeps/x86_64/fpu/s_copysign.S | 19 |
1 files changed, 11 insertions, 8 deletions
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) |