aboutsummaryrefslogtreecommitdiff
path: root/gcc/config
diff options
context:
space:
mode:
authorSegher Boessenkool <segher@kernel.crashing.org>2015-05-12 15:49:21 +0200
committerSegher Boessenkool <segher@gcc.gnu.org>2015-05-12 15:49:21 +0200
commit1a93ca861c1a08072d089f62ce979bd80da574b0 (patch)
tree4f29e36e383cc1e8fa7db851dd57bccabf64c8c7 /gcc/config
parent52a680ceaa233dff461f1577cba129308b2a3c20 (diff)
downloadgcc-1a93ca861c1a08072d089f62ce979bd80da574b0.zip
gcc-1a93ca861c1a08072d089f62ce979bd80da574b0.tar.gz
gcc-1a93ca861c1a08072d089f62ce979bd80da574b0.tar.bz2
rs6000.md (rs6000_adjust_atomic_subword): Use gen_ashlsi3 and gen_andsi3 instead of gen_rlwinm.
* config/rs6000/rs6000.md (rs6000_adjust_atomic_subword): Use gen_ashlsi3 and gen_andsi3 instead of gen_rlwinm. From-SVN: r223071
Diffstat (limited to 'gcc/config')
-rw-r--r--gcc/config/rs6000/rs6000.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index 7971cba..3e6f2e3 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -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);