This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH-v2] Generate more efficient memory barriers for LEON3
- From: Daniel Cederman <cederman at gaisler dot com>
- To: gcc-patches at gcc dot gnu dot org
- Cc: software at gaisler dot com, ebotcazou at adacore dot com
- Date: Fri, 11 Jul 2014 09:57:26 +0200
- Subject: [PATCH-v2] Generate more efficient memory barriers for LEON3
- Authentication-results: sourceware.org; auth=none
ChangeLog:
2014-07-11 Daniel Cederman <cederman@gaisler.com>
gcc/config/sparc/
* sync.md: Generate more efficient memory barriers for LEON3
---
gcc/config/sparc/sync.md | 21 +++++++++++++++++++--
1 file changed, 19 insertions(+), 2 deletions(-)
diff --git a/gcc/config/sparc/sync.md b/gcc/config/sparc/sync.md
index e6e237f..05c3277 100644
--- a/gcc/config/sparc/sync.md
+++ b/gcc/config/sparc/sync.md
@@ -64,11 +64,19 @@
"stbar"
[(set_attr "type" "multi")])
+;; For LEON3, STB has the effect of membar #StoreLoad.
+(define_insn "*membar_storeload_leon3"
+ [(set (match_operand:BLK 0 "" "")
+ (unspec:BLK [(match_dup 0) (const_int 2)] UNSPEC_MEMBAR))]
+ "TARGET_LEON3"
+ "stb\t%%g0, [%%sp-1]"
+ [(set_attr "type" "store")])
+
;; For V8, LDSTUB has the effect of membar #StoreLoad.
(define_insn "*membar_storeload"
[(set (match_operand:BLK 0 "" "")
(unspec:BLK [(match_dup 0) (const_int 2)] UNSPEC_MEMBAR))]
- "TARGET_V8"
+ "TARGET_V8 && !TARGET_LEON3"
"ldstub\t[%%sp-1], %%g0"
[(set_attr "type" "multi")])
@@ -79,7 +87,7 @@
[(set (match_operand:BLK 0 "" "")
(unspec:BLK [(match_dup 0) (match_operand:SI 1 "const_int_operand")]
UNSPEC_MEMBAR))]
- "TARGET_V8"
+ "TARGET_V8 && !TARGET_LEON3"
"stbar\n\tldstub\t[%%sp-1], %%g0"
[(set_attr "type" "multi")
(set_attr "length" "2")])
@@ -93,6 +101,15 @@
"membar\t%1"
[(set_attr "type" "multi")])
+;; For LEON3, membar #StoreLoad is enough for a full barrier.
+(define_insn "*membar_leon3"
+ [(set (match_operand:BLK 0 "" "")
+ (unspec:BLK [(match_dup 0) (match_operand:SI 1 "const_int_operand")]
+ UNSPEC_MEMBAR))]
+ "TARGET_LEON3"
+ "stb\t%%g0, [%%sp-1]"
+ [(set_attr "type" "store")])
+
(define_peephole2
[(set (match_operand:BLK 0 "" "")
(unspec:BLK [(match_dup 0) (match_operand:SI 1 "const_int_operand")]
--
1.7.9.5