Commit 09485a08 by Sofiane Naci Committed by Sofiane Naci

arm.md (attribute "insn"): Move multiplication and division attributes to...

	* config/arm/arm.md (attribute "insn"): Move multiplication and division
	attributes to...
	(attribute "type"): ... here.  Remove mult.
	(attribute "mul32"): New attribute.
	(attribute "mul64"): Add umaal.
	(*arm_mulsi3): Update attributes.
	(*arm_mulsi3_v6): Likewise.
	(*thumb_mulsi3): Likewise.
	(*thumb_mulsi3_v6): Likewise.
	(*mulsi3_compare0): Likewise.
	(*mulsi3_compare0_v6): Likewise.
	(*mulsi_compare0_scratch): Likewise.
	(*mulsi_compare0_scratch_v6): Likewise.
	(*mulsi3addsi): Likewise.
	(*mulsi3addsi_v6): Likewise.
	(*mulsi3addsi_compare0): Likewise.
	(*mulsi3addsi_compare0_v6): Likewise.
	(*mulsi3addsi_compare0_scratch): Likewise.
	(*mulsi3addsi_compare0_scratch_v6): Likewise.
	(*mulsi3subsi): Likewise.
	(*mulsidi3adddi): Likewise.
	(*mulsi3addsi_v6): Likewise.
	(*mulsidi3adddi_v6): Likewise.
	(*mulsidi3_nov6): Likewise.
	(*mulsidi3_v6): Likewise.
	(*umulsidi3_nov6): Likewise.
	(*umulsidi3_v6): Likewise.
	(*umulsidi3adddi): Likewise.
	(*umulsidi3adddi_v6): Likewise.
	(*smulsi3_highpart_nov6): Likewise.
	(*smulsi3_highpart_v6): Likewise.
	(*umulsi3_highpart_nov6): Likewise.
	(*umulsi3_highpart_v6): Likewise.
	(mulhisi3): Likewise.
	(*mulhisi3tb): Likewise.
	(*mulhisi3bt): Likewise.
	(*mulhisi3tt): Likewise.
	(maddhisi4): Likewise.
	(*maddhisi4tb): Likewise.
	(*maddhisi4tt): Likewise.
	(maddhidi4): Likewise.
	(*maddhidi4tb): Likewise.
	(*maddhidi4tt): Likewise.
	(divsi3): Likewise.
	(udivsi3): Likewise.
	* config/arm/thumb2.md (thumb2_mulsi_short): Update attributes.
	(thumb2_mulsi_short_compare0): Likewise.
	(thumb2_mulsi_short_compare0_scratch): Likewise.
	* config/arm/arm1020e.md (1020mult1): Update attribute change.
	(1020mult2): Likewise.
	(1020mult3): Likewise.
	(1020mult4): Likewise.
	(1020mult5): Likewise.
	(1020mult6): Likewise.
	* config/arm/cortex-a15.md (cortex_a15_mult32): Update attribute change.
	(cortex_a15_mult64): Likewise.
	(cortex_a15_sdiv): Likewise.
	(cortex_a15_udiv): Likewise.
	* config/arm/arm1026ejs.md (mult1): Update attribute change.
	(mult2): Likewise.
	(mult3): Likewise.
	(mult4): Likewise.
	(mult5): Likewise.
	(mult6): Likewise.
	* config/arm/marvell-pj4.md (pj4_ir_mul): Update attribute change.
	(pj4_ir_div): Likewise.
	* config/arm/arm1136jfs.md (11_mult1): Update attribute change.
	(11_mult2): Likewise.
	(11_mult3): Likewise.
	(11_mult4): Likewise.
	(11_mult5): Likewise.
	(11_mult6): Likewise.
	(11_mult7): Likewise.
	* config/arm/cortex-a8.md (cortex_a8_mul): Update attribute change.
	(cortex_a8_mla): Likewise.
	(cortex_a8_mull): Likewise.
	(cortex_a8_smulwy): Likewise.
	(cortex_a8_smlald): Likewise.
	* config/arm/cortex-m4.md (cortex_m4_alu): Update attribute change.
	* config/arm/cortex-r4.md (cortex_r4_mul_4): Update attribute change.
	(cortex_r4_mul_3): Likewise.
	(cortex_r4_mla_4): Likewise.
	(cortex_r4_mla_3): Likewise.
	(cortex_r4_smlald): Likewise.
	(cortex_r4_mull): Likewise.
	(cortex_r4_sdiv): Likewise.
	(cortex_r4_udiv): Likewise.
	* config/arm/cortex-a7.md (cortex_a7_mul): Update attribute change.
	(cortex_a7_idiv): Likewise.
	* config/arm/arm926ejs.md (9_mult1): Update attribute change.
	(9_mult2): Likewise.
	(9_mult3): Likewise.
	(9_mult4): Likewise.
	(9_mult5): Likewise.
	(9_mult6): Likewise.
	* config/arm/cortex-a53.md (cortex_a53_mul): Update attribute change.
	(cortex_a53_sdiv): Likewise.
	(cortex_a53_udiv): Likewise.
	* config/arm/fa726te.md (726te_mult_op): Update attribute change.
	* config/arm/fmp626.md (mp626_mult1): Update attribute change.
	(mp626_mult2): Likewise.
	(mp626_mult3): Likewise.
	(mp626_mult4): Likewise.
	* config/arm/fa526.md (526_mult1): Update attribute change.
	(526_mult2): Likewise.
	* config/arm/arm-generic.md (mult): Update attribute change.
	(mult_ldsched_strongarm): Likewise.
	(mult_ldsched): Likewise.
	(multi_cycle): Likewise.
	* config/arm/cortex-a5.md (cortex_a5_mul): Update attribute change.
	* config/arm/fa606te.md (606te_mult1): Update attribute change.
	(606te_mult2): Likewise.
	(606te_mult3): Likewise.
	(606te_mult4): Likewise.
	* config/arm/cortex-a9.md (cortex_a9_mult16): Update attribute change.
	(cortex_a9_mac16): Likewise.
	(cortex_a9_multiply): Likewise.
	(cortex_a9_mac): Likewise.
	(cortex_a9_multiply_long): Likewise.
	* config/arm/fa626te.md (626te_mult1): Update attribute change.
	(626te_mult2): Likewise.
	(626te_mult3): Likewise.
	(626te_mult4): Likewise.

From-SVN: r200167
parent d5ac899c
2013-06-18 Sofiane Naci <sofiane.naci@arm.com>
* config/arm/arm.md (attribute "insn"): Move multiplication and division
attributes to...
(attribute "type"): ... here. Remove mult.
(attribute "mul32"): New attribute.
(attribute "mul64"): Add umaal.
(*arm_mulsi3): Update attributes.
(*arm_mulsi3_v6): Likewise.
(*thumb_mulsi3): Likewise.
(*thumb_mulsi3_v6): Likewise.
(*mulsi3_compare0): Likewise.
(*mulsi3_compare0_v6): Likewise.
(*mulsi_compare0_scratch): Likewise.
(*mulsi_compare0_scratch_v6): Likewise.
(*mulsi3addsi): Likewise.
(*mulsi3addsi_v6): Likewise.
(*mulsi3addsi_compare0): Likewise.
(*mulsi3addsi_compare0_v6): Likewise.
(*mulsi3addsi_compare0_scratch): Likewise.
(*mulsi3addsi_compare0_scratch_v6): Likewise.
(*mulsi3subsi): Likewise.
(*mulsidi3adddi): Likewise.
(*mulsi3addsi_v6): Likewise.
(*mulsidi3adddi_v6): Likewise.
(*mulsidi3_nov6): Likewise.
(*mulsidi3_v6): Likewise.
(*umulsidi3_nov6): Likewise.
(*umulsidi3_v6): Likewise.
(*umulsidi3adddi): Likewise.
(*umulsidi3adddi_v6): Likewise.
(*smulsi3_highpart_nov6): Likewise.
(*smulsi3_highpart_v6): Likewise.
(*umulsi3_highpart_nov6): Likewise.
(*umulsi3_highpart_v6): Likewise.
(mulhisi3): Likewise.
(*mulhisi3tb): Likewise.
(*mulhisi3bt): Likewise.
(*mulhisi3tt): Likewise.
(maddhisi4): Likewise.
(*maddhisi4tb): Likewise.
(*maddhisi4tt): Likewise.
(maddhidi4): Likewise.
(*maddhidi4tb): Likewise.
(*maddhidi4tt): Likewise.
(divsi3): Likewise.
(udivsi3): Likewise.
* config/arm/thumb2.md (thumb2_mulsi_short): Update attributes.
(thumb2_mulsi_short_compare0): Likewise.
(thumb2_mulsi_short_compare0_scratch): Likewise.
* config/arm/arm1020e.md (1020mult1): Update attribute change.
(1020mult2): Likewise.
(1020mult3): Likewise.
(1020mult4): Likewise.
(1020mult5): Likewise.
(1020mult6): Likewise.
* config/arm/cortex-a15.md (cortex_a15_mult32): Update attribute change.
(cortex_a15_mult64): Likewise.
(cortex_a15_sdiv): Likewise.
(cortex_a15_udiv): Likewise.
* config/arm/arm1026ejs.md (mult1): Update attribute change.
(mult2): Likewise.
(mult3): Likewise.
(mult4): Likewise.
(mult5): Likewise.
(mult6): Likewise.
* config/arm/marvell-pj4.md (pj4_ir_mul): Update attribute change.
(pj4_ir_div): Likewise.
* config/arm/arm1136jfs.md (11_mult1): Update attribute change.
(11_mult2): Likewise.
(11_mult3): Likewise.
(11_mult4): Likewise.
(11_mult5): Likewise.
(11_mult6): Likewise.
(11_mult7): Likewise.
* config/arm/cortex-a8.md (cortex_a8_mul): Update attribute change.
(cortex_a8_mla): Likewise.
(cortex_a8_mull): Likewise.
(cortex_a8_smulwy): Likewise.
(cortex_a8_smlald): Likewise.
* config/arm/cortex-m4.md (cortex_m4_alu): Update attribute change.
* config/arm/cortex-r4.md (cortex_r4_mul_4): Update attribute change.
(cortex_r4_mul_3): Likewise.
(cortex_r4_mla_4): Likewise.
(cortex_r4_mla_3): Likewise.
(cortex_r4_smlald): Likewise.
(cortex_r4_mull): Likewise.
(cortex_r4_sdiv): Likewise.
(cortex_r4_udiv): Likewise.
* config/arm/cortex-a7.md (cortex_a7_mul): Update attribute change.
(cortex_a7_idiv): Likewise.
* config/arm/arm926ejs.md (9_mult1): Update attribute change.
(9_mult2): Likewise.
(9_mult3): Likewise.
(9_mult4): Likewise.
(9_mult5): Likewise.
(9_mult6): Likewise.
* config/arm/cortex-a53.md (cortex_a53_mul): Update attribute change.
(cortex_a53_sdiv): Likewise.
(cortex_a53_udiv): Likewise.
* config/arm/fa726te.md (726te_mult_op): Update attribute change.
* config/arm/fmp626.md (mp626_mult1): Update attribute change.
(mp626_mult2): Likewise.
(mp626_mult3): Likewise.
(mp626_mult4): Likewise.
* config/arm/fa526.md (526_mult1): Update attribute change.
(526_mult2): Likewise.
* config/arm/arm-generic.md (mult): Update attribute change.
(mult_ldsched_strongarm): Likewise.
(mult_ldsched): Likewise.
(multi_cycle): Likewise.
* config/arm/cortex-a5.md (cortex_a5_mul): Update attribute change.
* config/arm/fa606te.md (606te_mult1): Update attribute change.
(606te_mult2): Likewise.
(606te_mult3): Likewise.
(606te_mult4): Likewise.
* config/arm/cortex-a9.md (cortex_a9_mult16): Update attribute change.
(cortex_a9_mac16): Likewise.
(cortex_a9_multiply): Likewise.
(cortex_a9_mac): Likewise.
(cortex_a9_multiply_long): Likewise.
* config/arm/fa626te.md (626te_mult1): Update attribute change.
(626te_mult2): Likewise.
(626te_mult3): Likewise.
(626te_mult4): Likewise.
2013-06-18 Richard Biener <rguenther@suse.de> 2013-06-18 Richard Biener <rguenther@suse.de>
PR lto/57334 PR lto/57334
......
...@@ -114,7 +114,9 @@ ...@@ -114,7 +114,9 @@
(define_insn_reservation "mult" 16 (define_insn_reservation "mult" 16
(and (eq_attr "generic_sched" "yes") (and (eq_attr "generic_sched" "yes")
(and (eq_attr "ldsched" "no") (eq_attr "type" "mult"))) (and (eq_attr "ldsched" "no")
(ior (eq_attr "mul32" "yes")
(eq_attr "mul64" "yes"))))
"core*16") "core*16")
(define_insn_reservation "mult_ldsched_strongarm" 3 (define_insn_reservation "mult_ldsched_strongarm" 3
...@@ -122,7 +124,8 @@ ...@@ -122,7 +124,8 @@
(and (eq_attr "ldsched" "yes") (and (eq_attr "ldsched" "yes")
(and (eq_attr "tune" (and (eq_attr "tune"
"strongarm,strongarm110,strongarm1100,strongarm1110") "strongarm,strongarm110,strongarm1100,strongarm1110")
(eq_attr "type" "mult")))) (ior (eq_attr "mul32" "yes")
(eq_attr "mul64" "yes")))))
"core*2") "core*2")
(define_insn_reservation "mult_ldsched" 4 (define_insn_reservation "mult_ldsched" 4
...@@ -130,13 +133,17 @@ ...@@ -130,13 +133,17 @@
(and (eq_attr "ldsched" "yes") (and (eq_attr "ldsched" "yes")
(and (eq_attr "tune" (and (eq_attr "tune"
"!strongarm,strongarm110,strongarm1100,strongarm1110") "!strongarm,strongarm110,strongarm1100,strongarm1110")
(eq_attr "type" "mult")))) (ior (eq_attr "mul32" "yes")
(eq_attr "mul64" "yes")))))
"core*4") "core*4")
(define_insn_reservation "multi_cycle" 32 (define_insn_reservation "multi_cycle" 32
(and (eq_attr "generic_sched" "yes") (and (eq_attr "generic_sched" "yes")
(and (eq_attr "core_cycles" "multi") (and (eq_attr "core_cycles" "multi")
(eq_attr "type" "!mult,load_byte,load1,load2,load3,load4,store1,store2,store3,store4"))) (and (eq_attr "type" "!load_byte,load1,load2,load3,load4,\
store1,store2,store3,store4")
(not (ior (eq_attr "mul32" "yes")
(eq_attr "mul64" "yes"))))))
"core*32") "core*32")
(define_insn_reservation "single_cycle" 1 (define_insn_reservation "single_cycle" 1
......
...@@ -96,7 +96,7 @@ ...@@ -96,7 +96,7 @@
;; until after the memory stage. ;; until after the memory stage.
(define_insn_reservation "1020mult1" 2 (define_insn_reservation "1020mult1" 2
(and (eq_attr "tune" "arm1020e,arm1022e") (and (eq_attr "tune" "arm1020e,arm1022e")
(eq_attr "insn" "smulxy,smulwy")) (eq_attr "type" "smulxy,smulwy"))
"1020a_e,1020a_m,1020a_w") "1020a_e,1020a_m,1020a_w")
;; The "smlaxy" and "smlawx" instructions require two iterations through ;; The "smlaxy" and "smlawx" instructions require two iterations through
...@@ -104,7 +104,7 @@ ...@@ -104,7 +104,7 @@
;; the execute stage. ;; the execute stage.
(define_insn_reservation "1020mult2" 2 (define_insn_reservation "1020mult2" 2
(and (eq_attr "tune" "arm1020e,arm1022e") (and (eq_attr "tune" "arm1020e,arm1022e")
(eq_attr "insn" "smlaxy,smlalxy,smlawx")) (eq_attr "type" "smlaxy,smlalxy,smlawx"))
"1020a_e*2,1020a_m,1020a_w") "1020a_e*2,1020a_m,1020a_w")
;; The "smlalxy", "mul", and "mla" instructions require two iterations ;; The "smlalxy", "mul", and "mla" instructions require two iterations
...@@ -112,7 +112,7 @@ ...@@ -112,7 +112,7 @@
;; the memory stage. ;; the memory stage.
(define_insn_reservation "1020mult3" 3 (define_insn_reservation "1020mult3" 3
(and (eq_attr "tune" "arm1020e,arm1022e") (and (eq_attr "tune" "arm1020e,arm1022e")
(eq_attr "insn" "smlalxy,mul,mla")) (eq_attr "type" "smlalxy,mul,mla"))
"1020a_e*2,1020a_m,1020a_w") "1020a_e*2,1020a_m,1020a_w")
;; The "muls" and "mlas" instructions loop in the execute stage for ;; The "muls" and "mlas" instructions loop in the execute stage for
...@@ -120,7 +120,7 @@ ...@@ -120,7 +120,7 @@
;; available after three iterations. ;; available after three iterations.
(define_insn_reservation "1020mult4" 3 (define_insn_reservation "1020mult4" 3
(and (eq_attr "tune" "arm1020e,arm1022e") (and (eq_attr "tune" "arm1020e,arm1022e")
(eq_attr "insn" "muls,mlas")) (eq_attr "type" "muls,mlas"))
"1020a_e*4,1020a_m,1020a_w") "1020a_e*4,1020a_m,1020a_w")
;; Long multiply instructions that produce two registers of ;; Long multiply instructions that produce two registers of
...@@ -135,7 +135,7 @@ ...@@ -135,7 +135,7 @@
;; available after the memory cycle. ;; available after the memory cycle.
(define_insn_reservation "1020mult5" 4 (define_insn_reservation "1020mult5" 4
(and (eq_attr "tune" "arm1020e,arm1022e") (and (eq_attr "tune" "arm1020e,arm1022e")
(eq_attr "insn" "umull,umlal,smull,smlal")) (eq_attr "type" "umull,umlal,smull,smlal"))
"1020a_e*3,1020a_m,1020a_w") "1020a_e*3,1020a_m,1020a_w")
;; The "umulls", "umlals", "smulls", and "smlals" instructions loop in ;; The "umulls", "umlals", "smulls", and "smlals" instructions loop in
...@@ -143,7 +143,7 @@ ...@@ -143,7 +143,7 @@
;; The value result is available after four iterations. ;; The value result is available after four iterations.
(define_insn_reservation "1020mult6" 4 (define_insn_reservation "1020mult6" 4
(and (eq_attr "tune" "arm1020e,arm1022e") (and (eq_attr "tune" "arm1020e,arm1022e")
(eq_attr "insn" "umulls,umlals,smulls,smlals")) (eq_attr "type" "umulls,umlals,smulls,smlals"))
"1020a_e*5,1020a_m,1020a_w") "1020a_e*5,1020a_m,1020a_w")
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
......
...@@ -96,7 +96,7 @@ ...@@ -96,7 +96,7 @@
;; until after the memory stage. ;; until after the memory stage.
(define_insn_reservation "mult1" 2 (define_insn_reservation "mult1" 2
(and (eq_attr "tune" "arm1026ejs") (and (eq_attr "tune" "arm1026ejs")
(eq_attr "insn" "smulxy,smulwy")) (eq_attr "type" "smulxy,smulwy"))
"a_e,a_m,a_w") "a_e,a_m,a_w")
;; The "smlaxy" and "smlawx" instructions require two iterations through ;; The "smlaxy" and "smlawx" instructions require two iterations through
...@@ -104,7 +104,7 @@ ...@@ -104,7 +104,7 @@
;; the execute stage. ;; the execute stage.
(define_insn_reservation "mult2" 2 (define_insn_reservation "mult2" 2
(and (eq_attr "tune" "arm1026ejs") (and (eq_attr "tune" "arm1026ejs")
(eq_attr "insn" "smlaxy,smlalxy,smlawx")) (eq_attr "type" "smlaxy,smlalxy,smlawx"))
"a_e*2,a_m,a_w") "a_e*2,a_m,a_w")
;; The "smlalxy", "mul", and "mla" instructions require two iterations ;; The "smlalxy", "mul", and "mla" instructions require two iterations
...@@ -112,7 +112,7 @@ ...@@ -112,7 +112,7 @@
;; the memory stage. ;; the memory stage.
(define_insn_reservation "mult3" 3 (define_insn_reservation "mult3" 3
(and (eq_attr "tune" "arm1026ejs") (and (eq_attr "tune" "arm1026ejs")
(eq_attr "insn" "smlalxy,mul,mla")) (eq_attr "type" "smlalxy,mul,mla"))
"a_e*2,a_m,a_w") "a_e*2,a_m,a_w")
;; The "muls" and "mlas" instructions loop in the execute stage for ;; The "muls" and "mlas" instructions loop in the execute stage for
...@@ -120,7 +120,7 @@ ...@@ -120,7 +120,7 @@
;; available after three iterations. ;; available after three iterations.
(define_insn_reservation "mult4" 3 (define_insn_reservation "mult4" 3
(and (eq_attr "tune" "arm1026ejs") (and (eq_attr "tune" "arm1026ejs")
(eq_attr "insn" "muls,mlas")) (eq_attr "type" "muls,mlas"))
"a_e*4,a_m,a_w") "a_e*4,a_m,a_w")
;; Long multiply instructions that produce two registers of ;; Long multiply instructions that produce two registers of
...@@ -135,7 +135,7 @@ ...@@ -135,7 +135,7 @@
;; available after the memory cycle. ;; available after the memory cycle.
(define_insn_reservation "mult5" 4 (define_insn_reservation "mult5" 4
(and (eq_attr "tune" "arm1026ejs") (and (eq_attr "tune" "arm1026ejs")
(eq_attr "insn" "umull,umlal,smull,smlal")) (eq_attr "type" "umull,umlal,smull,smlal"))
"a_e*3,a_m,a_w") "a_e*3,a_m,a_w")
;; The "umulls", "umlals", "smulls", and "smlals" instructions loop in ;; The "umulls", "umlals", "smulls", and "smlals" instructions loop in
...@@ -143,7 +143,7 @@ ...@@ -143,7 +143,7 @@
;; The value result is available after four iterations. ;; The value result is available after four iterations.
(define_insn_reservation "mult6" 4 (define_insn_reservation "mult6" 4
(and (eq_attr "tune" "arm1026ejs") (and (eq_attr "tune" "arm1026ejs")
(eq_attr "insn" "umulls,umlals,smulls,smlals")) (eq_attr "type" "umulls,umlals,smulls,smlals"))
"a_e*5,a_m,a_w") "a_e*5,a_m,a_w")
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
......
...@@ -129,13 +129,13 @@ ...@@ -129,13 +129,13 @@
;; Multiply and multiply-accumulate results are available after four stages. ;; Multiply and multiply-accumulate results are available after four stages.
(define_insn_reservation "11_mult1" 4 (define_insn_reservation "11_mult1" 4
(and (eq_attr "tune" "arm1136js,arm1136jfs") (and (eq_attr "tune" "arm1136js,arm1136jfs")
(eq_attr "insn" "mul,mla")) (eq_attr "type" "mul,mla"))
"e_1*2,e_2,e_3,e_wb") "e_1*2,e_2,e_3,e_wb")
;; The *S variants set the condition flags, which requires three more cycles. ;; The *S variants set the condition flags, which requires three more cycles.
(define_insn_reservation "11_mult2" 4 (define_insn_reservation "11_mult2" 4
(and (eq_attr "tune" "arm1136js,arm1136jfs") (and (eq_attr "tune" "arm1136js,arm1136jfs")
(eq_attr "insn" "muls,mlas")) (eq_attr "type" "muls,mlas"))
"e_1*2,e_2,e_3,e_wb") "e_1*2,e_2,e_3,e_wb")
(define_bypass 3 "11_mult1,11_mult2" (define_bypass 3 "11_mult1,11_mult2"
...@@ -160,13 +160,13 @@ ...@@ -160,13 +160,13 @@
;; the two multiply-accumulate instructions. ;; the two multiply-accumulate instructions.
(define_insn_reservation "11_mult3" 5 (define_insn_reservation "11_mult3" 5
(and (eq_attr "tune" "arm1136js,arm1136jfs") (and (eq_attr "tune" "arm1136js,arm1136jfs")
(eq_attr "insn" "smull,umull,smlal,umlal")) (eq_attr "type" "smull,umull,smlal,umlal"))
"e_1*3,e_2,e_3,e_wb*2") "e_1*3,e_2,e_3,e_wb*2")
;; The *S variants set the condition flags, which requires three more cycles. ;; The *S variants set the condition flags, which requires three more cycles.
(define_insn_reservation "11_mult4" 5 (define_insn_reservation "11_mult4" 5
(and (eq_attr "tune" "arm1136js,arm1136jfs") (and (eq_attr "tune" "arm1136js,arm1136jfs")
(eq_attr "insn" "smulls,umulls,smlals,umlals")) (eq_attr "type" "smulls,umulls,smlals,umlals"))
"e_1*3,e_2,e_3,e_wb*2") "e_1*3,e_2,e_3,e_wb*2")
(define_bypass 4 "11_mult3,11_mult4" (define_bypass 4 "11_mult3,11_mult4"
...@@ -190,7 +190,8 @@ ...@@ -190,7 +190,8 @@
;; cycles. ;; cycles.
(define_insn_reservation "11_mult5" 3 (define_insn_reservation "11_mult5" 3
(and (eq_attr "tune" "arm1136js,arm1136jfs") (and (eq_attr "tune" "arm1136js,arm1136jfs")
(eq_attr "insn" "smulxy,smlaxy,smulwy,smlawy,smuad,smuadx,smlad,smladx,smusd,smusdx,smlsd,smlsdx")) (eq_attr "type" "smulxy,smlaxy,smulwy,smlawy,smuad,smuadx,smlad,smladx,\
smusd,smusdx,smlsd,smlsdx"))
"e_1,e_2,e_3,e_wb") "e_1,e_2,e_3,e_wb")
(define_bypass 2 "11_mult5" (define_bypass 2 "11_mult5"
...@@ -211,14 +212,14 @@ ...@@ -211,14 +212,14 @@
;; The same idea, then the 32-bit result is added to a 64-bit quantity. ;; The same idea, then the 32-bit result is added to a 64-bit quantity.
(define_insn_reservation "11_mult6" 4 (define_insn_reservation "11_mult6" 4
(and (eq_attr "tune" "arm1136js,arm1136jfs") (and (eq_attr "tune" "arm1136js,arm1136jfs")
(eq_attr "insn" "smlalxy")) (eq_attr "type" "smlalxy"))
"e_1*2,e_2,e_3,e_wb*2") "e_1*2,e_2,e_3,e_wb*2")
;; Signed 32x32 multiply, then the most significant 32 bits are extracted ;; Signed 32x32 multiply, then the most significant 32 bits are extracted
;; and are available after the memory stage. ;; and are available after the memory stage.
(define_insn_reservation "11_mult7" 4 (define_insn_reservation "11_mult7" 4
(and (eq_attr "tune" "arm1136js,arm1136jfs") (and (eq_attr "tune" "arm1136js,arm1136jfs")
(eq_attr "insn" "smmul,smmulr")) (eq_attr "type" "smmul,smmulr"))
"e_1*2,e_2,e_3,e_wb") "e_1*2,e_2,e_3,e_wb")
(define_bypass 3 "11_mult6,11_mult7" (define_bypass 3 "11_mult6,11_mult7"
......
...@@ -81,32 +81,32 @@ ...@@ -81,32 +81,32 @@
(define_insn_reservation "9_mult1" 3 (define_insn_reservation "9_mult1" 3
(and (eq_attr "tune" "arm926ejs") (and (eq_attr "tune" "arm926ejs")
(eq_attr "insn" "smlalxy,mul,mla")) (eq_attr "type" "smlalxy,mul,mla"))
"e*2,m,w") "e*2,m,w")
(define_insn_reservation "9_mult2" 4 (define_insn_reservation "9_mult2" 4
(and (eq_attr "tune" "arm926ejs") (and (eq_attr "tune" "arm926ejs")
(eq_attr "insn" "muls,mlas")) (eq_attr "type" "muls,mlas"))
"e*3,m,w") "e*3,m,w")
(define_insn_reservation "9_mult3" 4 (define_insn_reservation "9_mult3" 4
(and (eq_attr "tune" "arm926ejs") (and (eq_attr "tune" "arm926ejs")
(eq_attr "insn" "umull,umlal,smull,smlal")) (eq_attr "type" "umull,umlal,smull,smlal"))
"e*3,m,w") "e*3,m,w")
(define_insn_reservation "9_mult4" 5 (define_insn_reservation "9_mult4" 5
(and (eq_attr "tune" "arm926ejs") (and (eq_attr "tune" "arm926ejs")
(eq_attr "insn" "umulls,umlals,smulls,smlals")) (eq_attr "type" "umulls,umlals,smulls,smlals"))
"e*4,m,w") "e*4,m,w")
(define_insn_reservation "9_mult5" 2 (define_insn_reservation "9_mult5" 2
(and (eq_attr "tune" "arm926ejs") (and (eq_attr "tune" "arm926ejs")
(eq_attr "insn" "smulxy,smlaxy,smlawx")) (eq_attr "type" "smulxy,smlaxy,smlawx"))
"e,m,w") "e,m,w")
(define_insn_reservation "9_mult6" 3 (define_insn_reservation "9_mult6" 3
(and (eq_attr "tune" "arm926ejs") (and (eq_attr "tune" "arm926ejs")
(eq_attr "insn" "smlalxy")) (eq_attr "type" "smlalxy"))
"e*2,m,w") "e*2,m,w")
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
......
...@@ -87,28 +87,26 @@ ...@@ -87,28 +87,26 @@
;; 32-bit multiplies ;; 32-bit multiplies
(define_insn_reservation "cortex_a15_mult32" 3 (define_insn_reservation "cortex_a15_mult32" 3
(and (eq_attr "tune" "cortexa15") (and (eq_attr "tune" "cortexa15")
(and (eq_attr "type" "mult") (and (eq_attr "mul32" "yes")
(and (eq_attr "neon_type" "none") (eq_attr "neon_type" "none")))
(eq_attr "mul64" "no"))))
"ca15_issue1,ca15_mx") "ca15_issue1,ca15_mx")
;; 64-bit multiplies ;; 64-bit multiplies
(define_insn_reservation "cortex_a15_mult64" 4 (define_insn_reservation "cortex_a15_mult64" 4
(and (eq_attr "tune" "cortexa15") (and (eq_attr "tune" "cortexa15")
(and (eq_attr "type" "mult") (and (eq_attr "mul64" "yes")
(and (eq_attr "neon_type" "none") (eq_attr "neon_type" "none")))
(eq_attr "mul64" "yes"))))
"ca15_issue1,ca15_mx*2") "ca15_issue1,ca15_mx*2")
;; Integer divide ;; Integer divide
(define_insn_reservation "cortex_a15_udiv" 9 (define_insn_reservation "cortex_a15_udiv" 9
(and (eq_attr "tune" "cortexa15") (and (eq_attr "tune" "cortexa15")
(eq_attr "insn" "udiv")) (eq_attr "type" "udiv"))
"ca15_issue1,ca15_mx") "ca15_issue1,ca15_mx")
(define_insn_reservation "cortex_a15_sdiv" 10 (define_insn_reservation "cortex_a15_sdiv" 10
(and (eq_attr "tune" "cortexa15") (and (eq_attr "tune" "cortexa15")
(eq_attr "insn" "sdiv")) (eq_attr "type" "sdiv"))
"ca15_issue1,ca15_mx") "ca15_issue1,ca15_mx")
;; Block all issue pipes for a cycle ;; Block all issue pipes for a cycle
......
...@@ -80,7 +80,8 @@ ...@@ -80,7 +80,8 @@
(define_insn_reservation "cortex_a5_mul" 2 (define_insn_reservation "cortex_a5_mul" 2
(and (eq_attr "tune" "cortexa5") (and (eq_attr "tune" "cortexa5")
(eq_attr "type" "mult")) (ior (eq_attr "mul32" "yes")
(eq_attr "mul64" "yes")))
"cortex_a5_ex1") "cortex_a5_ex1")
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
......
...@@ -89,7 +89,8 @@ ...@@ -89,7 +89,8 @@
(define_insn_reservation "cortex_a53_mul" 3 (define_insn_reservation "cortex_a53_mul" 3
(and (eq_attr "tune" "cortexa53") (and (eq_attr "tune" "cortexa53")
(eq_attr "type" "mult")) (ior (eq_attr "mul32" "yes")
(eq_attr "mul64" "yes")))
"cortex_a53_single_issue") "cortex_a53_single_issue")
;; A multiply with a single-register result or an MLA, followed by an ;; A multiply with a single-register result or an MLA, followed by an
...@@ -103,12 +104,12 @@ ...@@ -103,12 +104,12 @@
;; Punt with a high enough latency for divides. ;; Punt with a high enough latency for divides.
(define_insn_reservation "cortex_a53_udiv" 8 (define_insn_reservation "cortex_a53_udiv" 8
(and (eq_attr "tune" "cortexa53") (and (eq_attr "tune" "cortexa53")
(eq_attr "insn" "udiv")) (eq_attr "type" "udiv"))
"(cortex_a53_slot0+cortex_a53_idiv),cortex_a53_idiv*7") "(cortex_a53_slot0+cortex_a53_idiv),cortex_a53_idiv*7")
(define_insn_reservation "cortex_a53_sdiv" 9 (define_insn_reservation "cortex_a53_sdiv" 9
(and (eq_attr "tune" "cortexa53") (and (eq_attr "tune" "cortexa53")
(eq_attr "insn" "sdiv")) (eq_attr "type" "sdiv"))
"(cortex_a53_slot0+cortex_a53_idiv),cortex_a53_idiv*8") "(cortex_a53_slot0+cortex_a53_idiv),cortex_a53_idiv*8")
......
...@@ -127,8 +127,9 @@ ...@@ -127,8 +127,9 @@
(define_insn_reservation "cortex_a7_mul" 2 (define_insn_reservation "cortex_a7_mul" 2
(and (eq_attr "tune" "cortexa7") (and (eq_attr "tune" "cortexa7")
(and (eq_attr "type" "mult") (and (eq_attr "neon_type" "none")
(eq_attr "neon_type" "none"))) (ior (eq_attr "mul32" "yes")
(eq_attr "mul64" "yes"))))
"cortex_a7_both") "cortex_a7_both")
;; Forward the result of a multiply operation to the accumulator ;; Forward the result of a multiply operation to the accumulator
...@@ -140,7 +141,7 @@ ...@@ -140,7 +141,7 @@
;; The latency depends on the operands, so we use an estimate here. ;; The latency depends on the operands, so we use an estimate here.
(define_insn_reservation "cortex_a7_idiv" 5 (define_insn_reservation "cortex_a7_idiv" 5
(and (eq_attr "tune" "cortexa7") (and (eq_attr "tune" "cortexa7")
(eq_attr "insn" "udiv,sdiv")) (eq_attr "type" "udiv,sdiv"))
"cortex_a7_both*5") "cortex_a7_both*5")
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
......
...@@ -139,22 +139,22 @@ ...@@ -139,22 +139,22 @@
(define_insn_reservation "cortex_a8_mul" 6 (define_insn_reservation "cortex_a8_mul" 6
(and (eq_attr "tune" "cortexa8") (and (eq_attr "tune" "cortexa8")
(eq_attr "insn" "mul,smulxy,smmul")) (eq_attr "type" "mul,smulxy,smmul"))
"cortex_a8_multiply_2") "cortex_a8_multiply_2")
(define_insn_reservation "cortex_a8_mla" 6 (define_insn_reservation "cortex_a8_mla" 6
(and (eq_attr "tune" "cortexa8") (and (eq_attr "tune" "cortexa8")
(eq_attr "insn" "mla,smlaxy,smlawy,smmla,smlad,smlsd")) (eq_attr "type" "mla,smlaxy,smlawy,smmla,smlad,smlsd"))
"cortex_a8_multiply_2") "cortex_a8_multiply_2")
(define_insn_reservation "cortex_a8_mull" 7 (define_insn_reservation "cortex_a8_mull" 7
(and (eq_attr "tune" "cortexa8") (and (eq_attr "tune" "cortexa8")
(eq_attr "insn" "smull,umull,smlal,umlal,umaal,smlalxy")) (eq_attr "type" "smull,umull,smlal,umlal,umaal,smlalxy"))
"cortex_a8_multiply_3") "cortex_a8_multiply_3")
(define_insn_reservation "cortex_a8_smulwy" 5 (define_insn_reservation "cortex_a8_smulwy" 5
(and (eq_attr "tune" "cortexa8") (and (eq_attr "tune" "cortexa8")
(eq_attr "insn" "smulwy,smuad,smusd")) (eq_attr "type" "smulwy,smuad,smusd"))
"cortex_a8_multiply") "cortex_a8_multiply")
;; smlald and smlsld are multiply-accumulate instructions but do not ;; smlald and smlsld are multiply-accumulate instructions but do not
...@@ -162,7 +162,7 @@ ...@@ -162,7 +162,7 @@
;; cannot go in cortex_a8_mla above. (See below for bypass details.) ;; cannot go in cortex_a8_mla above. (See below for bypass details.)
(define_insn_reservation "cortex_a8_smlald" 6 (define_insn_reservation "cortex_a8_smlald" 6
(and (eq_attr "tune" "cortexa8") (and (eq_attr "tune" "cortexa8")
(eq_attr "insn" "smlald,smlsld")) (eq_attr "type" "smlald,smlsld"))
"cortex_a8_multiply_2") "cortex_a8_multiply_2")
;; A multiply with a single-register result or an MLA, followed by an ;; A multiply with a single-register result or an MLA, followed by an
......
...@@ -130,29 +130,29 @@ cortex_a9_p1_e2 + cortex_a9_p0_e1 + cortex_a9_p1_e1") ...@@ -130,29 +130,29 @@ cortex_a9_p1_e2 + cortex_a9_p0_e1 + cortex_a9_p1_e1")
;; We get 16*16 multiply / mac results in 3 cycles. ;; We get 16*16 multiply / mac results in 3 cycles.
(define_insn_reservation "cortex_a9_mult16" 3 (define_insn_reservation "cortex_a9_mult16" 3
(and (eq_attr "tune" "cortexa9") (and (eq_attr "tune" "cortexa9")
(eq_attr "insn" "smulxy")) (eq_attr "type" "smulxy"))
"cortex_a9_mult16") "cortex_a9_mult16")
;; The 16*16 mac is slightly different that it ;; The 16*16 mac is slightly different that it
;; reserves M1 and M2 in the same cycle. ;; reserves M1 and M2 in the same cycle.
(define_insn_reservation "cortex_a9_mac16" 3 (define_insn_reservation "cortex_a9_mac16" 3
(and (eq_attr "tune" "cortexa9") (and (eq_attr "tune" "cortexa9")
(eq_attr "insn" "smlaxy")) (eq_attr "type" "smlaxy"))
"cortex_a9_mac16") "cortex_a9_mac16")
(define_insn_reservation "cortex_a9_multiply" 4 (define_insn_reservation "cortex_a9_multiply" 4
(and (eq_attr "tune" "cortexa9") (and (eq_attr "tune" "cortexa9")
(eq_attr "insn" "mul,smmul,smmulr")) (eq_attr "type" "mul,smmul,smmulr"))
"cortex_a9_mult") "cortex_a9_mult")
(define_insn_reservation "cortex_a9_mac" 4 (define_insn_reservation "cortex_a9_mac" 4
(and (eq_attr "tune" "cortexa9") (and (eq_attr "tune" "cortexa9")
(eq_attr "insn" "mla,smmla")) (eq_attr "type" "mla,smmla"))
"cortex_a9_mac") "cortex_a9_mac")
(define_insn_reservation "cortex_a9_multiply_long" 5 (define_insn_reservation "cortex_a9_multiply_long" 5
(and (eq_attr "tune" "cortexa9") (and (eq_attr "tune" "cortexa9")
(eq_attr "insn" "smull,umull,smulls,umulls,smlal,smlals,umlal,umlals")) (eq_attr "type" "smull,umull,smulls,umulls,smlal,smlals,umlal,umlals"))
"cortex_a9_mult_long") "cortex_a9_mult_long")
;; An instruction with a result in E2 can be forwarded ;; An instruction with a result in E2 can be forwarded
......
...@@ -31,7 +31,10 @@ ...@@ -31,7 +31,10 @@
;; ALU and multiply is one cycle. ;; ALU and multiply is one cycle.
(define_insn_reservation "cortex_m4_alu" 1 (define_insn_reservation "cortex_m4_alu" 1
(and (eq_attr "tune" "cortexm4") (and (eq_attr "tune" "cortexm4")
(eq_attr "type" "alu_reg,simple_alu_imm,simple_alu_shift,alu_shift,alu_shift_reg,mult")) (ior (eq_attr "type" "alu_reg,simple_alu_imm,simple_alu_shift,\
alu_shift,alu_shift_reg")
(ior (eq_attr "mul32" "yes")
(eq_attr "mul64" "yes"))))
"cortex_m4_ex") "cortex_m4_ex")
;; Byte, half-word and word load is two cycles. ;; Byte, half-word and word load is two cycles.
......
...@@ -128,32 +128,32 @@ ...@@ -128,32 +128,32 @@
(define_insn_reservation "cortex_r4_mul_4" 4 (define_insn_reservation "cortex_r4_mul_4" 4
(and (eq_attr "tune_cortexr4" "yes") (and (eq_attr "tune_cortexr4" "yes")
(eq_attr "insn" "mul,smmul")) (eq_attr "type" "mul,smmul"))
"cortex_r4_mul_2") "cortex_r4_mul_2")
(define_insn_reservation "cortex_r4_mul_3" 3 (define_insn_reservation "cortex_r4_mul_3" 3
(and (eq_attr "tune_cortexr4" "yes") (and (eq_attr "tune_cortexr4" "yes")
(eq_attr "insn" "smulxy,smulwy,smuad,smusd")) (eq_attr "type" "smulxy,smulwy,smuad,smusd"))
"cortex_r4_mul") "cortex_r4_mul")
(define_insn_reservation "cortex_r4_mla_4" 4 (define_insn_reservation "cortex_r4_mla_4" 4
(and (eq_attr "tune_cortexr4" "yes") (and (eq_attr "tune_cortexr4" "yes")
(eq_attr "insn" "mla,smmla")) (eq_attr "type" "mla,smmla"))
"cortex_r4_mul_2") "cortex_r4_mul_2")
(define_insn_reservation "cortex_r4_mla_3" 3 (define_insn_reservation "cortex_r4_mla_3" 3
(and (eq_attr "tune_cortexr4" "yes") (and (eq_attr "tune_cortexr4" "yes")
(eq_attr "insn" "smlaxy,smlawy,smlad,smlsd")) (eq_attr "type" "smlaxy,smlawy,smlad,smlsd"))
"cortex_r4_mul") "cortex_r4_mul")
(define_insn_reservation "cortex_r4_smlald" 3 (define_insn_reservation "cortex_r4_smlald" 3
(and (eq_attr "tune_cortexr4" "yes") (and (eq_attr "tune_cortexr4" "yes")
(eq_attr "insn" "smlald,smlsld")) (eq_attr "type" "smlald,smlsld"))
"cortex_r4_mul") "cortex_r4_mul")
(define_insn_reservation "cortex_r4_mull" 4 (define_insn_reservation "cortex_r4_mull" 4
(and (eq_attr "tune_cortexr4" "yes") (and (eq_attr "tune_cortexr4" "yes")
(eq_attr "insn" "smull,umull,umlal,umaal")) (eq_attr "type" "smull,umull,umlal,umaal"))
"cortex_r4_mul_2") "cortex_r4_mul_2")
;; A multiply or an MLA with a single-register result, followed by an ;; A multiply or an MLA with a single-register result, followed by an
...@@ -196,12 +196,12 @@ ...@@ -196,12 +196,12 @@
;; This gives a latency of nine for udiv and ten for sdiv. ;; This gives a latency of nine for udiv and ten for sdiv.
(define_insn_reservation "cortex_r4_udiv" 9 (define_insn_reservation "cortex_r4_udiv" 9
(and (eq_attr "tune_cortexr4" "yes") (and (eq_attr "tune_cortexr4" "yes")
(eq_attr "insn" "udiv")) (eq_attr "type" "udiv"))
"cortex_r4_div_9") "cortex_r4_div_9")
(define_insn_reservation "cortex_r4_sdiv" 10 (define_insn_reservation "cortex_r4_sdiv" 10
(and (eq_attr "tune_cortexr4" "yes") (and (eq_attr "tune_cortexr4" "yes")
(eq_attr "insn" "sdiv")) (eq_attr "type" "sdiv"))
"cortex_r4_div_10") "cortex_r4_div_10")
;; Branches. We assume correct prediction. ;; Branches. We assume correct prediction.
......
...@@ -76,12 +76,12 @@ ...@@ -76,12 +76,12 @@
(define_insn_reservation "526_mult1" 2 (define_insn_reservation "526_mult1" 2
(and (eq_attr "tune" "fa526") (and (eq_attr "tune" "fa526")
(eq_attr "insn" "smlalxy,smulxy,smlaxy,smlalxy")) (eq_attr "type" "smlalxy,smulxy,smlaxy,smlalxy"))
"fa526_core") "fa526_core")
(define_insn_reservation "526_mult2" 5 (define_insn_reservation "526_mult2" 5
(and (eq_attr "tune" "fa526") (and (eq_attr "tune" "fa526")
(eq_attr "insn" "mul,mla,muls,mlas,umull,umlal,smull,smlal,umulls,\ (eq_attr "type" "mul,mla,muls,mlas,umull,umlal,smull,smlal,umulls,\
umlals,smulls,smlals,smlawx")) umlals,smulls,smlals,smlawx"))
"fa526_core*4") "fa526_core*4")
......
...@@ -71,22 +71,22 @@ ...@@ -71,22 +71,22 @@
(define_insn_reservation "606te_mult1" 2 (define_insn_reservation "606te_mult1" 2
(and (eq_attr "tune" "fa606te") (and (eq_attr "tune" "fa606te")
(eq_attr "insn" "smlalxy")) (eq_attr "type" "smlalxy"))
"fa606te_core") "fa606te_core")
(define_insn_reservation "606te_mult2" 3 (define_insn_reservation "606te_mult2" 3
(and (eq_attr "tune" "fa606te") (and (eq_attr "tune" "fa606te")
(eq_attr "insn" "smlaxy,smulxy,smulwy,smlawy")) (eq_attr "type" "smlaxy,smulxy,smulwy,smlawy"))
"fa606te_core*2") "fa606te_core*2")
(define_insn_reservation "606te_mult3" 4 (define_insn_reservation "606te_mult3" 4
(and (eq_attr "tune" "fa606te") (and (eq_attr "tune" "fa606te")
(eq_attr "insn" "mul,mla,muls,mlas")) (eq_attr "type" "mul,mla,muls,mlas"))
"fa606te_core*3") "fa606te_core*3")
(define_insn_reservation "606te_mult4" 5 (define_insn_reservation "606te_mult4" 5
(and (eq_attr "tune" "fa606te") (and (eq_attr "tune" "fa606te")
(eq_attr "insn" "umull,umlal,smull,smlal,umulls,umlals,smulls,smlals")) (eq_attr "type" "umull,umlal,smull,smlal,umulls,umlals,smulls,smlals"))
"fa606te_core*4") "fa606te_core*4")
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
......
...@@ -82,22 +82,22 @@ ...@@ -82,22 +82,22 @@
(define_insn_reservation "626te_mult1" 2 (define_insn_reservation "626te_mult1" 2
(and (eq_attr "tune" "fa626,fa626te") (and (eq_attr "tune" "fa626,fa626te")
(eq_attr "insn" "smulwy,smlawy,smulxy,smlaxy")) (eq_attr "type" "smulwy,smlawy,smulxy,smlaxy"))
"fa626te_core") "fa626te_core")
(define_insn_reservation "626te_mult2" 2 (define_insn_reservation "626te_mult2" 2
(and (eq_attr "tune" "fa626,fa626te") (and (eq_attr "tune" "fa626,fa626te")
(eq_attr "insn" "mul,mla")) (eq_attr "type" "mul,mla"))
"fa626te_core") "fa626te_core")
(define_insn_reservation "626te_mult3" 3 (define_insn_reservation "626te_mult3" 3
(and (eq_attr "tune" "fa626,fa626te") (and (eq_attr "tune" "fa626,fa626te")
(eq_attr "insn" "muls,mlas,smull,smlal,umull,umlal,smlalxy,smlawx")) (eq_attr "type" "muls,mlas,smull,smlal,umull,umlal,smlalxy,smlawx"))
"fa626te_core*2") "fa626te_core*2")
(define_insn_reservation "626te_mult4" 4 (define_insn_reservation "626te_mult4" 4
(and (eq_attr "tune" "fa626,fa626te") (and (eq_attr "tune" "fa626,fa626te")
(eq_attr "insn" "smulls,smlals,umulls,umlals")) (eq_attr "type" "smulls,smlals,umulls,umlals"))
"fa626te_core*3") "fa626te_core*3")
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
......
...@@ -115,7 +115,7 @@ ...@@ -115,7 +115,7 @@
(define_insn_reservation "726te_mult_op" 3 (define_insn_reservation "726te_mult_op" 3
(and (eq_attr "tune" "fa726te") (and (eq_attr "tune" "fa726te")
(eq_attr "insn" "smlalxy,mul,mla,muls,mlas,umull,umlal,smull,smlal,\ (eq_attr "type" "smlalxy,mul,mla,muls,mlas,umull,umlal,smull,smlal,\
umulls,umlals,smulls,smlals,smlawx,smulxy,smlaxy")) umulls,umlals,smulls,smlals,smlawx,smulxy,smlaxy"))
"fa726te_issue+fa726te_mac_pipe") "fa726te_issue+fa726te_mac_pipe")
......
...@@ -77,22 +77,22 @@ ...@@ -77,22 +77,22 @@
(define_insn_reservation "mp626_mult1" 2 (define_insn_reservation "mp626_mult1" 2
(and (eq_attr "tune" "fmp626") (and (eq_attr "tune" "fmp626")
(eq_attr "insn" "smulwy,smlawy,smulxy,smlaxy")) (eq_attr "type" "smulwy,smlawy,smulxy,smlaxy"))
"fmp626_core") "fmp626_core")
(define_insn_reservation "mp626_mult2" 2 (define_insn_reservation "mp626_mult2" 2
(and (eq_attr "tune" "fmp626") (and (eq_attr "tune" "fmp626")
(eq_attr "insn" "mul,mla")) (eq_attr "type" "mul,mla"))
"fmp626_core") "fmp626_core")
(define_insn_reservation "mp626_mult3" 3 (define_insn_reservation "mp626_mult3" 3
(and (eq_attr "tune" "fmp626") (and (eq_attr "tune" "fmp626")
(eq_attr "insn" "muls,mlas,smull,smlal,umull,umlal,smlalxy,smlawx")) (eq_attr "type" "muls,mlas,smull,smlal,umull,umlal,smlalxy,smlawx"))
"fmp626_core*2") "fmp626_core*2")
(define_insn_reservation "mp626_mult4" 4 (define_insn_reservation "mp626_mult4" 4
(and (eq_attr "tune" "fmp626") (and (eq_attr "tune" "fmp626")
(eq_attr "insn" "smulls,smlals,umulls,umlals")) (eq_attr "type" "smulls,smlals,umulls,umlals"))
"fmp626_core*3") "fmp626_core*3")
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
......
...@@ -95,10 +95,14 @@ ...@@ -95,10 +95,14 @@
"pj4_ir_mul,pj4_ir_div,pj4_core_to_vfp") "pj4_ir_mul,pj4_ir_div,pj4_core_to_vfp")
(define_insn_reservation "pj4_ir_mul" 3 (define_insn_reservation "pj4_ir_mul" 3
(and (eq_attr "tune" "marvell_pj4") (eq_attr "type" "mult")) "pj4_is,pj4_mul,nothing*2,pj4_cp") (and (eq_attr "tune" "marvell_pj4")
(ior (eq_attr "mul32" "yes")
(eq_attr "mul64" "yes")))
"pj4_is,pj4_mul,nothing*2,pj4_cp")
(define_insn_reservation "pj4_ir_div" 20 (define_insn_reservation "pj4_ir_div" 20
(and (eq_attr "tune" "marvell_pj4") (eq_attr "insn" "udiv,sdiv")) "pj4_is,pj4_div*19,pj4_cp") (and (eq_attr "tune" "marvell_pj4")
(eq_attr "type" "udiv,sdiv")) "pj4_is,pj4_div*19,pj4_cp")
;; Branches and calls. ;; Branches and calls.
......
...@@ -1063,7 +1063,7 @@ ...@@ -1063,7 +1063,7 @@
"mul%!\\t%0, %2, %0" "mul%!\\t%0, %2, %0"
[(set_attr "predicable" "yes") [(set_attr "predicable" "yes")
(set_attr "length" "2") (set_attr "length" "2")
(set_attr "insn" "muls")]) (set_attr "type" "muls")])
(define_insn "*thumb2_mulsi_short_compare0" (define_insn "*thumb2_mulsi_short_compare0"
[(set (reg:CC_NOOV CC_REGNUM) [(set (reg:CC_NOOV CC_REGNUM)
...@@ -1076,7 +1076,7 @@ ...@@ -1076,7 +1076,7 @@
"TARGET_THUMB2 && optimize_size" "TARGET_THUMB2 && optimize_size"
"muls\\t%0, %2, %0" "muls\\t%0, %2, %0"
[(set_attr "length" "2") [(set_attr "length" "2")
(set_attr "insn" "muls")]) (set_attr "type" "muls")])
(define_insn "*thumb2_mulsi_short_compare0_scratch" (define_insn "*thumb2_mulsi_short_compare0_scratch"
[(set (reg:CC_NOOV CC_REGNUM) [(set (reg:CC_NOOV CC_REGNUM)
...@@ -1088,7 +1088,7 @@ ...@@ -1088,7 +1088,7 @@
"TARGET_THUMB2 && optimize_size" "TARGET_THUMB2 && optimize_size"
"muls\\t%0, %2, %0" "muls\\t%0, %2, %0"
[(set_attr "length" "2") [(set_attr "length" "2")
(set_attr "insn" "muls")]) (set_attr "type" "muls")])
(define_insn "*thumb2_cbz" (define_insn "*thumb2_cbz"
[(set (pc) (if_then_else [(set (pc) (if_then_else
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment