aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorKito Cheng <kito.cheng@gmail.com>2018-03-04 07:58:34 +0000
committerChung-Ju Wu <jasonwucj@gcc.gnu.org>2018-03-04 07:58:34 +0000
commit264159d28c22a8d6eb35b47b65427654614772b9 (patch)
tree3b29d8015773833ce12d3cb28ddfc912c078ece2 /gcc
parent38946ea192bf484cc854dd407d34cce4de6b698b (diff)
downloadgcc-264159d28c22a8d6eb35b47b65427654614772b9.zip
gcc-264159d28c22a8d6eb35b47b65427654614772b9.tar.gz
gcc-264159d28c22a8d6eb35b47b65427654614772b9.tar.bz2
[NDS32] Add load_multiple,store_multiple and new attribute combo.
gcc/ * config/nds32/nds32.md (type): Add load_multiple and store_multiple. (combo): New attribute. * config/nds32/nds32-multiple.md: Refine patterns with new attributes. Co-Authored-By: Chung-Ju Wu <jasonwucj@gmail.com> From-SVN: r258232
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/config/nds32/nds32-multiple.md70
-rw-r--r--gcc/config/nds32/nds32.md12
3 files changed, 58 insertions, 31 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 3f999db..3b9fb4a 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2018-03-04 Kito Cheng <kito.cheng@gmail.com>
+ Chung-Ju Wu <jasonwucj@gmail.com>
+
+ * config/nds32/nds32.md (type): Add load_multiple and store_multiple.
+ (combo): New attribute.
+ * config/nds32/nds32-multiple.md: Refine patterns with new attributes.
+
2018-03-03 Chung-Ju Wu <jasonwucj@gmail.com>
* config/nds32/nds32.opt: Change -mcmodel= default value.
diff --git a/gcc/config/nds32/nds32-multiple.md b/gcc/config/nds32/nds32-multiple.md
index 238e8c2..a16709f 100644
--- a/gcc/config/nds32/nds32-multiple.md
+++ b/gcc/config/nds32/nds32-multiple.md
@@ -96,8 +96,9 @@
(mem:SI (plus:SI (match_dup 1) (const_int 28))))])]
"(XVECLEN (operands[0], 0) == 8)"
"lmw.bi\t%2, [%1], %9, 0x0"
- [(set_attr "type" "load")
- (set_attr "length" "4")]
+ [(set_attr "type" "load_multiple")
+ (set_attr "combo" "8")
+ (set_attr "length" "4")]
)
(define_insn "*lmwsi7"
@@ -118,8 +119,9 @@
(mem:SI (plus:SI (match_dup 1) (const_int 24))))])]
"(XVECLEN (operands[0], 0) == 7)"
"lmw.bi\t%2, [%1], %8, 0x0"
- [(set_attr "type" "load")
- (set_attr "length" "4")]
+ [(set_attr "type" "load_multiple")
+ (set_attr "combo" "7")
+ (set_attr "length" "4")]
)
(define_insn "*lmwsi6"
@@ -138,8 +140,9 @@
(mem:SI (plus:SI (match_dup 1) (const_int 20))))])]
"(XVECLEN (operands[0], 0) == 6)"
"lmw.bi\t%2, [%1], %7, 0x0"
- [(set_attr "type" "load")
- (set_attr "length" "4")]
+ [(set_attr "type" "load_multiple")
+ (set_attr "combo" "6")
+ (set_attr "length" "4")]
)
(define_insn "*lmwsi5"
@@ -156,8 +159,9 @@
(mem:SI (plus:SI (match_dup 1) (const_int 16))))])]
"(XVECLEN (operands[0], 0) == 5)"
"lmw.bi\t%2, [%1], %6, 0x0"
- [(set_attr "type" "load")
- (set_attr "length" "4")]
+ [(set_attr "type" "load_multiple")
+ (set_attr "combo" "5")
+ (set_attr "length" "4")]
)
(define_insn "*lmwsi4"
@@ -172,8 +176,9 @@
(mem:SI (plus:SI (match_dup 1) (const_int 12))))])]
"(XVECLEN (operands[0], 0) == 4)"
"lmw.bi\t%2, [%1], %5, 0x0"
- [(set_attr "type" "load")
- (set_attr "length" "4")]
+ [(set_attr "type" "load_multiple")
+ (set_attr "combo" "4")
+ (set_attr "length" "4")]
)
(define_insn "*lmwsi3"
@@ -186,8 +191,9 @@
(mem:SI (plus:SI (match_dup 1) (const_int 8))))])]
"(XVECLEN (operands[0], 0) == 3)"
"lmw.bi\t%2, [%1], %4, 0x0"
- [(set_attr "type" "load")
- (set_attr "length" "4")]
+ [(set_attr "type" "load_multiple")
+ (set_attr "combo" "3")
+ (set_attr "length" "4")]
)
(define_insn "*lmwsi2"
@@ -198,8 +204,9 @@
(mem:SI (plus:SI (match_dup 1) (const_int 4))))])]
"(XVECLEN (operands[0], 0) == 2)"
"lmw.bi\t%2, [%1], %3, 0x0"
- [(set_attr "type" "load")
- (set_attr "length" "4")]
+ [(set_attr "type" "load_multiple")
+ (set_attr "combo" "2")
+ (set_attr "length" "4")]
)
@@ -280,8 +287,9 @@
(match_operand:SI 9 "register_operand" ""))])]
"(XVECLEN (operands[0], 0) == 8)"
"smw.bi\t%2, [%1], %9, 0x0"
- [(set_attr "type" "store")
- (set_attr "length" "4")]
+ [(set_attr "type" "store_multiple")
+ (set_attr "combo" "8")
+ (set_attr "length" "4")]
)
(define_insn "*stmsi7"
@@ -302,8 +310,9 @@
(match_operand:SI 8 "register_operand" ""))])]
"(XVECLEN (operands[0], 0) == 7)"
"smw.bi\t%2, [%1], %8, 0x0"
- [(set_attr "type" "store")
- (set_attr "length" "4")]
+ [(set_attr "type" "store_multiple")
+ (set_attr "combo" "7")
+ (set_attr "length" "4")]
)
(define_insn "*stmsi6"
@@ -322,8 +331,9 @@
(match_operand:SI 7 "register_operand" ""))])]
"(XVECLEN (operands[0], 0) == 6)"
"smw.bi\t%2, [%1], %7, 0x0"
- [(set_attr "type" "store")
- (set_attr "length" "4")]
+ [(set_attr "type" "store_multiple")
+ (set_attr "combo" "6")
+ (set_attr "length" "4")]
)
(define_insn "*stmsi5"
@@ -340,8 +350,9 @@
(match_operand:SI 6 "register_operand" ""))])]
"(XVECLEN (operands[0], 0) == 5)"
"smw.bi\t%2, [%1], %6, 0x0"
- [(set_attr "type" "store")
- (set_attr "length" "4")]
+ [(set_attr "type" "store_multiple")
+ (set_attr "combo" "5")
+ (set_attr "length" "4")]
)
(define_insn "*stmsi4"
@@ -356,8 +367,9 @@
(match_operand:SI 5 "register_operand" ""))])]
"(XVECLEN (operands[0], 0) == 4)"
"smw.bi\t%2, [%1], %5, 0x0"
- [(set_attr "type" "store")
- (set_attr "length" "4")]
+ [(set_attr "type" "store_multiple")
+ (set_attr "combo" "4")
+ (set_attr "length" "4")]
)
(define_insn "*stmsi3"
@@ -370,8 +382,9 @@
(match_operand:SI 4 "register_operand" ""))])]
"(XVECLEN (operands[0], 0) == 3)"
"smw.bi\t%2, [%1], %4, 0x0"
- [(set_attr "type" "store")
- (set_attr "length" "4")]
+ [(set_attr "type" "store_multiple")
+ (set_attr "combo" "3")
+ (set_attr "length" "4")]
)
(define_insn "*stmsi2"
@@ -382,8 +395,9 @@
(match_operand:SI 3 "register_operand" ""))])]
"(XVECLEN (operands[0], 0) == 2)"
"smw.bi\t%2, [%1], %3, 0x0"
- [(set_attr "type" "store")
- (set_attr "length" "4")]
+ [(set_attr "type" "store_multiple")
+ (set_attr "combo" "2")
+ (set_attr "length" "4")]
)
;; Move a block of memory if it is word aligned and MORE than 2 words long.
diff --git a/gcc/config/nds32/nds32.md b/gcc/config/nds32/nds32.md
index 4ab6dee..71736f6 100644
--- a/gcc/config/nds32/nds32.md
+++ b/gcc/config/nds32/nds32.md
@@ -52,13 +52,17 @@
;; Insn type, it is used to default other attribute values.
(define_attr "type"
- "unknown,move,load,store,alu,compare,branch,call,misc"
+ "unknown,move,load,store,load_multiple,store_multiple,alu,compare,branch,call,misc"
(const_string "unknown"))
;; Length, in bytes, default is 4-bytes.
(define_attr "length" "" (const_int 4))
+;; Indicate the amount of micro instructions.
+(define_attr "combo"
+ "0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25"
+ (const_string "1"))
;; Enabled, which is used to enable/disable insn alternatives.
;; Note that we use length and TARGET_16_BIT here as criteria.
@@ -2166,7 +2170,8 @@ create_template:
{
return nds32_output_stack_push (operands[0]);
}
- [(set_attr "type" "misc")
+ [(set_attr "type" "store_multiple")
+ (set_attr "combo" "12")
(set_attr "enabled" "1")
(set (attr "length")
(if_then_else (match_test "TARGET_V3PUSH
@@ -2188,7 +2193,8 @@ create_template:
{
return nds32_output_stack_pop (operands[0]);
}
- [(set_attr "type" "misc")
+ [(set_attr "type" "load_multiple")
+ (set_attr "combo" "12")
(set_attr "enabled" "1")
(set (attr "length")
(if_then_else (match_test "TARGET_V3PUSH