[PATCH AArch64] Fix aarch64_simd_valid_immediate for Bigendian
authorAlan Lawrence <alan.lawrence@arm.com>
Tue, 25 Mar 2014 15:59:48 +0000 (15:59 +0000)
committerJames Greenhalgh <jgreenhalgh@gcc.gnu.org>
Tue, 25 Mar 2014 15:59:48 +0000 (15:59 +0000)
gcc/

* config/aarch64/aarch64.c (aarch64_simd_valid_immediate): Reverse
order of elements for big-endian.

From-SVN: r208814

gcc/ChangeLog
gcc/config/aarch64/aarch64.c

index 3da0621..fef65b6 100644 (file)
@@ -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
index ebd58c0..e839539 100644 (file)
@@ -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;