diff options
author | sofiane <sofiane@138bc75d-0d04-0410-961f-82ee72b054a4> | 2013-07-22 12:39:18 +0000 |
---|---|---|
committer | sofiane <sofiane@138bc75d-0d04-0410-961f-82ee72b054a4> | 2013-07-22 12:39:18 +0000 |
commit | 1aed520402e26260d6e1561ffda5c1ec65d61c5b (patch) | |
tree | 3ec935bb24e43a2fa069d9baaf3bed7a18cb3c24 /gcc | |
parent | a9b468ef919592599661612b241db187e4d8113a (diff) | |
download | gcc-1aed520402e26260d6e1561ffda5c1ec65d61c5b.tar.gz |
* config/arm/arm.md (attribute "insn"): Delete.
(attribute "type"): Add "mov_imm", "mov_reg", "mov_shift",
"mov_shift_reg", "mvn_imm", "mvn_reg", "mvn_shift" and "mvn_shift_reg".
(not_shiftsi): Update for attribute change.
(not_shiftsi_compare0): Likewise.
(not_shiftsi_compare0_scratch): Likewise.
(arm_one_cmplsi2): Likewise.
(thumb1_one_cmplsi2): Likewise.
(notsi_compare0): Likewise.
(notsi_compare0_scratch): Likewise.
(thumb1_movdi_insn): Likewise.
(arm_movsi_insn): Likewise.
(movhi_insn_arch4): Likewise.
(movhi_bytes): Likewise.
(arm_movqi_insn): Likewise.
(thumb1_movqi_insn): Likewise.
(arm32_movhf): Likewise.
(thumb1_movhf): Likewise.
(arm_movsf_soft_insn): Likewise.
(thumb1_movsf_insn): Likewise.
(thumb_movdf_insn): Likewise.
(movsicc_insn): Likewise.
(movsfcc_soft_insn): Likewise.
(and_scc): Likewise.
(cond_move): Likewise.
(if_move_not): Likewise.
(if_not_move): Likewise.
(if_shift_move): Likewise.
(if_move_shift): Likewise.
(if_shift_shift): Likewise.
(if_not_arith): Likewise.
(if_arith_not): Likewise.
(cond_move_not): Likewise.
* config/arm/neon.md (neon_mov<mode>): Update for attribute change.
(neon_mov<mode>): Likewise.
* config/arm/vfp.md (arm_movsi_vfp): Update for attribute change.
(thumb2_movsi_vfp): Likewise.
(movsf_vfp): Likewise.
(thumb2_movsf_vfp): Likewise.
* config/arm/arm.c (xscale_sched_adjust_cost): Update for attribute change.
(cortexa7_older_only): Likewise.
(cortexa7_younger): Likewise.
* config/arm/arm1020e.md (1020alu_op): Update for attribute change.
(1020alu_shift_op): Likewise.
(1020alu_shift_reg_op): Likewise.
* config/arm/arm1026ejs.md (alu_op): Update for attribute change.
(alu_shift_op): Likewise.
(alu_shift_reg_op): Likewise.
* config/arm/arm1136jfs.md (11_alu_op): Update for attribute change.
(11_alu_shift_op): Likewise.
(11_alu_shift_reg_op): Likewise.
* config/arm/arm926ejs.md (9_alu_op): Update for attribute change.
(9_alu_shift_reg_op): Likewise.
* config/arm/cortex-a15.md (cortex_a15_alu): Update for attribute change.
(cortex_a15_alu_shift): Likewise.
(cortex_a15_alu_shift_reg): Likewise.
* config/arm/cortex-a5.md (cortex_a5_alu): Update for attribute change.
(cortex_a5_alu_shift): Likewise.
* config/arm/cortex-a53.md (cortex_a53_alu): Update for attribute change.
(cortex_a53_alu_shift): Likewise.
* config/arm/cortex-a7.md (cortex_a7_alu_imm): Update for attribute change.
(cortex_a7_alu_reg): Likewise.
(cortex_a7_alu_shift): Likewise.
* config/arm/cortex-a8.md (cortex_a8_alu): Update for attribute change.
(cortex_a8_alu_shift): Likewise.
(cortex_a8_alu_shift_reg): Likewise.
(cortex_a8_mov): Likewise.
* config/arm/cortex-a9.md (cortex_a9_dp): Update for attribute change.
(cortex_a9_dp_shift): Likewise.
* config/arm/cortex-m4.md (cortex_m4_alu): Update for attribute change.
* config/arm/cortex-r4.md (cortex_r4_alu): Update for attribute change.
(cortex_r4_mov): Likewise.
(cortex_r4_alu_shift): Likewise.
(cortex_r4_alu_shift_reg): Likewise.
* config/arm/fa526.md (526_alu_op): Update for attribute change.
(526_alu_shift_op): Likewise.
* config/arm/fa606te.md (606te_alu_op): Update for attribute change.
* config/arm/fa626te.md (626te_alu_op): Update for attribute change.
(626te_alu_shift_op): Likewise.
* config/arm/fa726te.md (726te_shift_op): Update for attribute change.
(726te_alu_op): Likewise.
(726te_alu_shift_op): Likewise.
(726te_alu_shift_reg_op): Likewise.
* config/arm/fmp626.md (mp626_alu_op): Update for attribute change.
(mp626_alu_shift_op): Likewise.
* config/arm/marvell-pj4.md (pj4_alu_e1): Update for attribute change.
(pj4_alu_e1_conds): Likewise.
(pj4_alu): Likewise.
(pj4_alu_conds): Likewise.
(pj4_shift): Likewise.
(pj4_shift_conds): Likewise.
(pj4_alu_shift): Likewise.
(pj4_alu_shift_conds): Likewise.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@201124 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 96 | ||||
-rw-r--r-- | gcc/config/arm/arm.c | 19 | ||||
-rw-r--r-- | gcc/config/arm/arm.md | 136 | ||||
-rw-r--r-- | gcc/config/arm/arm1020e.md | 7 | ||||
-rw-r--r-- | gcc/config/arm/arm1026ejs.md | 7 | ||||
-rw-r--r-- | gcc/config/arm/arm1136jfs.md | 7 | ||||
-rw-r--r-- | gcc/config/arm/arm926ejs.md | 6 | ||||
-rw-r--r-- | gcc/config/arm/cortex-a15.md | 8 | ||||
-rw-r--r-- | gcc/config/arm/cortex-a5.md | 7 | ||||
-rw-r--r-- | gcc/config/arm/cortex-a53.md | 7 | ||||
-rw-r--r-- | gcc/config/arm/cortex-a7.md | 10 | ||||
-rw-r--r-- | gcc/config/arm/cortex-a8.md | 15 | ||||
-rw-r--r-- | gcc/config/arm/cortex-a9.md | 13 | ||||
-rw-r--r-- | gcc/config/arm/cortex-m4.md | 4 | ||||
-rw-r--r-- | gcc/config/arm/cortex-r4.md | 10 | ||||
-rw-r--r-- | gcc/config/arm/fa526.md | 7 | ||||
-rw-r--r-- | gcc/config/arm/fa606te.md | 5 | ||||
-rw-r--r-- | gcc/config/arm/fa626te.md | 7 | ||||
-rw-r--r-- | gcc/config/arm/fa726te.md | 12 | ||||
-rw-r--r-- | gcc/config/arm/fmp626.md | 7 | ||||
-rw-r--r-- | gcc/config/arm/marvell-pj4.md | 28 | ||||
-rw-r--r-- | gcc/config/arm/neon.md | 6 | ||||
-rw-r--r-- | gcc/config/arm/vfp.md | 12 |
23 files changed, 271 insertions, 165 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b07b09a3cdc..2715fb15a2e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,99 @@ +2013-07-22 Sofiane Naci <sofiane.naci@arm.com> + + * config/arm/arm.md (attribute "insn"): Delete. + (attribute "type"): Add "mov_imm", "mov_reg", "mov_shift", + "mov_shift_reg", "mvn_imm", "mvn_reg", "mvn_shift" and "mvn_shift_reg". + (not_shiftsi): Update for attribute change. + (not_shiftsi_compare0): Likewise. + (not_shiftsi_compare0_scratch): Likewise. + (arm_one_cmplsi2): Likewise. + (thumb1_one_cmplsi2): Likewise. + (notsi_compare0): Likewise. + (notsi_compare0_scratch): Likewise. + (thumb1_movdi_insn): Likewise. + (arm_movsi_insn): Likewise. + (movhi_insn_arch4): Likewise. + (movhi_bytes): Likewise. + (arm_movqi_insn): Likewise. + (thumb1_movqi_insn): Likewise. + (arm32_movhf): Likewise. + (thumb1_movhf): Likewise. + (arm_movsf_soft_insn): Likewise. + (thumb1_movsf_insn): Likewise. + (thumb_movdf_insn): Likewise. + (movsicc_insn): Likewise. + (movsfcc_soft_insn): Likewise. + (and_scc): Likewise. + (cond_move): Likewise. + (if_move_not): Likewise. + (if_not_move): Likewise. + (if_shift_move): Likewise. + (if_move_shift): Likewise. + (if_shift_shift): Likewise. + (if_not_arith): Likewise. + (if_arith_not): Likewise. + (cond_move_not): Likewise. + * config/arm/neon.md (neon_mov<mode>): Update for attribute change. + (neon_mov<mode>): Likewise. + * config/arm/vfp.md (arm_movsi_vfp): Update for attribute change. + (thumb2_movsi_vfp): Likewise. + (movsf_vfp): Likewise. + (thumb2_movsf_vfp): Likewise. + * config/arm/arm.c (xscale_sched_adjust_cost): Update for attribute change. + (cortexa7_older_only): Likewise. + (cortexa7_younger): Likewise. + * config/arm/arm1020e.md (1020alu_op): Update for attribute change. + (1020alu_shift_op): Likewise. + (1020alu_shift_reg_op): Likewise. + * config/arm/arm1026ejs.md (alu_op): Update for attribute change. + (alu_shift_op): Likewise. + (alu_shift_reg_op): Likewise. + * config/arm/arm1136jfs.md (11_alu_op): Update for attribute change. + (11_alu_shift_op): Likewise. + (11_alu_shift_reg_op): Likewise. + * config/arm/arm926ejs.md (9_alu_op): Update for attribute change. + (9_alu_shift_reg_op): Likewise. + * config/arm/cortex-a15.md (cortex_a15_alu): Update for attribute change. + (cortex_a15_alu_shift): Likewise. + (cortex_a15_alu_shift_reg): Likewise. + * config/arm/cortex-a5.md (cortex_a5_alu): Update for attribute change. + (cortex_a5_alu_shift): Likewise. + * config/arm/cortex-a53.md (cortex_a53_alu): Update for attribute change. + (cortex_a53_alu_shift): Likewise. + * config/arm/cortex-a7.md (cortex_a7_alu_imm): Update for attribute change. + (cortex_a7_alu_reg): Likewise. + (cortex_a7_alu_shift): Likewise. + * config/arm/cortex-a8.md (cortex_a8_alu): Update for attribute change. + (cortex_a8_alu_shift): Likewise. + (cortex_a8_alu_shift_reg): Likewise. + (cortex_a8_mov): Likewise. + * config/arm/cortex-a9.md (cortex_a9_dp): Update for attribute change. + (cortex_a9_dp_shift): Likewise. + * config/arm/cortex-m4.md (cortex_m4_alu): Update for attribute change. + * config/arm/cortex-r4.md (cortex_r4_alu): Update for attribute change. + (cortex_r4_mov): Likewise. + (cortex_r4_alu_shift): Likewise. + (cortex_r4_alu_shift_reg): Likewise. + * config/arm/fa526.md (526_alu_op): Update for attribute change. + (526_alu_shift_op): Likewise. + * config/arm/fa606te.md (606te_alu_op): Update for attribute change. + * config/arm/fa626te.md (626te_alu_op): Update for attribute change. + (626te_alu_shift_op): Likewise. + * config/arm/fa726te.md (726te_shift_op): Update for attribute change. + (726te_alu_op): Likewise. + (726te_alu_shift_op): Likewise. + (726te_alu_shift_reg_op): Likewise. + * config/arm/fmp626.md (mp626_alu_op): Update for attribute change. + (mp626_alu_shift_op): Likewise. + * config/arm/marvell-pj4.md (pj4_alu_e1): Update for attribute change. + (pj4_alu_e1_conds): Likewise. + (pj4_alu): Likewise. + (pj4_alu_conds): Likewise. + (pj4_shift): Likewise. + (pj4_shift_conds): Likewise. + (pj4_alu_shift): Likewise. + (pj4_alu_shift_conds): Likewise. + 2013-07-22 Kyrylo Tkachov <kyrylo.tkachov@arm.com> * config/arm/predicates.md (shiftable_operator_strict_it): diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c index aba8c6649b3..ad5446927d4 100644 --- a/gcc/config/arm/arm.c +++ b/gcc/config/arm/arm.c @@ -8653,7 +8653,12 @@ xscale_sched_adjust_cost (rtx insn, rtx link, rtx dep, int * cost) instruction we depend on is another ALU instruction, then we may have to account for an additional stall. */ if (shift_opnum != 0 - && (attr_type == TYPE_ARLO_SHIFT || attr_type == TYPE_ARLO_SHIFT_REG)) + && (attr_type == TYPE_ARLO_SHIFT + || attr_type == TYPE_ARLO_SHIFT_REG + || attr_type == TYPE_MOV_SHIFT + || attr_type == TYPE_MVN_SHIFT + || attr_type == TYPE_MOV_SHIFT_REG + || attr_type == TYPE_MVN_SHIFT_REG)) { rtx shifted_operand; int opno; @@ -8934,12 +8939,10 @@ cortexa7_older_only (rtx insn) if (recog_memoized (insn) < 0) return false; - if (get_attr_insn (insn) == INSN_MOV) - return false; - switch (get_attr_type (insn)) { case TYPE_ARLO_REG: + case TYPE_MVN_REG: case TYPE_SHIFT: case TYPE_SHIFT_REG: case TYPE_LOAD_BYTE: @@ -8982,13 +8985,15 @@ cortexa7_younger (FILE *file, int verbose, rtx insn) return false; } - if (get_attr_insn (insn) == INSN_MOV) - return true; - switch (get_attr_type (insn)) { case TYPE_ARLO_IMM: case TYPE_EXTEND: + case TYPE_MVN_IMM: + case TYPE_MOV_IMM: + case TYPE_MOV_REG: + case TYPE_MOV_SHIFT: + case TYPE_MOV_SHIFT_REG: case TYPE_BRANCH: case TYPE_CALL: return true; diff --git a/gcc/config/arm/arm.md b/gcc/config/arm/arm.md index e7eb428e44a..b313d3beec7 100644 --- a/gcc/config/arm/arm.md +++ b/gcc/config/arm/arm.md @@ -245,14 +245,6 @@ (set_attr "length" "4") (set_attr "pool_range" "250")]) -;; The instruction used to implement a particular pattern. This -;; information is used by pipeline descriptions to provide accurate -;; scheduling information. - -(define_attr "insn" - "mov,mvn,other" - (const_string "other")) - ; TYPE attribute is used to classify instructions for use in scheduling. ; ; Instruction classification: @@ -298,9 +290,18 @@ ; load4 load 4 words from memory to arm registers. ; mla integer multiply accumulate. ; mlas integer multiply accumulate, flag setting. -; mov integer move. +; mov_imm simple MOV instruction that moves an immediate to +; register. This includes MOVW, but not MOVT. +; mov_reg simple MOV instruction that moves a register to another +; register. This includes MOVW, but not MOVT. +; mov_shift simple MOV instruction, shifted operand by a constant. +; mov_shift_reg simple MOV instruction, shifted operand by a register. ; mul integer multiply. ; muls integer multiply, flag setting. +; mvn_imm inverting move instruction, immediate. +; mvn_reg inverting move instruction, register. +; mvn_shift inverting move instruction, shifted operand by a constant. +; mvn_shift_reg inverting move instruction, shifted operand by a register. ; r_2_f transfer from core to float. ; sdiv signed division. ; shift simple shift operation (LSL, LSR, ASR, ROR) with an @@ -453,8 +454,16 @@ load4,\ mla,\ mlas,\ + mov_imm,\ + mov_reg,\ + mov_shift,\ + mov_shift_reg,\ mul,\ muls,\ + mvn_imm,\ + mvn_reg,\ + mvn_shift,\ + mvn_shift_reg,\ r_2_f,\ sdiv,\ shift,\ @@ -4250,8 +4259,7 @@ "TARGET_32BIT" "mov\\t%0, %1, rrx" [(set_attr "conds" "use") - (set_attr "insn" "mov") - (set_attr "type" "arlo_shift")] + (set_attr "type" "mov_shift")] ) (define_expand "ashrsi3" @@ -4486,9 +4494,8 @@ [(set_attr "predicable" "yes") (set_attr "predicable_short_it" "no") (set_attr "shift" "1") - (set_attr "insn" "mvn") (set_attr "arch" "32,a") - (set_attr "type" "arlo_shift,arlo_shift_reg")]) + (set_attr "type" "mvn_shift,mvn_shift_reg")]) (define_insn "*not_shiftsi_compare0" [(set (reg:CC_NOOV CC_REGNUM) @@ -4503,9 +4510,8 @@ "mvn%.\\t%0, %1%S3" [(set_attr "conds" "set") (set_attr "shift" "1") - (set_attr "insn" "mvn") (set_attr "arch" "32,a") - (set_attr "type" "arlo_shift,arlo_shift_reg")]) + (set_attr "type" "mvn_shift,mvn_shift_reg")]) (define_insn "*not_shiftsi_compare0_scratch" [(set (reg:CC_NOOV CC_REGNUM) @@ -4519,9 +4525,8 @@ "mvn%.\\t%0, %1%S3" [(set_attr "conds" "set") (set_attr "shift" "1") - (set_attr "insn" "mvn") (set_attr "arch" "32,a") - (set_attr "type" "arlo_shift,arlo_shift_reg")]) + (set_attr "type" "mvn_shift,mvn_shift_reg")]) ;; We don't really have extzv, but defining this using shifts helps ;; to reduce register pressure later on. @@ -5249,7 +5254,7 @@ (set_attr "predicable_short_it" "yes,no") (set_attr "arch" "t2,*") (set_attr "length" "4") - (set_attr "insn" "mvn")] + (set_attr "type" "mvn_reg")] ) (define_insn "*thumb1_one_cmplsi2" @@ -5258,7 +5263,7 @@ "TARGET_THUMB1" "mvn\\t%0, %1" [(set_attr "length" "2") - (set_attr "insn" "mvn")] + (set_attr "type" "mvn_reg")] ) (define_insn "*notsi_compare0" @@ -5270,7 +5275,7 @@ "TARGET_32BIT" "mvn%.\\t%0, %1" [(set_attr "conds" "set") - (set_attr "insn" "mvn")] + (set_attr "type" "mvn_reg")] ) (define_insn "*notsi_compare0_scratch" @@ -5281,7 +5286,7 @@ "TARGET_32BIT" "mvn%.\\t%0, %1" [(set_attr "conds" "set") - (set_attr "insn" "mvn")] + (set_attr "type" "mvn_reg")] ) ;; Fixed <--> Floating conversion insns @@ -6378,8 +6383,7 @@ } }" [(set_attr "length" "4,4,6,2,2,6,4,4") - (set_attr "type" "*,*,*,load2,store2,load2,store2,*") - (set_attr "insn" "*,mov,*,*,*,*,*,mov") + (set_attr "type" "*,mov_reg,*,load2,store2,load2,store2,mov_reg") (set_attr "pool_range" "*,*,*,*,*,1018,*,*")] ) @@ -6494,8 +6498,7 @@ movw%?\\t%0, %1 ldr%?\\t%0, %1 str%?\\t%1, %0" - [(set_attr "type" "*,arlo_imm,arlo_imm,arlo_imm,load1,store1") - (set_attr "insn" "mov,mov,mvn,mov,*,*") + [(set_attr "type" "mov_reg,mov_imm,mvn_imm,mov_imm,load1,store1") (set_attr "predicable" "yes") (set_attr "pool_range" "*,*,*,*,4096,*") (set_attr "neg_pool_range" "*,*,*,*,4084,*")] @@ -7211,14 +7214,13 @@ str%(h%)\\t%1, %0\\t%@ movhi ldr%(h%)\\t%0, %1\\t%@ movhi" [(set_attr "predicable" "yes") - (set_attr "insn" "mov,mvn,*,*") (set_attr "pool_range" "*,*,*,256") (set_attr "neg_pool_range" "*,*,*,244") (set_attr_alternative "type" [(if_then_else (match_operand 1 "const_int_operand" "") - (const_string "arlo_imm" ) - (const_string "*")) - (const_string "arlo_imm") + (const_string "mov_imm" ) + (const_string "mov_reg")) + (const_string "mvn_imm") (const_string "store1") (const_string "load1")])] ) @@ -7232,8 +7234,7 @@ mov%?\\t%0, %1\\t%@ movhi mvn%?\\t%0, #%B1\\t%@ movhi" [(set_attr "predicable" "yes") - (set_attr "insn" "mov, mov,mvn") - (set_attr "type" "arlo_imm,*,arlo_imm")] + (set_attr "type" "mov_imm,mov_reg,mvn_imm")] ) (define_expand "thumb_movhi_clobber" @@ -7372,8 +7373,7 @@ str%(b%)\\t%1, %0 ldr%(b%)\\t%0, %1 str%(b%)\\t%1, %0" - [(set_attr "type" "*,*,arlo_imm,arlo_imm,arlo_imm,load1, store1, load1, store1") - (set_attr "insn" "mov,mov,mov,mov,mvn,*,*,*,*") + [(set_attr "type" "mov_reg,mov_reg,mov_imm,mov_imm,mvn_imm,load1,store1,load1,store1") (set_attr "predicable" "yes") (set_attr "predicable_short_it" "yes,yes,yes,no,no,no,no,no,no") (set_attr "arch" "t2,any,any,t2,any,t2,t2,any,any") @@ -7394,8 +7394,7 @@ mov\\t%0, %1 mov\\t%0, %1" [(set_attr "length" "2") - (set_attr "type" "arlo_imm,load1,store1,*,*,arlo_imm") - (set_attr "insn" "*,*,*,mov,mov,mov") + (set_attr "type" "arlo_imm,load1,store1,mov_reg,mov_imm,mov_imm") (set_attr "pool_range" "*,32,*,*,*,*") (set_attr "conds" "clob,nocond,nocond,nocond,nocond,clob")]) @@ -7460,8 +7459,7 @@ } " [(set_attr "conds" "unconditional") - (set_attr "type" "load1,store1,*,*") - (set_attr "insn" "*,*,mov,mov") + (set_attr "type" "load1,store1,mov_reg,mov_reg") (set_attr "length" "4,4,4,8") (set_attr "predicable" "yes")] ) @@ -7496,8 +7494,7 @@ } " [(set_attr "length" "2") - (set_attr "type" "*,load1,store1,*,*") - (set_attr "insn" "mov,*,*,mov,mov") + (set_attr "type" "mov_reg,load1,store1,mov_reg,mov_reg") (set_attr "pool_range" "*,1018,*,*,*") (set_attr "conds" "clob,nocond,nocond,nocond,nocond")]) @@ -7551,8 +7548,7 @@ ldr%?\\t%0, %1\\t%@ float str%?\\t%1, %0\\t%@ float" [(set_attr "predicable" "yes") - (set_attr "type" "*,load1,store1") - (set_attr "insn" "mov,*,*") + (set_attr "type" "mov_reg,load1,store1") (set_attr "arm_pool_range" "*,4096,*") (set_attr "thumb2_pool_range" "*,4094,*") (set_attr "arm_neg_pool_range" "*,4084,*") @@ -7575,9 +7571,8 @@ mov\\t%0, %1 mov\\t%0, %1" [(set_attr "length" "2") - (set_attr "type" "*,load1,store1,load1,store1,*,*") + (set_attr "type" "*,load1,store1,load1,store1,mov_reg,mov_reg") (set_attr "pool_range" "*,*,*,1018,*,*,*") - (set_attr "insn" "*,*,*,*,*,mov,mov") (set_attr "conds" "clob,nocond,nocond,nocond,nocond,nocond,nocond")] ) @@ -7708,8 +7703,7 @@ } " [(set_attr "length" "4,2,2,6,4,4") - (set_attr "type" "*,load2,store2,load2,store2,*") - (set_attr "insn" "*,*,*,*,*,mov") + (set_attr "type" "*,load2,store2,load2,store2,mov_reg") (set_attr "pool_range" "*,*,*,1018,*,*")] ) @@ -9175,20 +9169,19 @@ } [(set_attr "length" "4,4,4,4,8,8,8,8") (set_attr "conds" "use") - (set_attr "insn" "mov,mvn,mov,mvn,mov,mov,mvn,mvn") (set_attr_alternative "type" [(if_then_else (match_operand 2 "const_int_operand" "") - (const_string "arlo_imm") - (const_string "*")) - (const_string "arlo_imm") + (const_string "mov_imm") + (const_string "mov_reg")) + (const_string "mvn_imm") (if_then_else (match_operand 1 "const_int_operand" "") - (const_string "arlo_imm") - (const_string "*")) - (const_string "arlo_imm") - (const_string "*") - (const_string "*") - (const_string "*") - (const_string "*")])] + (const_string "mov_imm") + (const_string "mov_reg")) + (const_string "mvn_imm") + (const_string "mov_reg") + (const_string "mov_reg") + (const_string "mov_reg") + (const_string "mov_reg")])] ) (define_insn "*movsfcc_soft_insn" @@ -9202,7 +9195,7 @@ mov%D3\\t%0, %2 mov%d3\\t%0, %1" [(set_attr "conds" "use") - (set_attr "insn" "mov")] + (set_attr "type" "mov_reg")] ) @@ -10195,7 +10188,7 @@ operands[5] = gen_rtx_fmt_ee (rc, VOIDmode, operands[2], const0_rtx); } [(set_attr "conds" "use") - (set_attr "insn" "mov") + (set_attr "type" "mov_reg") (set_attr "length" "8")] ) @@ -10442,7 +10435,7 @@ return \"\"; " [(set_attr "conds" "use") - (set_attr "insn" "mov") + (set_attr "type" "mov_reg") (set_attr "length" "4,4,8")] ) @@ -11405,7 +11398,7 @@ mov%d4\\t%0, %1\;mvn%D4\\t%0, %2 mvn%d4\\t%0, #%B1\;mvn%D4\\t%0, %2" [(set_attr "conds" "use") - (set_attr "insn" "mvn") + (set_attr "type" "mvn_reg") (set_attr "length" "4,8,8")] ) @@ -11438,7 +11431,7 @@ mov%D4\\t%0, %1\;mvn%d4\\t%0, %2 mvn%D4\\t%0, #%B1\;mvn%d4\\t%0, %2" [(set_attr "conds" "use") - (set_attr "insn" "mvn") + (set_attr "type" "mvn_reg") (set_attr "length" "4,8,8")] ) @@ -11476,10 +11469,9 @@ [(set_attr "conds" "use") (set_attr "shift" "2") (set_attr "length" "4,8,8") - (set_attr "insn" "mov") (set (attr "type") (if_then_else (match_operand 3 "const_int_operand" "") - (const_string "arlo_shift") - (const_string "arlo_shift_reg")))] + (const_string "mov_shift") + (const_string "mov_shift_reg")))] ) (define_insn "*ifcompare_move_shift" @@ -11516,10 +11508,9 @@ [(set_attr "conds" "use") (set_attr "shift" "2") (set_attr "length" "4,8,8") - (set_attr "insn" "mov") (set (attr "type") (if_then_else (match_operand 3 "const_int_operand" "") - (const_string "arlo_shift") - (const_string "arlo_shift_reg")))] + (const_string "mov_shift") + (const_string "mov_shift_reg")))] ) (define_insn "*ifcompare_shift_shift" @@ -11557,12 +11548,11 @@ [(set_attr "conds" "use") (set_attr "shift" "1") (set_attr "length" "8") - (set_attr "insn" "mov") (set (attr "type") (if_then_else (and (match_operand 2 "const_int_operand" "") (match_operand 4 "const_int_operand" "")) - (const_string "arlo_shift") - (const_string "arlo_shift_reg")))] + (const_string "mov_shift") + (const_string "mov_shift_reg")))] ) (define_insn "*ifcompare_not_arith" @@ -11594,7 +11584,7 @@ "TARGET_ARM" "mvn%d5\\t%0, %1\;%I6%D5\\t%0, %2, %3" [(set_attr "conds" "use") - (set_attr "insn" "mvn") + (set_attr "type" "mvn_reg") (set_attr "length" "8")] ) @@ -11627,7 +11617,7 @@ "TARGET_ARM" "mvn%D5\\t%0, %1\;%I6%d5\\t%0, %2, %3" [(set_attr "conds" "use") - (set_attr "insn" "mvn") + (set_attr "type" "mvn_reg") (set_attr "length" "8")] ) @@ -12075,7 +12065,7 @@ mvn%D4\\t%0, %2 mov%d4\\t%0, %1\;mvn%D4\\t%0, %2" [(set_attr "conds" "use") - (set_attr "insn" "mvn") + (set_attr "type" "mvn_reg") (set_attr "length" "4,8")] ) diff --git a/gcc/config/arm/arm1020e.md b/gcc/config/arm/arm1020e.md index 7c8c72bcfc7..317e4cd4ad6 100644 --- a/gcc/config/arm/arm1020e.md +++ b/gcc/config/arm/arm1020e.md @@ -66,13 +66,14 @@ ;; ALU operations with no shifted operand (define_insn_reservation "1020alu_op" 1 (and (eq_attr "tune" "arm1020e,arm1022e") - (eq_attr "type" "arlo_imm,arlo_reg,shift,shift_reg")) + (eq_attr "type" "arlo_imm,arlo_reg,shift,shift_reg,\ + mov_imm,mov_reg,mvn_imm,mvn_reg")) "1020a_e,1020a_m,1020a_w") ;; ALU operations with a shift-by-constant operand (define_insn_reservation "1020alu_shift_op" 1 (and (eq_attr "tune" "arm1020e,arm1022e") - (eq_attr "type" "extend,arlo_shift")) + (eq_attr "type" "extend,arlo_shift,mov_shift,mvn_shift")) "1020a_e,1020a_m,1020a_w") ;; ALU operations with a shift-by-register operand @@ -81,7 +82,7 @@ ;; the execute stage. (define_insn_reservation "1020alu_shift_reg_op" 2 (and (eq_attr "tune" "arm1020e,arm1022e") - (eq_attr "type" "arlo_shift_reg")) + (eq_attr "type" "arlo_shift_reg,mov_shift_reg,mvn_shift_reg")) "1020a_e*2,1020a_m,1020a_w") ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; diff --git a/gcc/config/arm/arm1026ejs.md b/gcc/config/arm/arm1026ejs.md index 4b7e12b780b..9112122d67b 100644 --- a/gcc/config/arm/arm1026ejs.md +++ b/gcc/config/arm/arm1026ejs.md @@ -66,13 +66,14 @@ ;; ALU operations with no shifted operand (define_insn_reservation "alu_op" 1 (and (eq_attr "tune" "arm1026ejs") - (eq_attr "type" "arlo_imm,arlo_reg,shift,shift_reg")) + (eq_attr "type" "arlo_imm,arlo_reg,shift,shift_reg,\ + mov_imm,mov_reg,mvn_imm,mvn_reg")) "a_e,a_m,a_w") ;; ALU operations with a shift-by-constant operand (define_insn_reservation "alu_shift_op" 1 (and (eq_attr "tune" "arm1026ejs") - (eq_attr "type" "extend,arlo_shift")) + (eq_attr "type" "extend,arlo_shift,mov_shift,mvn_shift")) "a_e,a_m,a_w") ;; ALU operations with a shift-by-register operand @@ -81,7 +82,7 @@ ;; the execute stage. (define_insn_reservation "alu_shift_reg_op" 2 (and (eq_attr "tune" "arm1026ejs") - (eq_attr "type" "arlo_shift_reg")) + (eq_attr "type" "arlo_shift_reg,mov_shift_reg,mvn_shift_reg")) "a_e*2,a_m,a_w") ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; diff --git a/gcc/config/arm/arm1136jfs.md b/gcc/config/arm/arm1136jfs.md index 106100a8e6d..f83b9d14f2b 100644 --- a/gcc/config/arm/arm1136jfs.md +++ b/gcc/config/arm/arm1136jfs.md @@ -75,13 +75,14 @@ ;; ALU operations with no shifted operand (define_insn_reservation "11_alu_op" 2 (and (eq_attr "tune" "arm1136js,arm1136jfs") - (eq_attr "type" "arlo_imm,arlo_reg,shift,shift_reg")) + (eq_attr "type" "arlo_imm,arlo_reg,shift,shift_reg,\ + mov_imm,mov_reg,mvn_imm,mvn_reg")) "e_1,e_2,e_3,e_wb") ;; ALU operations with a shift-by-constant operand (define_insn_reservation "11_alu_shift_op" 2 (and (eq_attr "tune" "arm1136js,arm1136jfs") - (eq_attr "type" "extend,arlo_shift")) + (eq_attr "type" "extend,arlo_shift,mov_shift,mvn_shift")) "e_1,e_2,e_3,e_wb") ;; ALU operations with a shift-by-register operand @@ -90,7 +91,7 @@ ;; the shift stage. (define_insn_reservation "11_alu_shift_reg_op" 3 (and (eq_attr "tune" "arm1136js,arm1136jfs") - (eq_attr "type" "arlo_shift_reg")) + (eq_attr "type" "arlo_shift_reg,mov_shift_reg,mvn_shift_reg")) "e_1*2,e_2,e_3,e_wb") ;; alu_ops can start sooner, if there is no shifter dependency diff --git a/gcc/config/arm/arm926ejs.md b/gcc/config/arm/arm926ejs.md index b9ebee32984..8c38e86ce66 100644 --- a/gcc/config/arm/arm926ejs.md +++ b/gcc/config/arm/arm926ejs.md @@ -58,7 +58,9 @@ ;; ALU operations with no shifted operand (define_insn_reservation "9_alu_op" 1 (and (eq_attr "tune" "arm926ejs") - (eq_attr "type" "arlo_imm,arlo_reg,shift,shift_reg,extend,arlo_shift")) + (eq_attr "type" "arlo_imm,arlo_reg,shift,shift_reg,extend,arlo_shift,\ + mov_imm,mov_reg,mov_shift,\ + mvn_imm,mvn_reg,mvn_shift")) "e,m,w") ;; ALU operations with a shift-by-register operand @@ -67,7 +69,7 @@ ;; the execute stage. (define_insn_reservation "9_alu_shift_reg_op" 2 (and (eq_attr "tune" "arm926ejs") - (eq_attr "type" "arlo_shift_reg")) + (eq_attr "type" "arlo_shift_reg,mov_shift_reg,mvn_shift_reg")) "e*2,m,w") ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; diff --git a/gcc/config/arm/cortex-a15.md b/gcc/config/arm/cortex-a15.md index 52dd1f19b82..4ad87121d6d 100644 --- a/gcc/config/arm/cortex-a15.md +++ b/gcc/config/arm/cortex-a15.md @@ -61,14 +61,16 @@ ;; Simple ALU without shift (define_insn_reservation "cortex_a15_alu" 2 (and (eq_attr "tune" "cortexa15") - (and (eq_attr "type" "arlo_imm,arlo_reg,shift,shift_reg") + (and (eq_attr "type" "arlo_imm,arlo_reg,shift,shift_reg,\ + mov_imm,mov_reg,\ + mvn_imm,mvn_reg") (eq_attr "neon_type" "none"))) "ca15_issue1,(ca15_sx1,ca15_sx1_alu)|(ca15_sx2,ca15_sx2_alu)") ;; ALU ops with immediate shift (define_insn_reservation "cortex_a15_alu_shift" 3 (and (eq_attr "tune" "cortexa15") - (and (eq_attr "type" "extend,arlo_shift") + (and (eq_attr "type" "extend,arlo_shift,,mov_shift,mvn_shift") (eq_attr "neon_type" "none"))) "ca15_issue1,(ca15_sx1,ca15_sx1+ca15_sx1_shf,ca15_sx1_alu)\ |(ca15_sx2,ca15_sx2+ca15_sx2_shf,ca15_sx2_alu)") @@ -76,7 +78,7 @@ ;; ALU ops with register controlled shift (define_insn_reservation "cortex_a15_alu_shift_reg" 3 (and (eq_attr "tune" "cortexa15") - (and (eq_attr "type" "arlo_shift_reg") + (and (eq_attr "type" "arlo_shift_reg,mov_shift_reg,mvn_shift_reg") (eq_attr "neon_type" "none"))) "(ca15_issue2,ca15_sx1+ca15_sx2,ca15_sx1_shf,ca15_sx2_alu)\ |(ca15_issue1,(ca15_issue1+ca15_sx2,ca15_sx1+ca15_sx2_shf)\ diff --git a/gcc/config/arm/cortex-a5.md b/gcc/config/arm/cortex-a5.md index e59e673d62c..1400c47d95a 100644 --- a/gcc/config/arm/cortex-a5.md +++ b/gcc/config/arm/cortex-a5.md @@ -58,12 +58,15 @@ (define_insn_reservation "cortex_a5_alu" 2 (and (eq_attr "tune" "cortexa5") - (eq_attr "type" "arlo_imm,arlo_reg,shift,shift_reg")) + (eq_attr "type" "arlo_imm,arlo_reg,shift,shift_reg,\ + mov_imm,mov_reg,mvn_imm,mvn_reg")) "cortex_a5_ex1") (define_insn_reservation "cortex_a5_alu_shift" 2 (and (eq_attr "tune" "cortexa5") - (eq_attr "type" "extend,arlo_shift,arlo_shift_reg")) + (eq_attr "type" "extend,arlo_shift,arlo_shift_reg,\ + mov_shift,mov_shift_reg,\ + mvn_shift,mvn_shift_reg")) "cortex_a5_ex1") ;; Forwarding path for unshifted operands. diff --git a/gcc/config/arm/cortex-a53.md b/gcc/config/arm/cortex-a53.md index 7cee6c4788b..2f9107994c9 100644 --- a/gcc/config/arm/cortex-a53.md +++ b/gcc/config/arm/cortex-a53.md @@ -67,12 +67,15 @@ (define_insn_reservation "cortex_a53_alu" 2 (and (eq_attr "tune" "cortexa53") - (eq_attr "type" "arlo_imm,arlo_reg,shift,shift_reg")) + (eq_attr "type" "arlo_imm,arlo_reg,shift,shift_reg,\ + mov_imm,mov_reg,mvn_imm,mvn_reg")) "cortex_a53_slot_any") (define_insn_reservation "cortex_a53_alu_shift" 2 (and (eq_attr "tune" "cortexa53") - (eq_attr "type" "arlo_shift,arlo_shift_reg")) + (eq_attr "type" "arlo_shift,arlo_shift_reg,\ + mov_shift,mov_shift_reg,\ + mvn_shift,mvn_shift_reg")) "cortex_a53_slot_any") ;; Forwarding path for unshifted operands. diff --git a/gcc/config/arm/cortex-a7.md b/gcc/config/arm/cortex-a7.md index 3d41543f968..e14413d5083 100644 --- a/gcc/config/arm/cortex-a7.md +++ b/gcc/config/arm/cortex-a7.md @@ -88,9 +88,9 @@ ;; ALU instruction with an immediate operand can dual-issue. (define_insn_reservation "cortex_a7_alu_imm" 2 (and (eq_attr "tune" "cortexa7") - (and (ior (eq_attr "type" "arlo_imm") + (and (ior (eq_attr "type" "arlo_imm,mov_imm,mvn_imm") (ior (eq_attr "type" "extend") - (and (eq_attr "insn" "mov") + (and (eq_attr "type" "mov_reg,mov_shift,mov_shift_reg") (not (eq_attr "length" "8"))))) (eq_attr "neon_type" "none"))) "cortex_a7_ex2|cortex_a7_ex1") @@ -99,13 +99,15 @@ ;; with a younger immediate-based instruction. (define_insn_reservation "cortex_a7_alu_reg" 2 (and (eq_attr "tune" "cortexa7") - (and (eq_attr "type" "arlo_reg,shift,shift_reg") + (and (eq_attr "type" "arlo_reg,shift,shift_reg,mov_reg,mvn_reg") (eq_attr "neon_type" "none"))) "cortex_a7_ex1") (define_insn_reservation "cortex_a7_alu_shift" 2 (and (eq_attr "tune" "cortexa7") - (and (eq_attr "type" "arlo_shift,arlo_shift_reg") + (and (eq_attr "type" "arlo_shift,arlo_shift_reg,\ + mov_shift,mov_shift_reg,\ + mvn_shift,mvn_shift_reg") (eq_attr "neon_type" "none"))) "cortex_a7_ex1") diff --git a/gcc/config/arm/cortex-a8.md b/gcc/config/arm/cortex-a8.md index 65a97500826..1113a45ff0e 100644 --- a/gcc/config/arm/cortex-a8.md +++ b/gcc/config/arm/cortex-a8.md @@ -85,30 +85,27 @@ ;; (source read in E2 and destination available at the end of that cycle). (define_insn_reservation "cortex_a8_alu" 2 (and (eq_attr "tune" "cortexa8") - (ior (and (and (eq_attr "type" "arlo_imm,arlo_reg,shift,shift_reg") - (eq_attr "neon_type" "none")) - (not (eq_attr "insn" "mov,mvn"))) + (ior (and (eq_attr "type" "arlo_imm,arlo_reg,shift,shift_reg") + (eq_attr "neon_type" "none")) (eq_attr "type" "clz"))) "cortex_a8_default") (define_insn_reservation "cortex_a8_alu_shift" 2 (and (eq_attr "tune" "cortexa8") - (and (eq_attr "type" "extend,arlo_shift") - (not (eq_attr "insn" "mov,mvn")))) + (eq_attr "type" "extend,arlo_shift")) "cortex_a8_default") (define_insn_reservation "cortex_a8_alu_shift_reg" 2 (and (eq_attr "tune" "cortexa8") - (and (eq_attr "type" "arlo_shift_reg") - (not (eq_attr "insn" "mov,mvn")))) + (eq_attr "type" "arlo_shift_reg")) "cortex_a8_default") ;; Move instructions. (define_insn_reservation "cortex_a8_mov" 1 (and (eq_attr "tune" "cortexa8") - (and (eq_attr "type" "arlo_imm,arlo_reg,shift,shift_reg,extend,arlo_shift,arlo_shift_reg") - (eq_attr "insn" "mov,mvn"))) + (eq_attr "type" "mov_imm,mov_reg,mov_shift,mov_shift_reg,\ + mvn_imm,mvn_reg,mvn_shift,mvn_shift_reg")) "cortex_a8_default") ;; Exceptions to the default latencies for data processing instructions. diff --git a/gcc/config/arm/cortex-a9.md b/gcc/config/arm/cortex-a9.md index 7670f80fc32..11dc0b32c38 100644 --- a/gcc/config/arm/cortex-a9.md +++ b/gcc/config/arm/cortex-a9.md @@ -80,18 +80,17 @@ cortex_a9_p1_e2 + cortex_a9_p0_e1 + cortex_a9_p1_e1") ;; which can go down E2 without any problem. (define_insn_reservation "cortex_a9_dp" 2 (and (eq_attr "tune" "cortexa9") - (ior (and (eq_attr "type" "arlo_imm,arlo_reg,shift,shift_reg") - (eq_attr "neon_type" "none")) - (and (and (eq_attr "type" "arlo_shift_reg,extend,arlo_shift") - (eq_attr "insn" "mov")) - (eq_attr "neon_type" "none")))) + (and (eq_attr "type" "arlo_imm,arlo_reg,shift,shift_reg,\ + mov_imm,mov_reg,mvn_imm,mvn_reg,\ + mov_shift_reg,mov_shift") + (eq_attr "neon_type" "none"))) "cortex_a9_p0_default|cortex_a9_p1_default") ;; An instruction using the shifter will go down E1. (define_insn_reservation "cortex_a9_dp_shift" 3 (and (eq_attr "tune" "cortexa9") - (and (eq_attr "type" "arlo_shift_reg,extend,arlo_shift") - (not (eq_attr "insn" "mov")))) + (eq_attr "type" "arlo_shift_reg,extend,arlo_shift,\ + mvn_shift,mvn_shift_reg")) "cortex_a9_p0_shift | cortex_a9_p1_shift") ;; Loads have a latency of 4 cycles. diff --git a/gcc/config/arm/cortex-m4.md b/gcc/config/arm/cortex-m4.md index 775b59283af..53bd60cd98f 100644 --- a/gcc/config/arm/cortex-m4.md +++ b/gcc/config/arm/cortex-m4.md @@ -32,7 +32,9 @@ (define_insn_reservation "cortex_m4_alu" 1 (and (eq_attr "tune" "cortexm4") (ior (eq_attr "type" "arlo_imm,arlo_reg,shift,shift_reg,extend,\ - arlo_shift,arlo_shift_reg") + arlo_shift,arlo_shift_reg,\ + mov_imm,mov_reg,mov_shift,mov_shift_reg,\ + mvn_imm,mvn_reg,mvn_shift,mvn_shift_reg") (ior (eq_attr "mul32" "yes") (eq_attr "mul64" "yes")))) "cortex_m4_ex") diff --git a/gcc/config/arm/cortex-r4.md b/gcc/config/arm/cortex-r4.md index bc3602c4dda..597774dbd89 100644 --- a/gcc/config/arm/cortex-r4.md +++ b/gcc/config/arm/cortex-r4.md @@ -78,24 +78,22 @@ ;; for the purposes of the dual-issue constraints above. (define_insn_reservation "cortex_r4_alu" 2 (and (eq_attr "tune_cortexr4" "yes") - (and (eq_attr "type" "arlo_imm,arlo_reg,shift,shift_reg") - (not (eq_attr "insn" "mov")))) + (eq_attr "type" "arlo_imm,arlo_reg,shift,shift_reg,mvn_imm,mvn_reg")) "cortex_r4_alu") (define_insn_reservation "cortex_r4_mov" 2 (and (eq_attr "tune_cortexr4" "yes") - (and (eq_attr "type" "arlo_imm,arlo_reg,shift,shift_reg") - (eq_attr "insn" "mov"))) + (eq_attr "type" "mov_imm,mov_reg")) "cortex_r4_mov") (define_insn_reservation "cortex_r4_alu_shift" 2 (and (eq_attr "tune_cortexr4" "yes") - (eq_attr "type" "extend,arlo_shift")) + (eq_attr "type" "extend,arlo_shift,mov_shift,mvn_shift")) "cortex_r4_alu") (define_insn_reservation "cortex_r4_alu_shift_reg" 2 (and (eq_attr "tune_cortexr4" "yes") - (eq_attr "type" "arlo_shift_reg")) + (eq_attr "type" "arlo_shift_reg,mov_shift_reg,mvn_shift_reg")) "cortex_r4_alu_shift_reg") ;; An ALU instruction followed by an ALU instruction with no early dep. diff --git a/gcc/config/arm/fa526.md b/gcc/config/arm/fa526.md index 869b25129be..9ec92d60dc5 100644 --- a/gcc/config/arm/fa526.md +++ b/gcc/config/arm/fa526.md @@ -62,12 +62,15 @@ ;; ALU operations (define_insn_reservation "526_alu_op" 1 (and (eq_attr "tune" "fa526") - (eq_attr "type" "arlo_imm,arlo_reg,shift,shift_reg")) + (eq_attr "type" "arlo_imm,arlo_reg,shift,shift_reg,\ + mov_imm,mov_reg,mvn_imm,mvn_reg")) "fa526_core") (define_insn_reservation "526_alu_shift_op" 2 (and (eq_attr "tune" "fa526") - (eq_attr "type" "extend,arlo_shift,arlo_shift_reg")) + (eq_attr "type" "extend,arlo_shift,arlo_shift_reg,\ + mov_shift,mov_shift_reg,\ + mvn_shift,mvn_shift_reg")) "fa526_core") ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; diff --git a/gcc/config/arm/fa606te.md b/gcc/config/arm/fa606te.md index c22b286dceb..e61242886d7 100644 --- a/gcc/config/arm/fa606te.md +++ b/gcc/config/arm/fa606te.md @@ -62,7 +62,10 @@ ;; ALU operations (define_insn_reservation "606te_alu_op" 1 (and (eq_attr "tune" "fa606te") - (eq_attr "type" "arlo_imm,arlo_reg,shift,shift_reg,extend,arlo_shift,arlo_shift_reg")) + (eq_attr "type" "arlo_imm,arlo_reg,shift,shift_reg, + extend,arlo_shift,arlo_shift_reg,\ + mov_imm,mov_reg,mov_shift,mov_shift_reg,\ + mvn_imm,mvn_reg,mvn_shift,mvn_shift_reg")) "fa606te_core") ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; diff --git a/gcc/config/arm/fa626te.md b/gcc/config/arm/fa626te.md index 7d58e67d509..04d2a5cf33f 100644 --- a/gcc/config/arm/fa626te.md +++ b/gcc/config/arm/fa626te.md @@ -68,12 +68,15 @@ ;; ALU operations (define_insn_reservation "626te_alu_op" 1 (and (eq_attr "tune" "fa626,fa626te") - (eq_attr "type" "arlo_imm,arlo_reg,shift,shift_reg")) + (eq_attr "type" "arlo_imm,arlo_reg,shift,shift_reg,\ + mov_imm,mov_reg,mvn_imm,mvn_reg")) "fa626te_core") (define_insn_reservation "626te_alu_shift_op" 2 (and (eq_attr "tune" "fa626,fa626te") - (eq_attr "type" "extend,arlo_shift,arlo_shift_reg")) + (eq_attr "type" "extend,arlo_shift,arlo_shift_reg,\ + mov_shift,mov_shift_reg,\ + mvn_shift,mvn_shift_reg")) "fa626te_core") ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; diff --git a/gcc/config/arm/fa726te.md b/gcc/config/arm/fa726te.md index 880b2b8b277..342b9bf5d33 100644 --- a/gcc/config/arm/fa726te.md +++ b/gcc/config/arm/fa726te.md @@ -78,15 +78,15 @@ ;; Move instructions. (define_insn_reservation "726te_shift_op" 1 (and (eq_attr "tune" "fa726te") - (eq_attr "insn" "mov,mvn")) + (eq_attr "type" "mov_imm,mov_reg,mov_shift,mov_shift_reg,\ + mvn_imm,mvn_reg,mvn_shift,mvn_shift_reg")) "fa726te_issue+(fa726te_alu0_pipe|fa726te_alu1_pipe)") ;; ALU operations with no shifted operand will finished in 1 cycle ;; Other ALU instructions 2 cycles. (define_insn_reservation "726te_alu_op" 1 (and (eq_attr "tune" "fa726te") - (and (eq_attr "type" "arlo_imm,arlo_reg,shift,shift_reg") - (not (eq_attr "insn" "mov,mvn")))) + (eq_attr "type" "arlo_imm,arlo_reg,shift,shift_reg")) "fa726te_issue+(fa726te_alu0_pipe|fa726te_alu1_pipe)") ;; ALU operations with a shift-by-register operand. @@ -95,14 +95,12 @@ ;; it takes 3 cycles. (define_insn_reservation "726te_alu_shift_op" 3 (and (eq_attr "tune" "fa726te") - (and (eq_attr "type" "extend,arlo_shift") - (not (eq_attr "insn" "mov,mvn")))) + (eq_attr "type" "extend,arlo_shift")) "fa726te_issue+(fa726te_alu0_pipe|fa726te_alu1_pipe)") (define_insn_reservation "726te_alu_shift_reg_op" 3 (and (eq_attr "tune" "fa726te") - (and (eq_attr "type" "arlo_shift_reg") - (not (eq_attr "insn" "mov,mvn")))) + (eq_attr "type" "arlo_shift_reg")) "fa726te_issue+(fa726te_alu0_pipe|fa726te_alu1_pipe)") ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Multiplication Instructions diff --git a/gcc/config/arm/fmp626.md b/gcc/config/arm/fmp626.md index 279f7fb0bb0..944645b9ead 100644 --- a/gcc/config/arm/fmp626.md +++ b/gcc/config/arm/fmp626.md @@ -63,12 +63,15 @@ ;; ALU operations (define_insn_reservation "mp626_alu_op" 1 (and (eq_attr "tune" "fmp626") - (eq_attr "type" "arlo_imm,arlo_reg,shift,shift_reg")) + (eq_attr "type" "arlo_imm,arlo_reg,shift,shift_reg,\ + mov_imm,mov_reg,mvn_imm,mvn_reg")) "fmp626_core") (define_insn_reservation "mp626_alu_shift_op" 2 (and (eq_attr "tune" "fmp626") - (eq_attr "type" "extend,arlo_shift,arlo_shift_reg")) + (eq_attr "type" "extend,arlo_shift,arlo_shift_reg,\ + mov_shift,mov_shift_reg,\ + mvn_shift,mvn_shift_reg")) "fmp626_core") ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; diff --git a/gcc/config/arm/marvell-pj4.md b/gcc/config/arm/marvell-pj4.md index 3386ec3209b..0e2c443721e 100644 --- a/gcc/config/arm/marvell-pj4.md +++ b/gcc/config/arm/marvell-pj4.md @@ -41,54 +41,54 @@ (define_insn_reservation "pj4_alu_e1" 1 (and (eq_attr "tune" "marvell_pj4") - (eq_attr "type" "arlo_imm,arlo_reg,shift,shift_reg") - (not (eq_attr "conds" "set")) - (eq_attr "insn" "mov,mvn")) + (eq_attr "type" "mov_imm,mov_reg,mvn_imm,mvn_reg") + (not (eq_attr "conds" "set"))) "pj4_is,(pj4_alu1,pj4_w1+pj4_cp)|(pj4_alu2,pj4_w2+pj4_cp)") (define_insn_reservation "pj4_alu_e1_conds" 4 (and (eq_attr "tune" "marvell_pj4") - (eq_attr "type" "arlo_imm,arlo_reg,shift,shift_reg") - (eq_attr "conds" "set") - (eq_attr "insn" "mov,mvn")) + (eq_attr "type" "mov_imm,mov_reg,mvn_imm,mvn_reg") + (eq_attr "conds" "set")) "pj4_is,(pj4_alu1,pj4_w1+pj4_cp)|(pj4_alu2,pj4_w2+pj4_cp)") (define_insn_reservation "pj4_alu" 1 (and (eq_attr "tune" "marvell_pj4") (eq_attr "type" "arlo_imm,arlo_reg,shift,shift_reg") - (not (eq_attr "conds" "set")) - (not (eq_attr "insn" "mov,mvn"))) + (not (eq_attr "conds" "set"))) "pj4_is,(pj4_alu1,pj4_w1+pj4_cp)|(pj4_alu2,pj4_w2+pj4_cp)") (define_insn_reservation "pj4_alu_conds" 4 (and (eq_attr "tune" "marvell_pj4") (eq_attr "type" "arlo_imm,arlo_reg,shift,shift_reg") - (eq_attr "conds" "set") - (not (eq_attr "insn" "mov,mvn"))) + (eq_attr "conds" "set")) "pj4_is,(pj4_alu1,pj4_w1+pj4_cp)|(pj4_alu2,pj4_w2+pj4_cp)") (define_insn_reservation "pj4_shift" 1 (and (eq_attr "tune" "marvell_pj4") - (eq_attr "type" "arlo_shift,arlo_shift_reg,extend") + (eq_attr "type" "arlo_shift,arlo_shift_reg,extend,\ + mov_shift,mvn_shift,mov_shift_reg,mvn_shift_reg") (not (eq_attr "conds" "set")) (eq_attr "shift" "1")) "pj4_is,(pj4_alu1,pj4_w1+pj4_cp)|(pj4_alu2,pj4_w2+pj4_cp)") (define_insn_reservation "pj4_shift_conds" 4 (and (eq_attr "tune" "marvell_pj4") - (eq_attr "type" "arlo_shift,arlo_shift_reg,extend") + (eq_attr "type" "arlo_shift,arlo_shift_reg,extend,\ + mov_shift,mvn_shift,mov_shift_reg,mvn_shift_reg") (eq_attr "conds" "set") (eq_attr "shift" "1")) "pj4_is,(pj4_alu1,pj4_w1+pj4_cp)|(pj4_alu2,pj4_w2+pj4_cp)") (define_insn_reservation "pj4_alu_shift" 1 (and (eq_attr "tune" "marvell_pj4") (not (eq_attr "conds" "set")) - (eq_attr "type" "arlo_shift,arlo_shift_reg,extend")) + (eq_attr "type" "arlo_shift,arlo_shift_reg,extend,\ + mov_shift,mvn_shift,mov_shift_reg,mvn_shift_reg")) "pj4_is,(pj4_alu1,nothing,pj4_w1+pj4_cp)|(pj4_alu2,nothing,pj4_w2+pj4_cp)") (define_insn_reservation "pj4_alu_shift_conds" 4 (and (eq_attr "tune" "marvell_pj4") (eq_attr "conds" "set") - (eq_attr "type" "arlo_shift,arlo_shift_reg,extend")) + (eq_attr "type" "arlo_shift,arlo_shift_reg,extend,\ + mov_shift,mvn_shift,mov_shift_reg,mvn_shift_reg")) "pj4_is,(pj4_alu1,nothing,pj4_w1+pj4_cp)|(pj4_alu2,nothing,pj4_w2+pj4_cp)") (define_bypass 2 "pj4_alu_shift,pj4_shift" diff --git a/gcc/config/arm/neon.md b/gcc/config/arm/neon.md index bcc93de0da4..e8d2285fa81 100644 --- a/gcc/config/arm/neon.md +++ b/gcc/config/arm/neon.md @@ -61,8 +61,7 @@ } } [(set_attr "neon_type" "neon_int_1,*,neon_vmov,*,neon_mrrc,neon_mcr_2_mcrr,*,*,*") - (set_attr "type" "*,f_stored,*,f_loadd,*,*,arlo_reg,load2,store2") - (set_attr "insn" "*,*,*,*,*,*,mov,*,*") + (set_attr "type" "*,f_stored,*,f_loadd,*,*,mov_reg,load2,store2") (set_attr "length" "4,4,4,4,4,4,8,8,8") (set_attr "arm_pool_range" "*,*,*,1020,*,*,*,1020,*") (set_attr "thumb2_pool_range" "*,*,*,1018,*,*,*,1018,*") @@ -107,8 +106,7 @@ } [(set_attr "neon_type" "neon_int_1,neon_stm_2,neon_vmov,neon_ldm_2,\ neon_mrrc,neon_mcr_2_mcrr,*,*,*") - (set_attr "type" "*,*,*,*,*,*,arlo_reg,load4,store4") - (set_attr "insn" "*,*,*,*,*,*,mov,*,*") + (set_attr "type" "*,*,*,*,*,*,mov_reg,load4,store4") (set_attr "length" "4,8,4,8,8,8,16,8,16") (set_attr "arm_pool_range" "*,*,*,1020,*,*,*,1020,*") (set_attr "thumb2_pool_range" "*,*,*,1018,*,*,*,1018,*") diff --git a/gcc/config/arm/vfp.md b/gcc/config/arm/vfp.md index abebb0fc144..ef8777a900b 100644 --- a/gcc/config/arm/vfp.md +++ b/gcc/config/arm/vfp.md @@ -53,9 +53,8 @@ } " [(set_attr "predicable" "yes") - (set_attr "type" "*,*,arlo_imm,arlo_imm,load1,store1,r_2_f,f_2_r,fcpys,f_loads,f_stores") + (set_attr "type" "mov_reg,mov_reg,mvn_imm,mov_imm,load1,store1,r_2_f,f_2_r,fcpys,f_loads,f_stores") (set_attr "neon_type" "*,*,*,*,*,*,neon_mcr,neon_mrc,neon_vmov,*,*") - (set_attr "insn" "mov,mov,mvn,mov,*,*,*,*,*,*,*") (set_attr "pool_range" "*,*,*,*,4096,*,*,*,*,1020,*") (set_attr "neg_pool_range" "*,*,*,*,4084,*,*,*,*,1008,*")] ) @@ -102,10 +101,9 @@ " [(set_attr "predicable" "yes") (set_attr "predicable_short_it" "yes,no,yes,no,no,no,no,no,no,no,no,no,no,no") - (set_attr "type" "*,*,*,*,*,load1,load1,store1,store1,r_2_f,f_2_r,fcpys,f_loads,f_stores") + (set_attr "type" "mov_reg,mov_reg,mov_reg,mvn_reg,mov_reg,load1,load1,store1,store1,r_2_f,f_2_r,fcpys,f_loads,f_stores") (set_attr "length" "2,4,2,4,4,4,4,4,4,4,4,4,4,4") (set_attr "neon_type" "*,*,*,*,*,*,*,*,*,neon_mcr,neon_mrc,neon_vmov,*,*") - (set_attr "insn" "mov,mov,mov,mvn,mov,*,*,*,*,*,*,*,*,*") (set_attr "pool_range" "*,*,*,*,*,1018,4094,*,*,*,*,*,1018,*") (set_attr "neg_pool_range" "*,*,*,*,*, 0, 0,*,*,*,*,*,1008,*")] ) @@ -357,9 +355,8 @@ " [(set_attr "predicable" "yes") (set_attr "type" - "r_2_f,f_2_r,fconsts,f_loads,f_stores,load1,store1,fcpys,*") + "r_2_f,f_2_r,fconsts,f_loads,f_stores,load1,store1,fcpys,mov_reg") (set_attr "neon_type" "neon_mcr,neon_mrc,*,*,*,*,*,neon_vmov,*") - (set_attr "insn" "*,*,*,*,*,*,*,*,mov") (set_attr "pool_range" "*,*,*,1020,*,4096,*,*,*") (set_attr "neg_pool_range" "*,*,*,1008,*,4080,*,*,*")] ) @@ -396,9 +393,8 @@ [(set_attr "predicable" "yes") (set_attr "predicable_short_it" "no") (set_attr "type" - "r_2_f,f_2_r,fconsts,f_loads,f_stores,load1,store1,fcpys,*") + "r_2_f,f_2_r,fconsts,f_loads,f_stores,load1,store1,fcpys,mov_reg") (set_attr "neon_type" "neon_mcr,neon_mrc,*,*,*,*,*,neon_vmov,*") - (set_attr "insn" "*,*,*,*,*,*,*,*,mov") (set_attr "pool_range" "*,*,*,1018,*,4090,*,*,*") (set_attr "neg_pool_range" "*,*,*,1008,*,0,*,*,*")] ) |