rs6000.md (rs6000_adjust_atomic_subword): Use gen_ashlsi3 and gen_andsi3 instead...
authorSegher Boessenkool <segher@kernel.crashing.org>
Tue, 12 May 2015 13:49:21 +0000 (15:49 +0200)
committerSegher Boessenkool <segher@gcc.gnu.org>
Tue, 12 May 2015 13:49:21 +0000 (15:49 +0200)
* config/rs6000/rs6000.md (rs6000_adjust_atomic_subword): Use
gen_ashlsi3 and gen_andsi3 instead of gen_rlwinm.

From-SVN: r223071

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

index e605c56a5e5957eb2e54d6633028321c8ad81c93..7a07d50ff96600e105a916abfe9e42956fc09503 100644 (file)
@@ -1,3 +1,8 @@
+2015-05-12  Segher Boessenkool  <segher@kernel.crashing.org>
+
+       * config/rs6000/rs6000.md (rs6000_adjust_atomic_subword): Use
+       gen_ashlsi3 and gen_andsi3 instead of gen_rlwinm.
+
 2015-05-12  Segher Boessenkool  <segher@kernel.crashing.org>
 
        * config/rs6000/rs6000.md (extzv): FAIL for SImode.
index 7971cbadd0a974291f99ae69225d83499196c930..3e6f2e35aa30c66c04cebe2387e78fcce94ae49b 100644 (file)
@@ -20580,7 +20580,9 @@ rs6000_adjust_atomic_subword (rtx orig_mem, rtx *pshift, rtx *pmask)
   /* Shift amount for subword relative to aligned word.  */
   shift = gen_reg_rtx (SImode);
   addr = gen_lowpart (SImode, addr);
-  emit_insn (gen_rlwinm (shift, addr, GEN_INT (3), GEN_INT (shift_mask)));
+  rtx tmp = gen_reg_rtx (SImode);
+  emit_insn (gen_ashlsi3 (tmp, addr, GEN_INT (3)));
+  emit_insn (gen_andsi3 (shift, tmp, GEN_INT (shift_mask)));
   if (BYTES_BIG_ENDIAN)
     shift = expand_simple_binop (SImode, XOR, shift, GEN_INT (shift_mask),
                                 shift, 1, OPTAB_LIB_WIDEN);