aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorHans-Peter Nilsson <hp@axis.com>2012-07-16 02:59:42 +0000
committerHans-Peter Nilsson <hp@gcc.gnu.org>2012-07-16 02:59:42 +0000
commitfdb6272c11a47c5030719f0cf059b57974a269f2 (patch)
tree06d91e59408087b0d008875716434045667a6699 /gcc
parent031831d69b54717a76577de28f450aa8af3e76d7 (diff)
downloadgcc-fdb6272c11a47c5030719f0cf059b57974a269f2.zip
gcc-fdb6272c11a47c5030719f0cf059b57974a269f2.tar.gz
gcc-fdb6272c11a47c5030719f0cf059b57974a269f2.tar.bz2
* config/cris/sync.md ("atomic_fetch_<atomic_op_name><mode>")
("atomic_compare_and_swap<mode>"): Gate expand_mem_thread_fence calls on result of call to need_atomic_barrier_p. From-SVN: r189500
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/config/cris/sync.md16
2 files changed, 18 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 676707e..2e12d4e 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2012-07-16 Hans-Peter Nilsson <hp@axis.com>
+
+ * config/cris/sync.md ("atomic_fetch_<atomic_op_name><mode>")
+ ("atomic_compare_and_swap<mode>"): Gate expand_mem_thread_fence
+ calls on result of call to need_atomic_barrier_p.
+
2012-07-15 Richard Sandiford <rdsandiford@googlemail.com>
* config/mips/mips.md (move_type): Replace mfhilo and mthilo
diff --git a/gcc/config/cris/sync.md b/gcc/config/cris/sync.md
index d0cc3b2..5dc2858 100644
--- a/gcc/config/cris/sync.md
+++ b/gcc/config/cris/sync.md
@@ -93,11 +93,15 @@
if (<MODE>mode != QImode && TARGET_TRAP_UNALIGNED_ATOMIC)
cris_emit_trap_for_misalignment (operands[1]);
- expand_mem_thread_fence (mmodel);
+ if (need_atomic_barrier_p (mmodel, true))
+ expand_mem_thread_fence (mmodel);
+
emit_insn (gen_cris_atomic_fetch_<atomic_op_name><mode>_1 (operands[0],
operands[1],
operands[2]));
- expand_mem_thread_fence (mmodel);
+ if (need_atomic_barrier_p (mmodel, false))
+ expand_mem_thread_fence (mmodel);
+
DONE;
})
@@ -196,13 +200,17 @@
if (<MODE>mode != QImode && TARGET_TRAP_UNALIGNED_ATOMIC)
cris_emit_trap_for_misalignment (operands[2]);
- expand_mem_thread_fence (mmodel);
+ if (need_atomic_barrier_p (mmodel, true))
+ expand_mem_thread_fence (mmodel);
+
emit_insn (gen_cris_atomic_compare_and_swap<mode>_1 (operands[0],
operands[1],
operands[2],
operands[3],
operands[4]));
- expand_mem_thread_fence (mmodel);
+ if (need_atomic_barrier_p (mmodel, false))
+ expand_mem_thread_fence (mmodel);
+
DONE;
})