aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorAnton Blanchard <anton@samba.org>2013-06-11 06:17:50 +0000
committerAlan Modra <amodra@gcc.gnu.org>2013-06-11 15:47:50 +0930
commit6b438d5886bd7f0ad25e37b55015a027a53e1949 (patch)
treeff49c6fa813aaeb20958acb9f023d2c6c2bb0958 /gcc
parent3bc66938e06e05d6b733e80c6f497e62715bb121 (diff)
downloadgcc-6b438d5886bd7f0ad25e37b55015a027a53e1949.zip
gcc-6b438d5886bd7f0ad25e37b55015a027a53e1949.tar.gz
gcc-6b438d5886bd7f0ad25e37b55015a027a53e1949.tar.bz2
rs6000.c (rs6000_adjust_atomic_subword): Calculate correct shift value in little-endian mode.
* config/rs6000/rs6000.c (rs6000_adjust_atomic_subword): Calculate correct shift value in little-endian mode. From-SVN: r199935
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/rs6000/rs6000.c5
2 files changed, 8 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 903a79c..b3db96e 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2013-06-11 Anton Blanchard <anton@samba.org>
+
+ * config/rs6000/rs6000.c (rs6000_adjust_atomic_subword): Calculate
+ correct shift value in little-endian mode.
+
2013-06-11 Jakub Jelinek <jakub@redhat.com>
PR target/56564
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index 3646c6d..54dc0ce 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -17881,8 +17881,9 @@ rs6000_adjust_atomic_subword (rtx orig_mem, rtx *pshift, rtx *pmask)
shift = gen_reg_rtx (SImode);
addr = gen_lowpart (SImode, addr);
emit_insn (gen_rlwinm (shift, addr, GEN_INT (3), GEN_INT (shift_mask)));
- shift = expand_simple_binop (SImode, XOR, shift, GEN_INT (shift_mask),
- shift, 1, OPTAB_LIB_WIDEN);
+ if (WORDS_BIG_ENDIAN)
+ shift = expand_simple_binop (SImode, XOR, shift, GEN_INT (shift_mask),
+ shift, 1, OPTAB_LIB_WIDEN);
*pshift = shift;
/* Mask for insertion. */