aboutsummaryrefslogtreecommitdiff
path: root/gcc/config/mips/sync.md
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/config/mips/sync.md')
-rw-r--r--gcc/config/mips/sync.md15
1 files changed, 12 insertions, 3 deletions
diff --git a/gcc/config/mips/sync.md b/gcc/config/mips/sync.md
index f053be65b22..35d10571abd 100644
--- a/gcc/config/mips/sync.md
+++ b/gcc/config/mips/sync.md
@@ -27,9 +27,18 @@
;; Atomic memory operations.
-(define_insn "memory_barrier"
- [(set (mem:BLK (scratch))
- (unspec:BLK [(const_int 0)] UNSPEC_MEMORY_BARRIER))]
+(define_expand "memory_barrier"
+ [(set (match_dup 0)
+ (unspec:BLK [(match_dup 0)] UNSPEC_MEMORY_BARRIER))]
+ "GENERATE_SYNC"
+{
+ operands[0] = gen_rtx_MEM (BLKmode, gen_rtx_SCRATCH (Pmode));
+ MEM_VOLATILE_P (operands[0]) = 1;
+})
+
+(define_insn "*memory_barrier"
+ [(set (match_operand:BLK 0 "" "")
+ (unspec:BLK [(match_dup 0)] UNSPEC_MEMORY_BARRIER))]
"GENERATE_SYNC"
"%|sync%-")