diff options
author | Peter Collingbourne <pcc@google.com> | 2013-05-15 20:33:45 +0200 |
---|---|---|
committer | Andreas Jaeger <aj@suse.de> | 2013-05-15 20:33:45 +0200 |
commit | 1deff3dca1b11fd7089bb641f6ee99adedeb8d0b (patch) | |
tree | ccc968e03c4fcb95647f815845b800c21843611f | |
parent | 791f3ba0db02911933255d080b8ff973330b9ebf (diff) | |
download | glibc-1deff3dca1b11fd7089bb641f6ee99adedeb8d0b.zip glibc-1deff3dca1b11fd7089bb641f6ee99adedeb8d0b.tar.gz glibc-1deff3dca1b11fd7089bb641f6ee99adedeb8d0b.tar.bz2 |
Use movq for 64-bit operations
The EXTRACT_WORDS64 and INSERT_WORDS64 macros use movd for a 64-bit
operation. Somehow gcc manages to turn this into movq, but LLVM won't.
2013-05-15 Peter Collingbourne <pcc@google.com>
* sysdeps/x86_64/fpu/math_private.h (MOVQ): New macro.
(EXTRACT_WORDS64) Use where appropriate.
(INSERT_WORDS64) Likewise.
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | sysdeps/x86_64/fpu/math_private.h | 6 |
2 files changed, 8 insertions, 2 deletions
@@ -1,5 +1,9 @@ 2013-05-15 Peter Collingbourne <pcc@google.com> + * sysdeps/x86_64/fpu/math_private.h (MOVQ): New macro. + (EXTRACT_WORDS64) Use where appropriate. + (INSERT_WORDS64) Likewise. + * sysdeps/x86_64/fpu/multiarch/s_fma.c (__fma_fma4): Replace xm constraints with x constraints. * sysdeps/x86_64/fpu/multiarch/s_fmaf.c (__fmaf_fma4): Likewise. diff --git a/sysdeps/x86_64/fpu/math_private.h b/sysdeps/x86_64/fpu/math_private.h index 63a699e..027a6a3 100644 --- a/sysdeps/x86_64/fpu/math_private.h +++ b/sysdeps/x86_64/fpu/math_private.h @@ -5,15 +5,17 @@ #if defined __AVX__ || defined SSE2AVX # define MOVD "vmovd" +# define MOVQ "vmovq" #else # define MOVD "movd" +# define MOVQ "movq" #endif /* Direct movement of float into integer register. */ #define EXTRACT_WORDS64(i, d) \ do { \ int64_t i_; \ - asm (MOVD " %1, %0" : "=rm" (i_) : "x" ((double) (d))); \ + asm (MOVQ " %1, %0" : "=rm" (i_) : "x" ((double) (d))); \ (i) = i_; \ } while (0) @@ -22,7 +24,7 @@ do { \ int64_t i_ = i; \ double d__; \ - asm (MOVD " %1, %0" : "=x" (d__) : "rm" (i_)); \ + asm (MOVQ " %1, %0" : "=x" (d__) : "rm" (i_)); \ d = d__; \ } while (0) |