power10.md revision 1.1.1.2 1 1.1.1.2 mrg ;; Scheduling description for the IBM POWER10 processor.
2 1.1.1.2 mrg ;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
3 1.1 mrg ;;
4 1.1.1.2 mrg ;; Contributed by Pat Haugen (pthaugen (a] us.ibm.com).
5 1.1 mrg
6 1.1 mrg ;; This file is part of GCC.
7 1.1 mrg ;;
8 1.1 mrg ;; GCC is free software; you can redistribute it and/or modify it
9 1.1 mrg ;; under the terms of the GNU General Public License as published
10 1.1 mrg ;; by the Free Software Foundation; either version 3, or (at your
11 1.1 mrg ;; option) any later version.
12 1.1 mrg ;;
13 1.1 mrg ;; GCC is distributed in the hope that it will be useful, but WITHOUT
14 1.1 mrg ;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
15 1.1 mrg ;; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
16 1.1 mrg ;; License for more details.
17 1.1 mrg ;;
18 1.1 mrg ;; You should have received a copy of the GNU General Public License
19 1.1 mrg ;; along with GCC; see the file COPYING3. If not see
20 1.1 mrg ;; <http://www.gnu.org/licenses/>.
21 1.1 mrg
22 1.1.1.2 mrg ; For Power10 we model (and try to pack) the in-order decode/dispatch groups
23 1.1.1.2 mrg ; which consist of 8 instructions max. We do not try to model the details of
24 1.1.1.2 mrg ; the out-of-order issue queues and how insns flow to the various execution
25 1.1.1.2 mrg ; units except for the simple representation of the issue limitation of at
26 1.1.1.2 mrg ; most 4 insns to the execution units/2 insns to the load units/2 insns to
27 1.1.1.2 mrg ; the store units.
28 1.1.1.2 mrg (define_automaton "power10dispatch,power10issue")
29 1.1.1.2 mrg
30 1.1.1.2 mrg ; Decode/dispatch slots
31 1.1.1.2 mrg (define_cpu_unit "du0_power10,du1_power10,du2_power10,du3_power10,
32 1.1.1.2 mrg du4_power10,du5_power10,du6_power10,du7_power10" "power10dispatch")
33 1.1.1.2 mrg
34 1.1.1.2 mrg ; Four execution units
35 1.1.1.2 mrg (define_cpu_unit "exu0_power10,exu1_power10,exu2_power10,exu3_power10"
36 1.1.1.2 mrg "power10issue")
37 1.1.1.2 mrg ; Two load units and two store units
38 1.1.1.2 mrg (define_cpu_unit "lu0_power10,lu1_power10" "power10issue")
39 1.1.1.2 mrg (define_cpu_unit "stu0_power10,stu1_power10" "power10issue")
40 1.1.1.2 mrg
41 1.1.1.2 mrg
42 1.1.1.2 mrg ; Dispatch slots are allocated in order conforming to program order.
43 1.1.1.2 mrg (absence_set "du0_power10" "du1_power10,du2_power10,du3_power10,du4_power10,\
44 1.1.1.2 mrg du5_power10,du6_power10,du7_power10")
45 1.1.1.2 mrg (absence_set "du1_power10" "du2_power10,du3_power10,du4_power10,du5_power10,\
46 1.1.1.2 mrg du6_power10,du7_power10")
47 1.1.1.2 mrg (absence_set "du2_power10" "du3_power10,du4_power10,du5_power10,du6_power10,\
48 1.1.1.2 mrg du7_power10")
49 1.1.1.2 mrg (absence_set "du3_power10" "du4_power10,du5_power10,du6_power10,du7_power10")
50 1.1.1.2 mrg (absence_set "du4_power10" "du5_power10,du6_power10,du7_power10")
51 1.1.1.2 mrg (absence_set "du5_power10" "du6_power10,du7_power10")
52 1.1.1.2 mrg (absence_set "du6_power10" "du7_power10")
53 1.1 mrg
54 1.1 mrg
55 1.1 mrg ; Dispatch port reservations
56 1.1 mrg ;
57 1.1.1.2 mrg ; Power10 can dispatch a maximum of 8 iops per cycle. With a maximum of
58 1.1.1.2 mrg ; 4 VSU/2 Load/2 Store per cycle.
59 1.1 mrg
60 1.1.1.2 mrg ; Any dispatch slot
61 1.1 mrg (define_reservation "DU_any_power10"
62 1.1.1.2 mrg "du0_power10|du1_power10|du2_power10|du3_power10|
63 1.1.1.2 mrg du4_power10|du5_power10|du6_power10|du7_power10")
64 1.1.1.2 mrg
65 1.1.1.2 mrg ; Even slot, actually takes even/odd slots
66 1.1.1.2 mrg (define_reservation "DU_even_power10"
67 1.1.1.2 mrg "du0_power10+du1_power10|du2_power10+du3_power10|
68 1.1.1.2 mrg du4_power10+du5_power10|du6_power10+du7_power10")
69 1.1.1.2 mrg
70 1.1.1.2 mrg ; 4-way cracked (consumes whole decode/dispatch cycle)
71 1.1.1.2 mrg (define_reservation "DU_all_power10"
72 1.1.1.2 mrg "du0_power10+du1_power10+du2_power10+du3_power10+
73 1.1.1.2 mrg du4_power10+du5_power10+du6_power10+du7_power10")
74 1.1 mrg
75 1.1 mrg
76 1.1.1.2 mrg ; Execution unit reservations
77 1.1.1.2 mrg (define_reservation "LU_power10"
78 1.1.1.2 mrg "lu0_power10|lu1_power10")
79 1.1 mrg
80 1.1.1.2 mrg (define_reservation "STU_power10"
81 1.1.1.2 mrg "stu0_power10|stu1_power10")
82 1.1 mrg
83 1.1.1.2 mrg ; Certain simple fixed-point insns can execute in the Store-agen pipe
84 1.1.1.2 mrg (define_reservation "SXU_power10"
85 1.1.1.2 mrg "stu0_power10|stu1_power10")
86 1.1 mrg
87 1.1.1.2 mrg (define_reservation "EXU_power10"
88 1.1.1.2 mrg "exu0_power10|exu1_power10|exu2_power10|exu3_power10")
89 1.1 mrg
90 1.1.1.2 mrg (define_reservation "EXU_super_power10"
91 1.1.1.2 mrg "exu0_power10+exu1_power10|exu2_power10+exu3_power10")
92 1.1 mrg
93 1.1 mrg
94 1.1.1.2 mrg ; Load Unit
95 1.1 mrg (define_insn_reservation "power10-load" 4
96 1.1 mrg (and (eq_attr "type" "load")
97 1.1 mrg (eq_attr "update" "no")
98 1.1.1.2 mrg (eq_attr "size" "!128")
99 1.1.1.2 mrg (eq_attr "prefixed" "no")
100 1.1 mrg (eq_attr "cpu" "power10"))
101 1.1.1.2 mrg "DU_any_power10,LU_power10")
102 1.1 mrg
103 1.1.1.2 mrg (define_insn_reservation "power10-fused-load" 4
104 1.1.1.2 mrg (and (eq_attr "type" "fused_load_cmpi,fused_addis_load,fused_load_load")
105 1.1 mrg (eq_attr "cpu" "power10"))
106 1.1.1.2 mrg "DU_even_power10,LU_power10")
107 1.1 mrg
108 1.1.1.2 mrg (define_insn_reservation "power10-prefixed-load" 4
109 1.1 mrg (and (eq_attr "type" "load")
110 1.1 mrg (eq_attr "update" "no")
111 1.1.1.2 mrg (eq_attr "size" "!128")
112 1.1.1.2 mrg (eq_attr "prefixed" "yes")
113 1.1 mrg (eq_attr "cpu" "power10"))
114 1.1.1.2 mrg "DU_even_power10,LU_power10")
115 1.1 mrg
116 1.1.1.2 mrg (define_insn_reservation "power10-load-update" 4
117 1.1 mrg (and (eq_attr "type" "load")
118 1.1 mrg (eq_attr "update" "yes")
119 1.1 mrg (eq_attr "cpu" "power10"))
120 1.1.1.2 mrg "DU_even_power10,LU_power10+SXU_power10")
121 1.1 mrg
122 1.1 mrg (define_insn_reservation "power10-fpload-double" 4
123 1.1 mrg (and (eq_attr "type" "fpload")
124 1.1 mrg (eq_attr "update" "no")
125 1.1 mrg (eq_attr "size" "64")
126 1.1.1.2 mrg (eq_attr "prefixed" "no")
127 1.1 mrg (eq_attr "cpu" "power10"))
128 1.1.1.2 mrg "DU_any_power10,LU_power10")
129 1.1.1.2 mrg
130 1.1.1.2 mrg (define_insn_reservation "power10-prefixed-fpload-double" 4
131 1.1.1.2 mrg (and (eq_attr "type" "fpload")
132 1.1.1.2 mrg (eq_attr "update" "no")
133 1.1.1.2 mrg (eq_attr "size" "64")
134 1.1.1.2 mrg (eq_attr "prefixed" "yes")
135 1.1.1.2 mrg (eq_attr "cpu" "power10"))
136 1.1.1.2 mrg "DU_even_power10,LU_power10")
137 1.1 mrg
138 1.1 mrg (define_insn_reservation "power10-fpload-update-double" 4
139 1.1 mrg (and (eq_attr "type" "fpload")
140 1.1 mrg (eq_attr "update" "yes")
141 1.1 mrg (eq_attr "size" "64")
142 1.1 mrg (eq_attr "cpu" "power10"))
143 1.1.1.2 mrg "DU_even_power10,LU_power10+SXU_power10")
144 1.1 mrg
145 1.1.1.2 mrg ; SFmode loads are cracked and have additional 3 cycles over DFmode
146 1.1.1.2 mrg ; Prefixed forms behave the same
147 1.1.1.2 mrg (define_insn_reservation "power10-fpload-single" 7
148 1.1 mrg (and (eq_attr "type" "fpload")
149 1.1 mrg (eq_attr "update" "no")
150 1.1 mrg (eq_attr "size" "32")
151 1.1 mrg (eq_attr "cpu" "power10"))
152 1.1.1.2 mrg "DU_even_power10,LU_power10")
153 1.1 mrg
154 1.1.1.2 mrg (define_insn_reservation "power10-fpload-update-single" 7
155 1.1 mrg (and (eq_attr "type" "fpload")
156 1.1 mrg (eq_attr "update" "yes")
157 1.1 mrg (eq_attr "size" "32")
158 1.1 mrg (eq_attr "cpu" "power10"))
159 1.1.1.2 mrg "DU_even_power10,LU_power10+SXU_power10")
160 1.1 mrg
161 1.1.1.2 mrg (define_insn_reservation "power10-vecload" 4
162 1.1 mrg (and (eq_attr "type" "vecload")
163 1.1.1.2 mrg (eq_attr "size" "!256")
164 1.1 mrg (eq_attr "cpu" "power10"))
165 1.1.1.2 mrg "DU_any_power10,LU_power10")
166 1.1 mrg
167 1.1.1.2 mrg ; lxvp
168 1.1.1.2 mrg (define_insn_reservation "power10-vecload-pair" 4
169 1.1.1.2 mrg (and (eq_attr "type" "vecload")
170 1.1.1.2 mrg (eq_attr "size" "256")
171 1.1 mrg (eq_attr "cpu" "power10"))
172 1.1.1.2 mrg "DU_even_power10,LU_power10+SXU_power10")
173 1.1 mrg
174 1.1.1.2 mrg ; Store Unit
175 1.1.1.2 mrg (define_insn_reservation "power10-store" 0
176 1.1.1.2 mrg (and (eq_attr "type" "store,fpstore,vecstore")
177 1.1 mrg (eq_attr "update" "no")
178 1.1.1.2 mrg (eq_attr "prefixed" "no")
179 1.1.1.2 mrg (eq_attr "size" "!128")
180 1.1.1.2 mrg (eq_attr "size" "!256")
181 1.1 mrg (eq_attr "cpu" "power10"))
182 1.1.1.2 mrg "DU_any_power10,STU_power10")
183 1.1 mrg
184 1.1.1.2 mrg (define_insn_reservation "power10-fused-store" 0
185 1.1.1.2 mrg (and (eq_attr "type" "fused_store_store")
186 1.1 mrg (eq_attr "cpu" "power10"))
187 1.1.1.2 mrg "DU_even_power10,STU_power10")
188 1.1 mrg
189 1.1.1.2 mrg (define_insn_reservation "power10-prefixed-store" 0
190 1.1.1.2 mrg (and (eq_attr "type" "store,fpstore,vecstore")
191 1.1.1.2 mrg (eq_attr "prefixed" "yes")
192 1.1.1.2 mrg (eq_attr "size" "!128")
193 1.1.1.2 mrg (eq_attr "size" "!256")
194 1.1 mrg (eq_attr "cpu" "power10"))
195 1.1.1.2 mrg "DU_even_power10,STU_power10")
196 1.1 mrg
197 1.1 mrg ; Update forms have 2 cycle latency for updated addr reg
198 1.1.1.2 mrg (define_insn_reservation "power10-store-update" 2
199 1.1.1.2 mrg (and (eq_attr "type" "store,fpstore")
200 1.1 mrg (eq_attr "update" "yes")
201 1.1 mrg (eq_attr "cpu" "power10"))
202 1.1.1.2 mrg "DU_any_power10,STU_power10")
203 1.1 mrg
204 1.1.1.2 mrg ; stxvp
205 1.1.1.2 mrg (define_insn_reservation "power10-vecstore-pair" 0
206 1.1 mrg (and (eq_attr "type" "vecstore")
207 1.1.1.2 mrg (eq_attr "size" "256")
208 1.1 mrg (eq_attr "cpu" "power10"))
209 1.1.1.2 mrg "DU_even_power10,stu0_power10+stu1_power10")
210 1.1 mrg
211 1.1 mrg (define_insn_reservation "power10-larx" 4
212 1.1 mrg (and (eq_attr "type" "load_l")
213 1.1.1.2 mrg (eq_attr "size" "!128")
214 1.1 mrg (eq_attr "cpu" "power10"))
215 1.1.1.2 mrg "DU_any_power10,LU_power10")
216 1.1 mrg
217 1.1.1.2 mrg ; All load quad forms
218 1.1.1.2 mrg (define_insn_reservation "power10-lq" 4
219 1.1.1.2 mrg (and (eq_attr "type" "load,load_l")
220 1.1.1.2 mrg (eq_attr "size" "128")
221 1.1.1.2 mrg (eq_attr "cpu" "power10"))
222 1.1.1.2 mrg "DU_even_power10,LU_power10+SXU_power10")
223 1.1.1.2 mrg
224 1.1.1.2 mrg (define_insn_reservation "power10-stcx" 0
225 1.1 mrg (and (eq_attr "type" "store_c")
226 1.1.1.2 mrg (eq_attr "size" "!128")
227 1.1.1.2 mrg (eq_attr "cpu" "power10"))
228 1.1.1.2 mrg "DU_any_power10,STU_power10")
229 1.1.1.2 mrg
230 1.1.1.2 mrg ; All store quad forms
231 1.1.1.2 mrg (define_insn_reservation "power10-stq" 0
232 1.1.1.2 mrg (and (eq_attr "type" "store,store_c")
233 1.1.1.2 mrg (eq_attr "size" "128")
234 1.1 mrg (eq_attr "cpu" "power10"))
235 1.1.1.2 mrg "DU_even_power10,stu0_power10+stu1_power10")
236 1.1 mrg
237 1.1.1.2 mrg (define_insn_reservation "power10-sync" 1
238 1.1 mrg (and (eq_attr "type" "sync,isync")
239 1.1 mrg (eq_attr "cpu" "power10"))
240 1.1.1.2 mrg "DU_even_power10,STU_power10")
241 1.1 mrg
242 1.1 mrg
243 1.1 mrg ; VSU Execution Unit
244 1.1 mrg
245 1.1 mrg ; Fixed point ops
246 1.1 mrg
247 1.1 mrg ; Most ALU insns are simple 2 cycle, including record form
248 1.1 mrg (define_insn_reservation "power10-alu" 2
249 1.1 mrg (and (eq_attr "type" "add,exts,integer,logical,isel")
250 1.1.1.2 mrg (eq_attr "prefixed" "no")
251 1.1 mrg (eq_attr "cpu" "power10"))
252 1.1.1.2 mrg "DU_any_power10,EXU_power10")
253 1.1.1.2 mrg ; 4 cycle CR latency
254 1.1.1.2 mrg (define_bypass 4 "power10-alu"
255 1.1 mrg "power10-crlogical,power10-mfcr,power10-mfcrf")
256 1.1 mrg
257 1.1.1.2 mrg (define_insn_reservation "power10-fused_alu" 2
258 1.1.1.2 mrg (and (eq_attr "type" "fused_arith_logical,fused_cmp_isel,fused_carry")
259 1.1.1.2 mrg (eq_attr "cpu" "power10"))
260 1.1.1.2 mrg "DU_even_power10,EXU_power10")
261 1.1.1.2 mrg
262 1.1.1.2 mrg ; paddi
263 1.1.1.2 mrg (define_insn_reservation "power10-paddi" 2
264 1.1.1.2 mrg (and (eq_attr "type" "add")
265 1.1.1.2 mrg (eq_attr "prefixed" "yes")
266 1.1.1.2 mrg (eq_attr "cpu" "power10"))
267 1.1.1.2 mrg "DU_even_power10,EXU_power10")
268 1.1.1.2 mrg
269 1.1.1.2 mrg ; Rotate/shift (non-record form)
270 1.1 mrg (define_insn_reservation "power10-rot" 2
271 1.1 mrg (and (eq_attr "type" "insert,shift")
272 1.1 mrg (eq_attr "dot" "no")
273 1.1 mrg (eq_attr "cpu" "power10"))
274 1.1.1.2 mrg "DU_any_power10,EXU_power10")
275 1.1 mrg
276 1.1.1.2 mrg ; Record form rotate/shift
277 1.1.1.2 mrg (define_insn_reservation "power10-rot-compare" 3
278 1.1 mrg (and (eq_attr "type" "insert,shift")
279 1.1 mrg (eq_attr "dot" "yes")
280 1.1 mrg (eq_attr "cpu" "power10"))
281 1.1.1.2 mrg "DU_any_power10,EXU_power10")
282 1.1.1.2 mrg ; 5 cycle CR latency
283 1.1.1.2 mrg (define_bypass 5 "power10-rot-compare"
284 1.1 mrg "power10-crlogical,power10-mfcr,power10-mfcrf")
285 1.1 mrg
286 1.1 mrg (define_insn_reservation "power10-alu2" 3
287 1.1 mrg (and (eq_attr "type" "cntlz,popcnt,trap")
288 1.1 mrg (eq_attr "cpu" "power10"))
289 1.1.1.2 mrg "DU_any_power10,EXU_power10")
290 1.1.1.2 mrg ; 5 cycle CR latency
291 1.1.1.2 mrg (define_bypass 5 "power10-alu2"
292 1.1 mrg "power10-crlogical,power10-mfcr,power10-mfcrf")
293 1.1 mrg
294 1.1 mrg (define_insn_reservation "power10-cmp" 2
295 1.1 mrg (and (eq_attr "type" "cmp")
296 1.1 mrg (eq_attr "cpu" "power10"))
297 1.1.1.2 mrg "DU_any_power10,EXU_power10")
298 1.1 mrg
299 1.1 mrg ; Treat 'two' and 'three' types as 2 or 3 way cracked
300 1.1 mrg (define_insn_reservation "power10-two" 4
301 1.1 mrg (and (eq_attr "type" "two")
302 1.1 mrg (eq_attr "cpu" "power10"))
303 1.1.1.2 mrg "DU_even_power10,EXU_power10")
304 1.1 mrg
305 1.1 mrg (define_insn_reservation "power10-three" 6
306 1.1 mrg (and (eq_attr "type" "three")
307 1.1 mrg (eq_attr "cpu" "power10"))
308 1.1.1.2 mrg "DU_all_power10,EXU_power10")
309 1.1 mrg
310 1.1 mrg (define_insn_reservation "power10-mul" 5
311 1.1 mrg (and (eq_attr "type" "mul")
312 1.1 mrg (eq_attr "dot" "no")
313 1.1 mrg (eq_attr "cpu" "power10"))
314 1.1.1.2 mrg "DU_any_power10,EXU_power10")
315 1.1.1.2 mrg ; 4 cycle MUL->MUL latency
316 1.1.1.2 mrg (define_bypass 4 "power10-mul"
317 1.1.1.2 mrg "power10-mul,power10-mul-compare")
318 1.1 mrg
319 1.1 mrg (define_insn_reservation "power10-mul-compare" 5
320 1.1 mrg (and (eq_attr "type" "mul")
321 1.1 mrg (eq_attr "dot" "yes")
322 1.1 mrg (eq_attr "cpu" "power10"))
323 1.1.1.2 mrg "DU_even_power10,EXU_power10")
324 1.1.1.2 mrg ; 4 cycle MUL->MUL latency
325 1.1.1.2 mrg (define_bypass 4 "power10-mul-compare"
326 1.1.1.2 mrg "power10-mul,power10-mul-compare")
327 1.1.1.2 mrg ; 7 cycle CR latency
328 1.1.1.2 mrg (define_bypass 7 "power10-mul-compare"
329 1.1 mrg "power10-crlogical,power10-mfcr,power10-mfcrf")
330 1.1 mrg
331 1.1.1.2 mrg (define_insn_reservation "power10-div" 12
332 1.1 mrg (and (eq_attr "type" "div")
333 1.1.1.2 mrg (eq_attr "dot" "no")
334 1.1 mrg (eq_attr "cpu" "power10"))
335 1.1.1.2 mrg "DU_any_power10,EXU_power10")
336 1.1 mrg
337 1.1.1.2 mrg (define_insn_reservation "power10-div-compare" 12
338 1.1 mrg (and (eq_attr "type" "div")
339 1.1.1.2 mrg (eq_attr "dot" "yes")
340 1.1 mrg (eq_attr "cpu" "power10"))
341 1.1.1.2 mrg "DU_even_power10,EXU_power10")
342 1.1.1.2 mrg ; 14 cycle CR latency
343 1.1.1.2 mrg (define_bypass 14 "power10-div-compare"
344 1.1.1.2 mrg "power10-crlogical,power10-mfcr,power10-mfcrf")
345 1.1 mrg
346 1.1 mrg (define_insn_reservation "power10-crlogical" 2
347 1.1 mrg (and (eq_attr "type" "cr_logical")
348 1.1 mrg (eq_attr "cpu" "power10"))
349 1.1.1.2 mrg "DU_any_power10,EXU_power10")
350 1.1 mrg
351 1.1 mrg (define_insn_reservation "power10-mfcrf" 2
352 1.1 mrg (and (eq_attr "type" "mfcrf")
353 1.1 mrg (eq_attr "cpu" "power10"))
354 1.1.1.2 mrg "DU_any_power10,EXU_power10")
355 1.1 mrg
356 1.1.1.2 mrg (define_insn_reservation "power10-mfcr" 3
357 1.1 mrg (and (eq_attr "type" "mfcr")
358 1.1 mrg (eq_attr "cpu" "power10"))
359 1.1.1.2 mrg "DU_even_power10,EXU_power10")
360 1.1 mrg
361 1.1 mrg ; Should differentiate between 1 cr field and > 1 since target of > 1 cr
362 1.1 mrg ; is cracked
363 1.1.1.2 mrg (define_insn_reservation "power10-mtcr" 3
364 1.1 mrg (and (eq_attr "type" "mtcr")
365 1.1 mrg (eq_attr "cpu" "power10"))
366 1.1.1.2 mrg "DU_any_power10,EXU_power10")
367 1.1 mrg
368 1.1.1.2 mrg (define_insn_reservation "power10-mtjmpr" 3
369 1.1 mrg (and (eq_attr "type" "mtjmpr")
370 1.1 mrg (eq_attr "cpu" "power10"))
371 1.1.1.2 mrg "DU_any_power10,EXU_power10")
372 1.1.1.2 mrg
373 1.1.1.2 mrg (define_insn_reservation "power10-mfjmpr" 2
374 1.1.1.2 mrg (and (eq_attr "type" "mfjmpr")
375 1.1.1.2 mrg (eq_attr "cpu" "power10"))
376 1.1.1.2 mrg "DU_any_power10,EXU_power10")
377 1.1.1.2 mrg
378 1.1 mrg
379 1.1 mrg ; Floating point/Vector ops
380 1.1.1.2 mrg
381 1.1.1.2 mrg (define_insn_reservation "power10-fpsimple" 3
382 1.1 mrg (and (eq_attr "type" "fpsimple")
383 1.1 mrg (eq_attr "cpu" "power10"))
384 1.1.1.2 mrg "DU_any_power10,EXU_power10")
385 1.1 mrg
386 1.1 mrg (define_insn_reservation "power10-fp" 5
387 1.1 mrg (and (eq_attr "type" "fp,dmul")
388 1.1 mrg (eq_attr "cpu" "power10"))
389 1.1.1.2 mrg "DU_any_power10,EXU_power10")
390 1.1 mrg
391 1.1 mrg (define_insn_reservation "power10-fpcompare" 3
392 1.1 mrg (and (eq_attr "type" "fpcompare")
393 1.1 mrg (eq_attr "cpu" "power10"))
394 1.1.1.2 mrg "DU_any_power10,EXU_power10")
395 1.1 mrg
396 1.1 mrg (define_insn_reservation "power10-sdiv" 22
397 1.1 mrg (and (eq_attr "type" "sdiv")
398 1.1 mrg (eq_attr "cpu" "power10"))
399 1.1.1.2 mrg "DU_any_power10,EXU_power10")
400 1.1 mrg
401 1.1 mrg (define_insn_reservation "power10-ddiv" 27
402 1.1 mrg (and (eq_attr "type" "ddiv")
403 1.1 mrg (eq_attr "cpu" "power10"))
404 1.1.1.2 mrg "DU_any_power10,EXU_power10")
405 1.1 mrg
406 1.1 mrg (define_insn_reservation "power10-sqrt" 26
407 1.1 mrg (and (eq_attr "type" "ssqrt")
408 1.1 mrg (eq_attr "cpu" "power10"))
409 1.1.1.2 mrg "DU_any_power10,EXU_power10")
410 1.1 mrg
411 1.1 mrg (define_insn_reservation "power10-dsqrt" 36
412 1.1 mrg (and (eq_attr "type" "dsqrt")
413 1.1 mrg (eq_attr "cpu" "power10"))
414 1.1.1.2 mrg "DU_any_power10,EXU_power10")
415 1.1 mrg
416 1.1 mrg (define_insn_reservation "power10-vec-2cyc" 2
417 1.1 mrg (and (eq_attr "type" "vecmove,veclogical,vecexts,veccmpfx")
418 1.1 mrg (eq_attr "cpu" "power10"))
419 1.1.1.2 mrg "DU_any_power10,EXU_power10")
420 1.1.1.2 mrg
421 1.1.1.2 mrg (define_insn_reservation "power10-fused-vec" 2
422 1.1.1.2 mrg (and (eq_attr "type" "fused_vector")
423 1.1.1.2 mrg (eq_attr "cpu" "power10"))
424 1.1.1.2 mrg "DU_even_power10,EXU_power10")
425 1.1 mrg
426 1.1 mrg (define_insn_reservation "power10-veccmp" 3
427 1.1 mrg (and (eq_attr "type" "veccmp")
428 1.1 mrg (eq_attr "cpu" "power10"))
429 1.1.1.2 mrg "DU_any_power10,EXU_power10")
430 1.1 mrg
431 1.1.1.2 mrg (define_insn_reservation "power10-vecsimple" 2
432 1.1 mrg (and (eq_attr "type" "vecsimple")
433 1.1 mrg (eq_attr "cpu" "power10"))
434 1.1.1.2 mrg "DU_any_power10,EXU_power10")
435 1.1 mrg
436 1.1.1.2 mrg (define_insn_reservation "power10-vecnormal" 5
437 1.1 mrg (and (eq_attr "type" "vecfloat,vecdouble")
438 1.1 mrg (eq_attr "size" "!128")
439 1.1 mrg (eq_attr "cpu" "power10"))
440 1.1.1.2 mrg "DU_any_power10,EXU_power10")
441 1.1 mrg
442 1.1 mrg (define_insn_reservation "power10-qp" 12
443 1.1 mrg (and (eq_attr "type" "vecfloat,vecdouble")
444 1.1 mrg (eq_attr "size" "128")
445 1.1 mrg (eq_attr "cpu" "power10"))
446 1.1.1.2 mrg "DU_any_power10,EXU_power10")
447 1.1 mrg
448 1.1 mrg (define_insn_reservation "power10-vecperm" 3
449 1.1 mrg (and (eq_attr "type" "vecperm")
450 1.1.1.2 mrg (eq_attr "prefixed" "no")
451 1.1.1.2 mrg (eq_attr "dot" "no")
452 1.1 mrg (eq_attr "cpu" "power10"))
453 1.1.1.2 mrg "DU_any_power10,EXU_power10")
454 1.1 mrg
455 1.1.1.2 mrg (define_insn_reservation "power10-vecperm-compare" 3
456 1.1.1.2 mrg (and (eq_attr "type" "vecperm")
457 1.1.1.2 mrg (eq_attr "dot" "yes")
458 1.1.1.2 mrg (eq_attr "cpu" "power10"))
459 1.1.1.2 mrg "DU_even_power10,EXU_power10")
460 1.1.1.2 mrg
461 1.1.1.2 mrg (define_insn_reservation "power10-prefixed-vecperm" 3
462 1.1.1.2 mrg (and (eq_attr "type" "vecperm")
463 1.1.1.2 mrg (eq_attr "prefixed" "yes")
464 1.1.1.2 mrg (eq_attr "cpu" "power10"))
465 1.1.1.2 mrg "DU_even_power10,EXU_power10")
466 1.1.1.2 mrg
467 1.1.1.2 mrg (define_insn_reservation "power10-veccomplex" 6
468 1.1 mrg (and (eq_attr "type" "veccomplex")
469 1.1 mrg (eq_attr "cpu" "power10"))
470 1.1.1.2 mrg "DU_any_power10,EXU_power10")
471 1.1 mrg
472 1.1 mrg (define_insn_reservation "power10-vecfdiv" 24
473 1.1 mrg (and (eq_attr "type" "vecfdiv")
474 1.1 mrg (eq_attr "cpu" "power10"))
475 1.1.1.2 mrg "DU_any_power10,EXU_power10")
476 1.1 mrg
477 1.1 mrg (define_insn_reservation "power10-vecdiv" 27
478 1.1 mrg (and (eq_attr "type" "vecdiv")
479 1.1 mrg (eq_attr "size" "!128")
480 1.1 mrg (eq_attr "cpu" "power10"))
481 1.1.1.2 mrg "DU_any_power10,EXU_power10")
482 1.1 mrg
483 1.1 mrg (define_insn_reservation "power10-qpdiv" 56
484 1.1 mrg (and (eq_attr "type" "vecdiv")
485 1.1 mrg (eq_attr "size" "128")
486 1.1 mrg (eq_attr "cpu" "power10"))
487 1.1.1.2 mrg "DU_any_power10,EXU_power10")
488 1.1 mrg
489 1.1 mrg (define_insn_reservation "power10-qpmul" 24
490 1.1 mrg (and (eq_attr "type" "qmul")
491 1.1 mrg (eq_attr "size" "128")
492 1.1 mrg (eq_attr "cpu" "power10"))
493 1.1.1.2 mrg "DU_any_power10,EXU_power10")
494 1.1 mrg
495 1.1.1.2 mrg (define_insn_reservation "power10-mtvsr" 2
496 1.1.1.2 mrg (and (eq_attr "type" "mtvsr")
497 1.1 mrg (eq_attr "cpu" "power10"))
498 1.1.1.2 mrg "DU_any_power10,EXU_power10")
499 1.1 mrg
500 1.1.1.2 mrg (define_insn_reservation "power10-mfvsr" 2
501 1.1.1.2 mrg (and (eq_attr "type" "mfvsr")
502 1.1 mrg (eq_attr "cpu" "power10"))
503 1.1.1.2 mrg "DU_any_power10,EXU_power10")
504 1.1 mrg
505 1.1 mrg
506 1.1.1.2 mrg ; Branch
507 1.1.1.2 mrg ; Branch is 2 cycles, grouped with STU for issue
508 1.1 mrg (define_insn_reservation "power10-branch" 2
509 1.1 mrg (and (eq_attr "type" "jmpreg,branch")
510 1.1 mrg (eq_attr "cpu" "power10"))
511 1.1.1.2 mrg "DU_any_power10,STU_power10")
512 1.1 mrg
513 1.1.1.2 mrg (define_insn_reservation "power10-fused-branch" 3
514 1.1.1.2 mrg (and (eq_attr "type" "fused_mtbc")
515 1.1 mrg (eq_attr "cpu" "power10"))
516 1.1.1.2 mrg "DU_even_power10,STU_power10")
517 1.1 mrg
518 1.1 mrg
519 1.1.1.2 mrg ; Crypto
520 1.1.1.2 mrg (define_insn_reservation "power10-crypto" 4
521 1.1.1.2 mrg (and (eq_attr "type" "crypto")
522 1.1 mrg (eq_attr "cpu" "power10"))
523 1.1.1.2 mrg "DU_any_power10,EXU_power10")
524 1.1.1.2 mrg
525 1.1 mrg
526 1.1.1.2 mrg ; HTM
527 1.1.1.2 mrg (define_insn_reservation "power10-htm" 2
528 1.1.1.2 mrg (and (eq_attr "type" "htmsimple,htm")
529 1.1 mrg (eq_attr "cpu" "power10"))
530 1.1.1.2 mrg "DU_any_power10,EXU_power10")
531 1.1 mrg
532 1.1 mrg
533 1.1.1.2 mrg ; DFP
534 1.1.1.2 mrg ; Use the minimum 12 cycle latency for all DFP insns
535 1.1 mrg (define_insn_reservation "power10-dfp" 12
536 1.1 mrg (and (eq_attr "type" "dfp")
537 1.1.1.2 mrg (eq_attr "size" "!128")
538 1.1.1.2 mrg (eq_attr "cpu" "power10"))
539 1.1.1.2 mrg "DU_any_power10,EXU_power10")
540 1.1.1.2 mrg
541 1.1.1.2 mrg (define_insn_reservation "power10-dfpq" 12
542 1.1.1.2 mrg (and (eq_attr "type" "dfp")
543 1.1.1.2 mrg (eq_attr "size" "128")
544 1.1 mrg (eq_attr "cpu" "power10"))
545 1.1.1.2 mrg "DU_even_power10,EXU_power10")
546 1.1.1.2 mrg
547 1.1.1.2 mrg ; MMA
548 1.1.1.2 mrg (define_insn_reservation "power10-mma" 9
549 1.1.1.2 mrg (and (eq_attr "type" "mma")
550 1.1.1.2 mrg (eq_attr "prefixed" "no")
551 1.1.1.2 mrg (eq_attr "cpu" "power10"))
552 1.1.1.2 mrg "DU_any_power10,EXU_super_power10")
553 1.1.1.2 mrg
554 1.1.1.2 mrg (define_insn_reservation "power10-prefixed-mma" 9
555 1.1.1.2 mrg (and (eq_attr "type" "mma")
556 1.1.1.2 mrg (eq_attr "prefixed" "yes")
557 1.1.1.2 mrg (eq_attr "cpu" "power10"))
558 1.1.1.2 mrg "DU_even_power10,EXU_super_power10")
559 1.1.1.2 mrg ; 4 cycle MMA->MMA latency
560 1.1.1.2 mrg (define_bypass 4 "power10-mma,power10-prefixed-mma"
561 1.1.1.2 mrg "power10-mma,power10-prefixed-mma")
562 1.1.1.2 mrg
563 1.1 mrg
564