aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Collingbourne <pcc@google.com>2013-05-15 20:33:45 +0200
committerAndreas Jaeger <aj@suse.de>2013-05-15 20:33:45 +0200
commit1deff3dca1b11fd7089bb641f6ee99adedeb8d0b (patch)
treeccc968e03c4fcb95647f815845b800c21843611f
parent791f3ba0db02911933255d080b8ff973330b9ebf (diff)
downloadglibc-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--ChangeLog4
-rw-r--r--sysdeps/x86_64/fpu/math_private.h6
2 files changed, 8 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 4550566..9bdeaaf 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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)