2013-07-22 Bill Schmidt <wschmidt@vnet.linux.ibm.com>
authorwschmidt <wschmidt@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 22 Jul 2013 23:08:44 +0000 (23:08 +0000)
committerwschmidt <wschmidt@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 22 Jul 2013 23:08:44 +0000 (23:08 +0000)
    Anton Blanchard <anton@au1.ibm.com>

* config/rs6000/rs6000.c (rs6000_expand_vector_init): Fix
endianness when selecting field to splat.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@201149 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/rs6000/rs6000.c

index 8613ff5..d63ff27 100644 (file)
@@ -1,3 +1,9 @@
+2013-07-22  Bill Schmidt  <wschmidt@vnet.linux.ibm.com>
+           Anton Blanchard <anton@au1.ibm.com>
+
+       * config/rs6000/rs6000.c (rs6000_expand_vector_init): Fix
+       endianness when selecting field to splat.
+
 2013-07-22  Eric Christopher  <echristo@gmail.com>
 
        * dwarf2out.c (die_odr_checksum): New function to use
index 04c7594..646eedc 100644 (file)
@@ -5177,6 +5177,7 @@ rs6000_expand_vector_init (rtx target, rtx vals)
      of 64-bit items is not supported on Altivec.  */
   if (all_same && GET_MODE_SIZE (inner_mode) <= 4)
     {
+      rtx field;
       mem = assign_stack_temp (mode, GET_MODE_SIZE (inner_mode));
       emit_move_insn (adjust_address_nv (mem, inner_mode, 0),
                      XVECEXP (vals, 0, 0));
@@ -5187,9 +5188,11 @@ rs6000_expand_vector_init (rtx target, rtx vals)
                                              gen_rtx_SET (VOIDmode,
                                                           target, mem),
                                              x)));
+      field = (BYTES_BIG_ENDIAN ? const0_rtx
+              : GEN_INT (GET_MODE_NUNITS (mode) - 1));
       x = gen_rtx_VEC_SELECT (inner_mode, target,
                              gen_rtx_PARALLEL (VOIDmode,
-                                               gen_rtvec (1, const0_rtx)));
+                                               gen_rtvec (1, field)));
       emit_insn (gen_rtx_SET (VOIDmode, target,
                              gen_rtx_VEC_DUPLICATE (mode, x)));
       return;