diff options
author | Hans-Peter Nilsson <hp@axis.com> | 2012-07-16 02:59:42 +0000 |
---|---|---|
committer | Hans-Peter Nilsson <hp@gcc.gnu.org> | 2012-07-16 02:59:42 +0000 |
commit | fdb6272c11a47c5030719f0cf059b57974a269f2 (patch) | |
tree | 06d91e59408087b0d008875716434045667a6699 /gcc | |
parent | 031831d69b54717a76577de28f450aa8af3e76d7 (diff) | |
download | gcc-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/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/config/cris/sync.md | 16 |
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; }) |