diff options
Diffstat (limited to 'gcc/config/mips/sync.md')
-rw-r--r-- | gcc/config/mips/sync.md | 15 |
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%-") |