Commit 943c15ed by David Edelsohn Committed by David Edelsohn

rs6000.md (define_attr "type"): Add two and three.

        * config/rs6000/rs6000.md (define_attr "type"): Add two and three.
        Change multi-instruction sequences to new attribute.
        * config/rs6000/{40x.md,440.md,603.md,6xx.md,
        7450.md,7xx.md,8540.md,mpc.md,power4.md,power5.md,
        rios1.md,rios2.md,rs64.md}: Add descriptions for two and three.

From-SVN: r90456
parent 8b41b1b2
2004-11-10 David Edelsohn <edelsohn@gnu.org>
* config/rs6000/rs6000.md (define_attr "type"): Add two and three.
Change multi-instruction sequences to new attribute.
* config/rs6000/{40x.md,440.md,603.md,6xx.md,
7450.md,7xx.md,8540.md,mpc.md,power4.md,power5.md,
rios1.md,rios2.md,rs64.md}: Add descriptions for two and three.
2004-11-10 Daniel Berlin <dberlin@dberlin.org> 2004-11-10 Daniel Berlin <dberlin@dberlin.org>
* tree-data-ref.c (build_classic_dist_vector): If either loop * tree-data-ref.c (build_classic_dist_vector): If either loop
......
...@@ -41,6 +41,16 @@ ...@@ -41,6 +41,16 @@
(eq_attr "cpu" "ppc403,ppc405")) (eq_attr "cpu" "ppc403,ppc405"))
"iu_40x") "iu_40x")
(define_insn_reservation "ppc403-two" 1
(and (eq_attr "type" "two")
(eq_attr "cpu" "ppc403,ppc405"))
"iu_40x,iu_40x")
(define_insn_reservation "ppc403-three" 1
(and (eq_attr "type" "three")
(eq_attr "cpu" "ppc403,ppc405"))
"iu_40x,iu_40x,iu_40x")
(define_insn_reservation "ppc403-compare" 3 (define_insn_reservation "ppc403-compare" 3
(and (eq_attr "type" "cmp,fast_compare,compare,delayed_compare") (and (eq_attr "type" "cmp,fast_compare,compare,delayed_compare")
(eq_attr "cpu" "ppc403,ppc405")) (eq_attr "cpu" "ppc403,ppc405"))
......
...@@ -58,6 +58,18 @@ ...@@ -58,6 +58,18 @@
(eq_attr "cpu" "ppc440")) (eq_attr "cpu" "ppc440"))
"ppc440_issue,ppc440_i_pipe|ppc440_j_pipe") "ppc440_issue,ppc440_i_pipe|ppc440_j_pipe")
(define_insn_reservation "ppc440-two" 1
(and (eq_attr "type" "two")
(eq_attr "cpu" "ppc440"))
"ppc440_issue_0+ppc440_issue_1,\
ppc440_i_pipe|ppc440_j_pipe,ppc440_i_pipe|ppc440_j_pipe")
(define_insn_reservation "ppc440-three" 1
(and (eq_attr "type" "three")
(eq_attr "cpu" "ppc440"))
"ppc440_issue_0+ppc440_issue_1,ppc440_i_pipe|ppc440_j_pipe,\
ppc440_i_pipe|ppc440_j_pipe,ppc440_i_pipe|ppc440_j_pipe")
(define_insn_reservation "ppc440-imul" 3 (define_insn_reservation "ppc440-imul" 3
(and (eq_attr "type" "imul,imul_compare") (and (eq_attr "type" "imul,imul_compare")
(eq_attr "cpu" "ppc440")) (eq_attr "cpu" "ppc440"))
......
...@@ -58,6 +58,16 @@ ...@@ -58,6 +58,16 @@
(eq_attr "cpu" "ppc603")) (eq_attr "cpu" "ppc603"))
"iu_603") "iu_603")
(define_insn_reservation "ppc603-two" 1
(and (eq_attr "type" "two")
(eq_attr "cpu" "ppc603"))
"iu_603,iu_603")
(define_insn_reservation "ppc603-three" 1
(and (eq_attr "type" "three")
(eq_attr "cpu" "ppc603"))
"iu_603,iu_603,iu_603")
; This takes 2 or 3 cycles ; This takes 2 or 3 cycles
(define_insn_reservation "ppc603-imul" 3 (define_insn_reservation "ppc603-imul" 3
(and (eq_attr "type" "imul,imul_compare") (and (eq_attr "type" "imul,imul_compare")
......
...@@ -68,6 +68,16 @@ ...@@ -68,6 +68,16 @@
(eq_attr "cpu" "ppc604,ppc604e,ppc620,ppc630")) (eq_attr "cpu" "ppc604,ppc604e,ppc620,ppc630"))
"iu1_6xx|iu2_6xx") "iu1_6xx|iu2_6xx")
(define_insn_reservation "ppc604-two" 1
(and (eq_attr "type" "two")
(eq_attr "cpu" "ppc604,ppc604e,ppc620,ppc630"))
"iu1_6xx|iu2_6xx,iu1_6xx|iu2_6xx")
(define_insn_reservation "ppc604-three" 1
(and (eq_attr "type" "three")
(eq_attr "cpu" "ppc604,ppc604e,ppc620,ppc630"))
"iu1_6xx|iu2_6xx,iu1_6xx|iu2_6xx,iu1_6xx|iu2_6xx")
(define_insn_reservation "ppc604-imul" 4 (define_insn_reservation "ppc604-imul" 4
(and (eq_attr "type" "imul,imul2,imul3,imul_compare") (and (eq_attr "type" "imul,imul2,imul3,imul_compare")
(eq_attr "cpu" "ppc604")) (eq_attr "cpu" "ppc604"))
......
...@@ -67,7 +67,18 @@ ...@@ -67,7 +67,18 @@
(define_insn_reservation "ppc7450-integer" 1 (define_insn_reservation "ppc7450-integer" 1
(and (eq_attr "type" "integer,insert_word") (and (eq_attr "type" "integer,insert_word")
(eq_attr "cpu" "ppc7450")) (eq_attr "cpu" "ppc7450"))
"ppc7450_du,(iu1_7450|iu2_7450|iu3_7450)") "ppc7450_du,iu1_7450|iu2_7450|iu3_7450")
(define_insn_reservation "ppc7450-two" 1
(and (eq_attr "type" "two")
(eq_attr "cpu" "ppc7450"))
"ppc7450_du,iu1_7450|iu2_7450|iu3_7450,iu1_7450|iu2_7450|iu3_7450")
(define_insn_reservation "ppc7450-three" 1
(and (eq_attr "type" "three")
(eq_attr "cpu" "ppc7450"))
"ppc7450_du,iu1_7450|iu2_7450|iu3_7450,\
iu1_7450|iu2_7450|iu3_7450,iu1_7450|iu2_7450|iu3_7450")
(define_insn_reservation "ppc7450-imul" 4 (define_insn_reservation "ppc7450-imul" 4
(and (eq_attr "type" "imul,imul_compare") (and (eq_attr "type" "imul,imul_compare")
......
...@@ -61,7 +61,17 @@ ...@@ -61,7 +61,17 @@
(define_insn_reservation "ppc750-integer" 1 (define_insn_reservation "ppc750-integer" 1
(and (eq_attr "type" "integer,insert_word") (and (eq_attr "type" "integer,insert_word")
(eq_attr "cpu" "ppc750,ppc7400")) (eq_attr "cpu" "ppc750,ppc7400"))
"ppc750_du,(iu1_7xx|iu2_7xx)") "ppc750_du,iu1_7xx|iu2_7xx")
(define_insn_reservation "ppc750-two" 1
(and (eq_attr "type" "two")
(eq_attr "cpu" "ppc750,ppc7400"))
"ppc750_du,iu1_7xx|iu2_7xx,iu1_7xx|iu2_7xx")
(define_insn_reservation "ppc750-three" 1
(and (eq_attr "type" "three")
(eq_attr "cpu" "ppc750,ppc7400"))
"ppc750_du,iu1_7xx|iu2_7xx,iu1_7xx|iu2_7xx,iu1_7xx|iu2_7xx")
(define_insn_reservation "ppc750-imul" 4 (define_insn_reservation "ppc750-imul" 4
(and (eq_attr "type" "imul,imul_compare") (and (eq_attr "type" "imul,imul_compare")
......
...@@ -89,6 +89,19 @@ ...@@ -89,6 +89,19 @@
(eq_attr "cpu" "ppc8540")) (eq_attr "cpu" "ppc8540"))
"ppc8540_decode,ppc8540_issue+ppc8540_su_stage0+ppc8540_retire") "ppc8540_decode,ppc8540_issue+ppc8540_su_stage0+ppc8540_retire")
(define_insn_reservation "ppc8540_two" 1
(and (eq_attr "type" "two")
(eq_attr "cpu" "ppc8540"))
"ppc8540_decode,ppc8540_issue+ppc8540_su_stage0+ppc8540_retire,\
ppc8540_issue+ppc8540_su_stage0+ppc8540_retire")
(define_insn_reservation "ppc8540_three" 1
(and (eq_attr "type" "three")
(eq_attr "cpu" "ppc8540"))
"ppc8540_decode,ppc8540_issue+ppc8540_su_stage0+ppc8540_retire,\
ppc8540_issue+ppc8540_su_stage0+ppc8540_retire,\
ppc8540_issue+ppc8540_su_stage0+ppc8540_retire")
;; Branch. Actually this latency time is not used by the scheduler. ;; Branch. Actually this latency time is not used by the scheduler.
(define_insn_reservation "ppc8540_branch" 1 (define_insn_reservation "ppc8540_branch" 1
(and (eq_attr "type" "jmpreg,branch") (and (eq_attr "type" "jmpreg,branch")
......
...@@ -46,6 +46,16 @@ ...@@ -46,6 +46,16 @@
(eq_attr "cpu" "mpccore")) (eq_attr "cpu" "mpccore"))
"iu_mpc") "iu_mpc")
(define_insn_reservation "mpccore-two" 1
(and (eq_attr "type" "two")
(eq_attr "cpu" "mpccore"))
"iu_mpc,iu_mpc")
(define_insn_reservation "mpccore-three" 1
(and (eq_attr "type" "three")
(eq_attr "cpu" "mpccore"))
"iu_mpc,iu_mpc,iu_mpc")
(define_insn_reservation "mpccore-imul" 2 (define_insn_reservation "mpccore-imul" 2
(and (eq_attr "type" "imul,imul2,imul3,imul_compare") (and (eq_attr "type" "imul,imul2,imul3,imul_compare")
(eq_attr "cpu" "mpccore")) (eq_attr "cpu" "mpccore"))
......
...@@ -183,6 +183,26 @@ ...@@ -183,6 +183,26 @@
(eq_attr "cpu" "power4")) (eq_attr "cpu" "power4"))
"iq_power4") "iq_power4")
(define_insn_reservation "power4-two" 2
(and (eq_attr "type" "two")
(eq_attr "cpu" "power4"))
"(du1_power4+du2_power4,iu1_power4,nothing,iu2_power4)\
|(du2_power4+du3_power4,iu2_power4,nothing,iu2_power4)\
|(du3_power4+du4_power4,iu2_power4,nothing,iu1_power4)\
|(du4_power4+du1_power4,iu1_power4,nothing,iu1_power4)")
(define_insn_reservation "power4-three" 2
(and (eq_attr "type" "three")
(eq_attr "cpu" "power4"))
"(du1_power4+du2_power4+du3_power4,\
iu1_power4,nothing,iu2_power4,nothing,iu2_power4)\
|(du2_power4+du3_power4+du4_power4,\
iu2_power4,nothing,iu2_power4,nothing,iu1_power4)\
|(du3_power4+du4_power4+du1_power4,\
iu2_power4,nothing,iu1_power4,nothing,iu1_power4)\
|(du4_power4+du1_power4+du2_power4,\
iu1_power4,nothing,iu2_power4,nothing,iu2_power4)")
(define_insn_reservation "power4-insert" 4 (define_insn_reservation "power4-insert" 4
(and (eq_attr "type" "insert_word") (and (eq_attr "type" "insert_word")
(eq_attr "cpu" "power4")) (eq_attr "cpu" "power4"))
......
...@@ -142,6 +142,26 @@ ...@@ -142,6 +142,26 @@
(eq_attr "cpu" "power5")) (eq_attr "cpu" "power5"))
"iq_power5") "iq_power5")
(define_insn_reservation "power5-two" 2
(and (eq_attr "type" "two")
(eq_attr "cpu" "power5"))
"(du1_power5+du2_power5,iu1_power5,nothing,iu2_power5)\
|(du2_power5+du3_power5,iu2_power5,nothing,iu2_power5)\
|(du3_power5+du4_power5,iu2_power5,nothing,iu1_power5)\
|(du4_power5+du1_power5,iu1_power5,nothing,iu1_power5)")
(define_insn_reservation "power5-three" 2
(and (eq_attr "type" "three")
(eq_attr "cpu" "power5"))
"(du1_power5+du2_power5+du3_power5,\
iu1_power5,nothing,iu2_power5,nothing,iu2_power5)\
|(du2_power5+du3_power5+du4_power5,\
iu2_power5,nothing,iu2_power5,nothing,iu1_power5)\
|(du3_power5+du4_power5+du1_power5,\
iu2_power5,nothing,iu1_power5,nothing,iu1_power5)\
|(du4_power5+du1_power5+du2_power5,\
iu1_power5,nothing,iu2_power5,nothing,iu2_power5)")
(define_insn_reservation "power5-insert" 4 (define_insn_reservation "power5-insert" 4
(and (eq_attr "type" "insert_word") (and (eq_attr "type" "insert_word")
(eq_attr "cpu" "power5")) (eq_attr "cpu" "power5"))
......
...@@ -55,6 +55,16 @@ ...@@ -55,6 +55,16 @@
(eq_attr "cpu" "rios1,ppc601")) (eq_attr "cpu" "rios1,ppc601"))
"iu_rios1") "iu_rios1")
(define_insn_reservation "rios1-two" 1
(and (eq_attr "type" "two")
(eq_attr "cpu" "rios1,ppc601"))
"iu_rios1,iu_rios1")
(define_insn_reservation "rios1-three" 1
(and (eq_attr "type" "three")
(eq_attr "cpu" "rios1,ppc601"))
"iu_rios1,iu_rios1,iu_rios1")
(define_insn_reservation "rios1-imul" 5 (define_insn_reservation "rios1-imul" 5
(and (eq_attr "type" "imul,imul_compare") (and (eq_attr "type" "imul,imul_compare")
(eq_attr "cpu" "rios1")) (eq_attr "cpu" "rios1"))
......
...@@ -43,6 +43,16 @@ ...@@ -43,6 +43,16 @@
(eq_attr "cpu" "rios2")) (eq_attr "cpu" "rios2"))
"iu1_rios2|iu2_rios2") "iu1_rios2|iu2_rios2")
(define_insn_reservation "rios2-two" 1
(and (eq_attr "type" "two")
(eq_attr "cpu" "rios2"))
"iu1_rios2|iu2_rios2,iu1_rios2|iu2_rios2")
(define_insn_reservation "rios2-three" 1
(and (eq_attr "type" "three")
(eq_attr "cpu" "rios2"))
"iu1_rios2|iu2_rios2,iu1_rios2|iu2_rios2,iu1_rios2|iu2_rios2")
(define_insn_reservation "rios2-imul" 2 (define_insn_reservation "rios2-imul" 2
(and (eq_attr "type" "imul,imul2,imul3,imul_compare") (and (eq_attr "type" "imul,imul2,imul3,imul_compare")
(eq_attr "cpu" "rios2")) (eq_attr "cpu" "rios2"))
......
...@@ -64,7 +64,7 @@ ...@@ -64,7 +64,7 @@
;; Define an insn type attribute. This is used in function unit delay ;; Define an insn type attribute. This is used in function unit delay
;; computations. ;; computations.
(define_attr "type" "integer,load,load_ext,load_ext_u,load_ext_ux,load_ux,load_u,store,store_ux,store_u,fpload,fpload_ux,fpload_u,fpstore,fpstore_ux,fpstore_u,vecload,vecstore,imul,imul2,imul3,lmul,idiv,ldiv,insert_word,branch,cmp,fast_compare,compare,delayed_compare,imul_compare,lmul_compare,fpcompare,cr_logical,delayed_cr,mfcr,mfcrf,mtcr,mfjmpr,mtjmpr,fp,fpsimple,dmul,sdiv,ddiv,ssqrt,dsqrt,jmpreg,brinc,vecsimple,veccomplex,vecdiv,veccmp,veccmpsimple,vecperm,vecfloat,vecfdiv" (define_attr "type" "integer,two,three,load,load_ext,load_ext_u,load_ext_ux,load_ux,load_u,store,store_ux,store_u,fpload,fpload_ux,fpload_u,fpstore,fpstore_ux,fpstore_u,vecload,vecstore,imul,imul2,imul3,lmul,idiv,ldiv,insert_word,branch,cmp,fast_compare,compare,delayed_compare,imul_compare,lmul_compare,fpcompare,cr_logical,delayed_cr,mfcr,mfcrf,mtcr,mfjmpr,mtjmpr,fp,fpsimple,dmul,sdiv,ddiv,ssqrt,dsqrt,jmpreg,brinc,vecsimple,veccomplex,vecdiv,veccmp,veccmpsimple,vecperm,vecfloat,vecfdiv"
(const_string "integer")) (const_string "integer"))
;; Length (in bytes). ;; Length (in bytes).
...@@ -1976,7 +1976,8 @@ ...@@ -1976,7 +1976,8 @@
(match_operand:SI 2 "exact_log2_cint_operand" "N")))] (match_operand:SI 2 "exact_log2_cint_operand" "N")))]
"" ""
"{srai|srawi} %0,%1,%p2\;{aze|addze} %0,%0" "{srai|srawi} %0,%1,%p2\;{aze|addze} %0,%0"
[(set_attr "length" "8")]) [(set_attr "type" "two")
(set_attr "length" "8")])
(define_insn "" (define_insn ""
[(set (match_operand:CC 0 "cc_reg_operand" "=x,?y") [(set (match_operand:CC 0 "cc_reg_operand" "=x,?y")
...@@ -5483,7 +5484,8 @@ ...@@ -5483,7 +5484,8 @@
? \"{a|addc} %0,%1,%2\;{ae|adde} %L0,%L1,%L2\" ? \"{a|addc} %0,%1,%2\;{ae|adde} %L0,%L1,%L2\"
: \"{ai|addic} %0,%1,%2\;{a%G2e|add%G2e} %L0,%L1\"; : \"{ai|addic} %0,%1,%2\;{a%G2e|add%G2e} %L0,%L1\";
}" }"
[(set_attr "length" "8")]) [(set_attr "type" "two")
(set_attr "length" "8")])
(define_insn "*subdi3_noppc64" (define_insn "*subdi3_noppc64"
[(set (match_operand:DI 0 "gpc_reg_operand" "=&r,&r,r,r,r") [(set (match_operand:DI 0 "gpc_reg_operand" "=&r,&r,r,r,r")
...@@ -5501,7 +5503,8 @@ ...@@ -5501,7 +5503,8 @@
? \"{sf|subfc} %0,%2,%1\;{sfe|subfe} %L0,%L2,%L1\" ? \"{sf|subfc} %0,%2,%1\;{sfe|subfe} %L0,%L2,%L1\"
: \"{sfi|subfic} %0,%2,%1\;{sf%G1e|subf%G1e} %L0,%L2\"; : \"{sfi|subfic} %0,%2,%1\;{sf%G1e|subf%G1e} %L0,%L2\";
}" }"
[(set_attr "length" "8")]) [(set_attr "type" "two")
(set_attr "length" "8")])
(define_insn "*negdi2_noppc64" (define_insn "*negdi2_noppc64"
[(set (match_operand:DI 0 "gpc_reg_operand" "=&r,r") [(set (match_operand:DI 0 "gpc_reg_operand" "=&r,r")
...@@ -5513,7 +5516,8 @@ ...@@ -5513,7 +5516,8 @@
? \"{sfi|subfic} %L0,%L1,0\;{sfze|subfze} %0,%1\" ? \"{sfi|subfic} %L0,%L1,0\;{sfze|subfze} %0,%1\"
: \"{sfi|subfic} %0,%1,0\;{sfze|subfze} %L0,%L1\"; : \"{sfi|subfic} %0,%1,0\;{sfze|subfze} %L0,%L1\";
}" }"
[(set_attr "length" "8")]) [(set_attr "type" "two")
(set_attr "length" "8")])
(define_expand "mulsidi3" (define_expand "mulsidi3"
[(set (match_operand:DI 0 "gpc_reg_operand" "") [(set (match_operand:DI 0 "gpc_reg_operand" "")
...@@ -5796,7 +5800,8 @@ ...@@ -5796,7 +5800,8 @@
"@ "@
{srai|srawi} %0,%1,31\;{srai|srawi} %L0,%1,%h2 {srai|srawi} %0,%1,31\;{srai|srawi} %L0,%1,%h2
{sri|srwi} %L0,%L1,%h2\;insrwi %L0,%1,%h2,0\;{srai|srawi} %0,%1,%h2" {sri|srwi} %L0,%L1,%h2\;insrwi %L0,%1,%h2,0\;{srai|srawi} %0,%1,%h2"
[(set_attr "length" "8,12")]) [(set_attr "type" "two,three")
(set_attr "length" "8,12")])
(define_insn "*ashrdisi3_noppc64" (define_insn "*ashrdisi3_noppc64"
[(set (match_operand:SI 0 "gpc_reg_operand" "=r") [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
...@@ -6353,7 +6358,8 @@ ...@@ -6353,7 +6358,8 @@
(match_operand:DI 2 "exact_log2_cint_operand" "N")))] (match_operand:DI 2 "exact_log2_cint_operand" "N")))]
"TARGET_POWERPC64" "TARGET_POWERPC64"
"sradi %0,%1,%p2\;addze %0,%0" "sradi %0,%1,%p2\;addze %0,%0"
[(set_attr "length" "8")]) [(set_attr "type" "two")
(set_attr "length" "8")])
(define_insn "" (define_insn ""
[(set (match_operand:CC 0 "cc_reg_operand" "=x,?y") [(set (match_operand:CC 0 "cc_reg_operand" "=x,?y")
...@@ -6812,8 +6818,7 @@ ...@@ -6812,8 +6818,7 @@
(ashift:DI (match_operand:DI 1 "gpc_reg_operand" "r") (ashift:DI (match_operand:DI 1 "gpc_reg_operand" "r")
(match_operand:SI 2 "reg_or_cint_operand" "ri")))] (match_operand:SI 2 "reg_or_cint_operand" "ri")))]
"TARGET_POWERPC64" "TARGET_POWERPC64"
"sld%I2 %0,%1,%H2" "sld%I2 %0,%1,%H2")
[(set_attr "length" "8")])
(define_insn "*ashldi3_internal2" (define_insn "*ashldi3_internal2"
[(set (match_operand:CC 0 "cc_reg_operand" "=x,?y") [(set (match_operand:CC 0 "cc_reg_operand" "=x,?y")
...@@ -8184,7 +8189,7 @@ ...@@ -8184,7 +8189,7 @@
return \"#\"; return \"#\";
} }
}" }"
[(set_attr "type" "*,load,store,fp,fpload,fpstore,*,*,*") [(set_attr "type" "two,load,store,fp,fpload,fpstore,*,*,*")
(set_attr "length" "8,16,16,4,4,4,8,12,16")]) (set_attr "length" "8,16,16,4,4,4,8,12,16")])
(define_insn "*movdf_softfloat32" (define_insn "*movdf_softfloat32"
...@@ -8225,7 +8230,7 @@ ...@@ -8225,7 +8230,7 @@
return \"#\"; return \"#\";
} }
}" }"
[(set_attr "type" "*,load,store,*,*,*") [(set_attr "type" "two,load,store,*,*,*")
(set_attr "length" "8,8,8,8,12,16")]) (set_attr "length" "8,8,8,8,12,16")])
; ld/std require word-aligned displacements -> 'Y' constraint. ; ld/std require word-aligned displacements -> 'Y' constraint.
...@@ -11558,7 +11563,8 @@ ...@@ -11558,7 +11563,8 @@
{xoril|xori} %0,%1,%b2\;{sfi|subfic} %3,%0,0\;{ae|adde} %0,%3,%0 {xoril|xori} %0,%1,%b2\;{sfi|subfic} %3,%0,0\;{ae|adde} %0,%3,%0
{xoriu|xoris} %0,%1,%u2\;{sfi|subfic} %3,%0,0\;{ae|adde} %0,%3,%0 {xoriu|xoris} %0,%1,%u2\;{sfi|subfic} %3,%0,0\;{ae|adde} %0,%3,%0
{sfi|subfic} %0,%1,%2\;{sfi|subfic} %3,%0,0\;{ae|adde} %0,%3,%0" {sfi|subfic} %0,%1,%2\;{sfi|subfic} %3,%0,0\;{ae|adde} %0,%3,%0"
[(set_attr "length" "12,8,12,12,12")]) [(set_attr "type" "three,two,three,three,three")
(set_attr "length" "12,8,12,12,12")])
(define_insn "" (define_insn ""
[(set (match_operand:DI 0 "gpc_reg_operand" "=r,r,r,r,r") [(set (match_operand:DI 0 "gpc_reg_operand" "=r,r,r,r,r")
...@@ -11572,7 +11578,8 @@ ...@@ -11572,7 +11578,8 @@
xori %0,%1,%b2\;subfic %3,%0,0\;adde %0,%3,%0 xori %0,%1,%b2\;subfic %3,%0,0\;adde %0,%3,%0
xoris %0,%1,%u2\;subfic %3,%0,0\;adde %0,%3,%0 xoris %0,%1,%u2\;subfic %3,%0,0\;adde %0,%3,%0
subfic %0,%1,%2\;subfic %3,%0,0\;adde %0,%3,%0" subfic %0,%1,%2\;subfic %3,%0,0\;adde %0,%3,%0"
[(set_attr "length" "12,8,12,12,12")]) [(set_attr "type" "three,two,three,three,three")
(set_attr "length" "12,8,12,12,12")])
(define_insn "" (define_insn ""
[(set (match_operand:CC 4 "cc_reg_operand" "=x,x,x,x,x,?y,?y,?y,?y,?y") [(set (match_operand:CC 4 "cc_reg_operand" "=x,x,x,x,x,?y,?y,?y,?y,?y")
...@@ -11685,7 +11692,8 @@ ...@@ -11685,7 +11692,8 @@
{xoril|xori} %0,%1,%b2\;{sfi|subfic} %0,%0,0\;{aze|addze} %0,%3 {xoril|xori} %0,%1,%b2\;{sfi|subfic} %0,%0,0\;{aze|addze} %0,%3
{xoriu|xoris} %0,%1,%u2\;{sfi|subfic} %0,%0,0\;{aze|addze} %0,%3 {xoriu|xoris} %0,%1,%u2\;{sfi|subfic} %0,%0,0\;{aze|addze} %0,%3
{sfi|subfic} %0,%1,%2\;{sfi|subfic} %0,%0,0\;{aze|addze} %0,%3" {sfi|subfic} %0,%1,%2\;{sfi|subfic} %0,%0,0\;{aze|addze} %0,%3"
[(set_attr "length" "12,8,12,12,12")]) [(set_attr "type" "three,two,three,three,three")
(set_attr "length" "12,8,12,12,12")])
(define_insn "" (define_insn ""
[(set (match_operand:CC 0 "cc_reg_operand" "=x,x,x,x,x,?y,?y,?y,?y,?y") [(set (match_operand:CC 0 "cc_reg_operand" "=x,x,x,x,x,?y,?y,?y,?y,?y")
...@@ -11784,7 +11792,8 @@ ...@@ -11784,7 +11792,8 @@
{xoril|xori} %0,%1,%b2\;{ai|addic} %0,%0,-1\;{sfe|subfe} %0,%0,%0 {xoril|xori} %0,%1,%b2\;{ai|addic} %0,%0,-1\;{sfe|subfe} %0,%0,%0
{xoriu|xoris} %0,%1,%u2\;{ai|addic} %0,%0,-1\;{sfe|subfe} %0,%0,%0 {xoriu|xoris} %0,%1,%u2\;{ai|addic} %0,%0,-1\;{sfe|subfe} %0,%0,%0
{sfi|subfic} %0,%1,%2\;{ai|addic} %0,%0,-1\;{sfe|subfe} %0,%0,%0" {sfi|subfic} %0,%1,%2\;{ai|addic} %0,%0,-1\;{sfe|subfe} %0,%0,%0"
[(set_attr "length" "12,8,12,12,12")]) [(set_attr "type" "three,two,three,three,three")
(set_attr "length" "12,8,12,12,12")])
;; Simplify (ne X (const_int 0)) on the PowerPC. No need to on the Power, ;; Simplify (ne X (const_int 0)) on the PowerPC. No need to on the Power,
;; since it nabs/sr is just as fast. ;; since it nabs/sr is just as fast.
...@@ -11795,7 +11804,8 @@ ...@@ -11795,7 +11804,8 @@
(clobber (match_scratch:SI 2 "=&r"))] (clobber (match_scratch:SI 2 "=&r"))]
"! TARGET_POWER && TARGET_32BIT && !TARGET_ISEL" "! TARGET_POWER && TARGET_32BIT && !TARGET_ISEL"
"{ai|addic} %2,%1,-1\;{sfe|subfe} %0,%2,%1" "{ai|addic} %2,%1,-1\;{sfe|subfe} %0,%2,%1"
[(set_attr "length" "8")]) [(set_attr "type" "two")
(set_attr "length" "8")])
(define_insn "" (define_insn ""
[(set (match_operand:DI 0 "gpc_reg_operand" "=r") [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
...@@ -11804,7 +11814,8 @@ ...@@ -11804,7 +11814,8 @@
(clobber (match_scratch:DI 2 "=&r"))] (clobber (match_scratch:DI 2 "=&r"))]
"TARGET_64BIT" "TARGET_64BIT"
"addic %2,%1,-1\;subfe %0,%2,%1" "addic %2,%1,-1\;subfe %0,%2,%1"
[(set_attr "length" "8")]) [(set_attr "type" "two")
(set_attr "length" "8")])
;; This is what (plus (ne X (const_int 0)) Y) looks like. ;; This is what (plus (ne X (const_int 0)) Y) looks like.
(define_insn "" (define_insn ""
...@@ -11816,7 +11827,8 @@ ...@@ -11816,7 +11827,8 @@
(clobber (match_scratch:SI 3 "=&r"))] (clobber (match_scratch:SI 3 "=&r"))]
"TARGET_32BIT" "TARGET_32BIT"
"{ai|addic} %3,%1,-1\;{aze|addze} %0,%2" "{ai|addic} %3,%1,-1\;{aze|addze} %0,%2"
[(set_attr "length" "8")]) [(set_attr "type" "two")
(set_attr "length" "8")])
(define_insn "" (define_insn ""
[(set (match_operand:DI 0 "gpc_reg_operand" "=r") [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
...@@ -11827,7 +11839,8 @@ ...@@ -11827,7 +11839,8 @@
(clobber (match_scratch:DI 3 "=&r"))] (clobber (match_scratch:DI 3 "=&r"))]
"TARGET_64BIT" "TARGET_64BIT"
"addic %3,%1,-1\;addze %0,%2" "addic %3,%1,-1\;addze %0,%2"
[(set_attr "length" "8")]) [(set_attr "type" "two")
(set_attr "length" "8")])
(define_insn "" (define_insn ""
[(set (match_operand:CC 0 "cc_reg_operand" "=x,?y") [(set (match_operand:CC 0 "cc_reg_operand" "=x,?y")
...@@ -12127,7 +12140,8 @@ ...@@ -12127,7 +12140,8 @@
(match_operand:SI 2 "reg_or_short_operand" "rI")))] (match_operand:SI 2 "reg_or_short_operand" "rI")))]
"TARGET_32BIT" "TARGET_32BIT"
"{sf%I2|subf%I2c} %0,%1,%2\;{cal %0,0(0)|li %0,0}\;{ae|adde} %0,%0,%0" "{sf%I2|subf%I2c} %0,%1,%2\;{cal %0,0(0)|li %0,0}\;{ae|adde} %0,%0,%0"
[(set_attr "length" "12")]) [(set_attr "type" "three")
(set_attr "length" "12")])
(define_insn "" (define_insn ""
[(set (match_operand:DI 0 "gpc_reg_operand" "=r") [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
...@@ -12135,7 +12149,8 @@ ...@@ -12135,7 +12149,8 @@
(match_operand:DI 2 "reg_or_short_operand" "rI")))] (match_operand:DI 2 "reg_or_short_operand" "rI")))]
"TARGET_64BIT" "TARGET_64BIT"
"subf%I2c %0,%1,%2\;li %0,0\;adde %0,%0,%0" "subf%I2c %0,%1,%2\;li %0,0\;adde %0,%0,%0"
[(set_attr "length" "12")]) [(set_attr "type" "three")
(set_attr "length" "12")])
(define_insn "" (define_insn ""
[(set (match_operand:CC 3 "cc_reg_operand" "=x,?y") [(set (match_operand:CC 3 "cc_reg_operand" "=x,?y")
...@@ -12206,7 +12221,8 @@ ...@@ -12206,7 +12221,8 @@
(match_operand:SI 3 "gpc_reg_operand" "r")))] (match_operand:SI 3 "gpc_reg_operand" "r")))]
"TARGET_32BIT" "TARGET_32BIT"
"{sf%I2|subf%I2c} %0,%1,%2\;{aze|addze} %0,%3" "{sf%I2|subf%I2c} %0,%1,%2\;{aze|addze} %0,%3"
[(set_attr "length" "8")]) [(set_attr "type" "two")
(set_attr "length" "8")])
(define_insn "" (define_insn ""
[(set (match_operand:CC 0 "cc_reg_operand" "=x,?y") [(set (match_operand:CC 0 "cc_reg_operand" "=x,?y")
...@@ -12279,7 +12295,8 @@ ...@@ -12279,7 +12295,8 @@
(match_operand:SI 2 "reg_or_short_operand" "rI"))))] (match_operand:SI 2 "reg_or_short_operand" "rI"))))]
"TARGET_32BIT" "TARGET_32BIT"
"{sf%I2|subf%I2c} %0,%1,%2\;{sfe|subfe} %0,%0,%0\;nand %0,%0,%0" "{sf%I2|subf%I2c} %0,%1,%2\;{sfe|subfe} %0,%0,%0\;nand %0,%0,%0"
[(set_attr "length" "12")]) [(set_attr "type" "three")
(set_attr "length" "12")])
(define_insn "" (define_insn ""
[(set (match_operand:SI 0 "gpc_reg_operand" "=&r") [(set (match_operand:SI 0 "gpc_reg_operand" "=&r")
...@@ -12289,7 +12306,8 @@ ...@@ -12289,7 +12306,8 @@
(match_operand:SI 3 "gpc_reg_operand" "r")))] (match_operand:SI 3 "gpc_reg_operand" "r")))]
"TARGET_32BIT" "TARGET_32BIT"
"{sf%I2|subf%I2c} %0,%1,%2\;{sfe|subfe} %0,%0,%0\;andc %0,%3,%0" "{sf%I2|subf%I2c} %0,%1,%2\;{sfe|subfe} %0,%0,%0\;andc %0,%3,%0"
[(set_attr "length" "12")]) [(set_attr "type" "three")
(set_attr "length" "12")])
(define_insn "" (define_insn ""
[(set (match_operand:CC 0 "cc_reg_operand" "=x,?y") [(set (match_operand:CC 0 "cc_reg_operand" "=x,?y")
...@@ -12638,7 +12656,7 @@ ...@@ -12638,7 +12656,7 @@
"@ "@
{sf|subfc} %0,%2,%1\;{sfe|subfe} %0,%0,%0 {sf|subfc} %0,%2,%1\;{sfe|subfe} %0,%0,%0
{ai|addic} %0,%1,%n2\;{sfe|subfe} %0,%0,%0" {ai|addic} %0,%1,%n2\;{sfe|subfe} %0,%0,%0"
[(set_attr "type" "insert_word") [(set_attr "type" "two")
(set_attr "length" "8")]) (set_attr "length" "8")])
(define_insn "" (define_insn ""
...@@ -12649,7 +12667,7 @@ ...@@ -12649,7 +12667,7 @@
"@ "@
{sf|subfc} %0,%2,%1\;{sfe|subfe} %0,%0,%0 {sf|subfc} %0,%2,%1\;{sfe|subfe} %0,%0,%0
{ai|addic} %0,%1,%n2\;{sfe|subfe} %0,%0,%0" {ai|addic} %0,%1,%n2\;{sfe|subfe} %0,%0,%0"
[(set_attr "type" "insert_word") [(set_attr "type" "two")
(set_attr "length" "8")]) (set_attr "length" "8")])
(define_insn "" (define_insn ""
...@@ -12785,7 +12803,8 @@ ...@@ -12785,7 +12803,8 @@
"@ "@
{sf|subfc} %0,%2,%1\;{cal %0,0(0)|li %0,0}\;{ae|adde} %0,%0,%0 {sf|subfc} %0,%2,%1\;{cal %0,0(0)|li %0,0}\;{ae|adde} %0,%0,%0
{ai|addic} %0,%1,%n2\;{cal %0,0(0)|li %0,0}\;{ae|adde} %0,%0,%0" {ai|addic} %0,%1,%n2\;{cal %0,0(0)|li %0,0}\;{ae|adde} %0,%0,%0"
[(set_attr "length" "12")]) [(set_attr "type" "three")
(set_attr "length" "12")])
(define_insn "" (define_insn ""
[(set (match_operand:DI 0 "gpc_reg_operand" "=r,r") [(set (match_operand:DI 0 "gpc_reg_operand" "=r,r")
...@@ -12795,7 +12814,8 @@ ...@@ -12795,7 +12814,8 @@
"@ "@
subfc %0,%2,%1\;li %0,0\;adde %0,%0,%0 subfc %0,%2,%1\;li %0,0\;adde %0,%0,%0
addic %0,%1,%n2\;li %0,0\;adde %0,%0,%0" addic %0,%1,%n2\;li %0,0\;adde %0,%0,%0"
[(set_attr "length" "12")]) [(set_attr "type" "three")
(set_attr "length" "12")])
(define_insn "" (define_insn ""
[(set (match_operand:CC 3 "cc_reg_operand" "=x,x,?y,?y") [(set (match_operand:CC 3 "cc_reg_operand" "=x,x,?y,?y")
...@@ -12872,7 +12892,8 @@ ...@@ -12872,7 +12892,8 @@
"@ "@
{sf|subfc} %0,%2,%1\;{aze|addze} %0,%3 {sf|subfc} %0,%2,%1\;{aze|addze} %0,%3
{ai|addic} %0,%1,%n2\;{aze|addze} %0,%3" {ai|addic} %0,%1,%n2\;{aze|addze} %0,%3"
[(set_attr "length" "8")]) [(set_attr "type" "two")
(set_attr "length" "8")])
(define_insn "" (define_insn ""
[(set (match_operand:CC 0 "cc_reg_operand" "=x,x,?y,?y") [(set (match_operand:CC 0 "cc_reg_operand" "=x,x,?y,?y")
...@@ -12951,7 +12972,8 @@ ...@@ -12951,7 +12972,8 @@
"@ "@
{sf|subfc} %0,%2,%1\;{sfe|subfe} %0,%0,%0\;nand %0,%0,%0 {sf|subfc} %0,%2,%1\;{sfe|subfe} %0,%0,%0\;nand %0,%0,%0
{sfi|subfic} %0,%1,-1\;{a%I2|add%I2c} %0,%0,%2\;{sfe|subfe} %0,%0,%0" {sfi|subfic} %0,%1,-1\;{a%I2|add%I2c} %0,%0,%2\;{sfe|subfe} %0,%0,%0"
[(set_attr "length" "12")]) [(set_attr "type" "three")
(set_attr "length" "12")])
(define_insn "" (define_insn ""
[(set (match_operand:SI 0 "gpc_reg_operand" "=&r,&r") [(set (match_operand:SI 0 "gpc_reg_operand" "=&r,&r")
...@@ -12963,7 +12985,8 @@ ...@@ -12963,7 +12985,8 @@
"@ "@
{sf|subfc} %0,%2,%1\;{sfe|subfe} %0,%0,%0\;andc %0,%3,%0 {sf|subfc} %0,%2,%1\;{sfe|subfe} %0,%0,%0\;andc %0,%3,%0
{ai|addic} %0,%1,%n2\;{sfe|subfe} %0,%0,%0\;andc %0,%3,%0" {ai|addic} %0,%1,%n2\;{sfe|subfe} %0,%0,%0\;andc %0,%3,%0"
[(set_attr "length" "12")]) [(set_attr "type" "three")
(set_attr "length" "12")])
(define_insn "" (define_insn ""
[(set (match_operand:CC 0 "cc_reg_operand" "=x,x,?y,?y") [(set (match_operand:CC 0 "cc_reg_operand" "=x,x,?y,?y")
...@@ -13044,7 +13067,8 @@ ...@@ -13044,7 +13067,8 @@
(const_int 0)))] (const_int 0)))]
"TARGET_32BIT" "TARGET_32BIT"
"{sfi|subfic} %0,%1,0\;{ame|addme} %0,%0\;{sri|srwi} %0,%0,31" "{sfi|subfic} %0,%1,0\;{ame|addme} %0,%0\;{sri|srwi} %0,%0,31"
[(set_attr "length" "12")]) [(set_attr "type" "three")
(set_attr "length" "12")])
(define_insn "" (define_insn ""
[(set (match_operand:DI 0 "gpc_reg_operand" "=r") [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
...@@ -13052,7 +13076,8 @@ ...@@ -13052,7 +13076,8 @@
(const_int 0)))] (const_int 0)))]
"TARGET_64BIT" "TARGET_64BIT"
"subfic %0,%1,0\;addme %0,%0\;srdi %0,%0,63" "subfic %0,%1,0\;addme %0,%0\;srdi %0,%0,63"
[(set_attr "length" "12")]) [(set_attr "type" "three")
(set_attr "length" "12")])
(define_insn "" (define_insn ""
[(set (match_operand:CC 2 "cc_reg_operand" "=x,?y") [(set (match_operand:CC 2 "cc_reg_operand" "=x,?y")
...@@ -13162,7 +13187,8 @@ ...@@ -13162,7 +13187,8 @@
(match_operand:SI 2 "gpc_reg_operand" "r")))] (match_operand:SI 2 "gpc_reg_operand" "r")))]
"TARGET_32BIT" "TARGET_32BIT"
"{a|addc} %0,%1,%1\;{sfe|subfe} %0,%1,%0\;{aze|addze} %0,%2" "{a|addc} %0,%1,%1\;{sfe|subfe} %0,%1,%0\;{aze|addze} %0,%2"
[(set_attr "length" "12")]) [(set_attr "type" "three")
(set_attr "length" "12")])
(define_insn "" (define_insn ""
[(set (match_operand:DI 0 "gpc_reg_operand" "=&r") [(set (match_operand:DI 0 "gpc_reg_operand" "=&r")
...@@ -13171,7 +13197,8 @@ ...@@ -13171,7 +13197,8 @@
(match_operand:DI 2 "gpc_reg_operand" "r")))] (match_operand:DI 2 "gpc_reg_operand" "r")))]
"TARGET_64BIT" "TARGET_64BIT"
"addc %0,%1,%1\;subfe %0,%1,%0\;addze %0,%2" "addc %0,%1,%1\;subfe %0,%1,%0\;addze %0,%2"
[(set_attr "length" "12")]) [(set_attr "type" "three")
(set_attr "length" "12")])
(define_insn "" (define_insn ""
[(set (match_operand:CC 0 "cc_reg_operand" "=x,?y") [(set (match_operand:CC 0 "cc_reg_operand" "=x,?y")
...@@ -13382,7 +13409,8 @@ ...@@ -13382,7 +13409,8 @@
(const_int 0))))] (const_int 0))))]
"TARGET_32BIT" "TARGET_32BIT"
"{sfi|subfic} %0,%1,0\;{ame|addme} %0,%0\;{srai|srawi} %0,%0,31" "{sfi|subfic} %0,%1,0\;{ame|addme} %0,%0\;{srai|srawi} %0,%0,31"
[(set_attr "length" "12")]) [(set_attr "type" "three")
(set_attr "length" "12")])
(define_insn "" (define_insn ""
[(set (match_operand:DI 0 "gpc_reg_operand" "=r") [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
...@@ -13390,7 +13418,8 @@ ...@@ -13390,7 +13418,8 @@
(const_int 0))))] (const_int 0))))]
"TARGET_64BIT" "TARGET_64BIT"
"subfic %0,%1,0\;addme %0,%0\;sradi %0,%0,63" "subfic %0,%1,0\;addme %0,%0\;sradi %0,%0,63"
[(set_attr "length" "12")]) [(set_attr "type" "three")
(set_attr "length" "12")])
(define_insn "" (define_insn ""
[(set (match_operand:SI 0 "gpc_reg_operand" "=r") [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
...@@ -13652,7 +13681,7 @@ ...@@ -13652,7 +13681,7 @@
(match_operand:SI 2 "reg_or_short_operand" "rI"))))] (match_operand:SI 2 "reg_or_short_operand" "rI"))))]
"TARGET_32BIT" "TARGET_32BIT"
"{sf%I2|subf%I2c} %0,%1,%2\;{sfe|subfe} %0,%0,%0" "{sf%I2|subf%I2c} %0,%1,%2\;{sfe|subfe} %0,%0,%0"
[(set_attr "type" "insert_word") [(set_attr "type" "two")
(set_attr "length" "8")]) (set_attr "length" "8")])
(define_insn "" (define_insn ""
...@@ -13661,7 +13690,7 @@ ...@@ -13661,7 +13690,7 @@
(match_operand:DI 2 "reg_or_short_operand" "rI"))))] (match_operand:DI 2 "reg_or_short_operand" "rI"))))]
"TARGET_64BIT" "TARGET_64BIT"
"subf%I2c %0,%1,%2\;subfe %0,%0,%0" "subf%I2c %0,%1,%2\;subfe %0,%0,%0"
[(set_attr "type" "insert_word") [(set_attr "type" "two")
(set_attr "length" "8")]) (set_attr "length" "8")])
;; Define both directions of branch and return. If we need a reload ;; Define both directions of branch and return. If we need a reload
......
...@@ -46,6 +46,16 @@ ...@@ -46,6 +46,16 @@
(eq_attr "cpu" "rs64a")) (eq_attr "cpu" "rs64a"))
"iu_rs64") "iu_rs64")
(define_insn_reservation "rs64a-two" 1
(and (eq_attr "type" "two")
(eq_attr "cpu" "rs64a"))
"iu_rs64,iu_rs64")
(define_insn_reservation "rs64a-three" 1
(and (eq_attr "type" "three")
(eq_attr "cpu" "rs64a"))
"iu_rs64,iu_rs64,iu_rs64")
(define_insn_reservation "rs64a-imul" 20 (define_insn_reservation "rs64a-imul" 20
(and (eq_attr "type" "imul,imul_compare") (and (eq_attr "type" "imul,imul_compare")
(eq_attr "cpu" "rs64a")) (eq_attr "cpu" "rs64a"))
......
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