aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Lawrence <alan.lawrence@arm.com>2014-03-25 15:59:48 +0000
committerJames Greenhalgh <jgreenhalgh@gcc.gnu.org>2014-03-25 15:59:48 +0000
commit4b1e108cb2518d9a3f2e37e624ca787bb68957df (patch)
tree5b3b177cff852248efce5e8b17dc874a2c85621f
parent774f475861f60d93b160b1c736d25049c93a1e97 (diff)
downloadgcc-4b1e108cb2518d9a3f2e37e624ca787bb68957df.zip
gcc-4b1e108cb2518d9a3f2e37e624ca787bb68957df.tar.gz
gcc-4b1e108cb2518d9a3f2e37e624ca787bb68957df.tar.bz2
[PATCH AArch64] Fix aarch64_simd_valid_immediate for Bigendian
gcc/ * config/aarch64/aarch64.c (aarch64_simd_valid_immediate): Reverse order of elements for big-endian. From-SVN: r208814
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/aarch64/aarch64.c4
2 files changed, 8 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 3da0621..fef65b6 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2014-03-25 Alan Lawrence <alan.lawrence@arm.com>
+
+ * config/aarch64/aarch64.c (aarch64_simd_valid_immediate): Reverse
+ order of elements for big-endian.
+
2014-03-25 Richard Biener <rguenther@suse.de>
PR middle-end/60635
diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c
index ebd58c0..e839539 100644
--- a/gcc/config/aarch64/aarch64.c
+++ b/gcc/config/aarch64/aarch64.c
@@ -6566,7 +6566,9 @@ aarch64_simd_valid_immediate (rtx op, enum machine_mode mode, bool inverse,
/* Splat vector constant out into a byte vector. */
for (i = 0; i < n_elts; i++)
{
- rtx el = CONST_VECTOR_ELT (op, i);
+ /* The vector is provided in gcc endian-neutral fashion. For aarch64_be,
+ it must be laid out in the vector register in reverse order. */
+ rtx el = CONST_VECTOR_ELT (op, BYTES_BIG_ENDIAN ? (n_elts - 1 - i) : i);
unsigned HOST_WIDE_INT elpart;
unsigned int part, parts;