1 ;; DFA-based pipeline description for 5400
2 (define_automaton "vr54")
3 (define_cpu_unit "vr54_dp0" "vr54")
4 (define_cpu_unit "vr54_dp1" "vr54")
5 (define_cpu_unit "vr54_mem" "vr54")
6 (define_cpu_unit "vr54_mac" "vr54")
9 ;; The ordering of the instruction-execution-path/resource-usage
10 ;; descriptions (also known as reservation RTL) is roughly ordered
11 ;; based on the define attribute RTL for the "type" classification.
12 ;; When modifying, remember that the first test that matches is the
16 (define_insn_reservation "ir_vr54_unknown" 1
17 (and (eq_attr "cpu" "r5400")
18 (eq_attr "type" "unknown"))
19 "vr54_dp0+vr54_dp1+vr54_mem+vr54_mac")
21 ;; Assume prediction fails.
22 (define_insn_reservation "ir_vr54_branch" 3
23 (and (eq_attr "cpu" "r5400")
24 (eq_attr "type" "branch,jump,call"))
27 (define_insn_reservation "ir_vr54_load" 2
28 (and (eq_attr "cpu" "r5400")
29 (eq_attr "type" "load,fpload,fpidxload"))
32 (define_insn_reservation "ir_vr54_store" 1
33 (and (eq_attr "cpu" "r5400")
34 (eq_attr "type" "store"))
37 (define_insn_reservation "ir_vr54_fstore" 1
38 (and (eq_attr "cpu" "r5400")
39 (eq_attr "type" "fpstore,fpidxstore"))
43 ;; This reservation is for conditional move based on integer
44 ;; or floating point CC.
45 (define_insn_reservation "ir_vr54_condmove" 4
46 (and (eq_attr "cpu" "r5400")
47 (eq_attr "type" "condmove"))
50 ;; Move to/from FPU registers
51 (define_insn_reservation "ir_vr54_xfer" 2
52 (and (eq_attr "cpu" "r5400")
53 (eq_attr "type" "xfer"))
56 (define_insn_reservation "ir_vr54_hilo" 1
57 (and (eq_attr "cpu" "r5400")
58 (eq_attr "type" "mthilo,mfhilo"))
61 (define_insn_reservation "ir_vr54_arith" 1
62 (and (eq_attr "cpu" "r5400")
63 (eq_attr "type" "arith,shift,slt,clz,const,nop,trap"))
66 (define_insn_reservation "ir_vr54_imul_si" 3
67 (and (eq_attr "cpu" "r5400")
68 (and (eq_attr "type" "imul,imul3")
69 (eq_attr "mode" "SI")))
72 (define_insn_reservation "ir_vr54_imul_di" 4
73 (and (eq_attr "cpu" "r5400")
74 (and (eq_attr "type" "imul,imul3")
75 (eq_attr "mode" "DI")))
78 (define_insn_reservation "ir_vr54_imadd_si" 3
79 (and (eq_attr "cpu" "r5400")
80 (eq_attr "type" "imul,imul3"))
83 (define_insn_reservation "ir_vr54_idiv_si" 42
84 (and (eq_attr "cpu" "r5400")
85 (and (eq_attr "type" "idiv")
86 (eq_attr "mode" "SI")))
89 (define_insn_reservation "ir_vr54_idiv_di" 74
90 (and (eq_attr "cpu" "r5400")
91 (and (eq_attr "type" "idiv")
92 (eq_attr "mode" "DI")))
95 (define_insn_reservation "ir_vr54_fadd" 4
96 (and (eq_attr "cpu" "r5400")
97 (eq_attr "type" "fadd"))
100 (define_insn_reservation "ir_vr54_fmul_sf" 5
101 (and (eq_attr "cpu" "r5400")
102 (and (eq_attr "type" "fmul")
103 (eq_attr "mode" "SF")))
106 (define_insn_reservation "ir_vr54_fmul_df" 6
107 (and (eq_attr "cpu" "r5400")
108 (and (eq_attr "type" "fmul")
109 (eq_attr "mode" "DF")))
112 (define_insn_reservation "ir_vr54_fmadd_sf" 9
113 (and (eq_attr "cpu" "r5400")
114 (and (eq_attr "type" "fmadd")
115 (eq_attr "mode" "SF")))
118 (define_insn_reservation "ir_vr54_fmadd_df" 10
119 (and (eq_attr "cpu" "r5400")
120 (and (eq_attr "type" "fmadd")
121 (eq_attr "mode" "DF")))
124 (define_insn_reservation "ir_vr54_fdiv_sf" 42
125 (and (eq_attr "cpu" "r5400")
126 (and (eq_attr "type" "fdiv,frdiv,fsqrt")
127 (eq_attr "mode" "SF")))
130 (define_insn_reservation "ir_vr54_fdiv_df" 72
131 (and (eq_attr "cpu" "r5400")
132 (and (eq_attr "type" "fdiv,frdiv,fsqrt")
133 (eq_attr "mode" "DF")))
136 (define_insn_reservation "ir_vr54_fabs" 2
137 (and (eq_attr "cpu" "r5400")
138 (eq_attr "type" "fabs,fneg,fmove"))
141 (define_insn_reservation "ir_vr54_fcmp" 2
142 (and (eq_attr "cpu" "r5400")
143 (eq_attr "type" "fcmp"))
146 (define_insn_reservation "ir_vr54_fcvt" 6
147 (and (eq_attr "cpu" "r5400")
148 (eq_attr "type" "fcvt"))
151 (define_insn_reservation "ir_vr54_frsqrt_sf" 61
152 (and (eq_attr "cpu" "r5400")
153 (and (eq_attr "type" "frsqrt")
154 (eq_attr "mode" "SF")))
157 (define_insn_reservation "ir_vr54_frsqrt_df" 121
158 (and (eq_attr "cpu" "r5400")
159 (and (eq_attr "type" "frsqrt")
160 (eq_attr "mode" "DF")))
163 (define_insn_reservation "ir_vr54_multi" 1
164 (and (eq_attr "cpu" "r5400")
165 (eq_attr "type" "multi"))
166 "vr54_dp0+vr54_dp1+vr54_mem+vr54_mac")