1 ;; Copyright (C) 2012-2017 Free Software Foundation, Inc.
3 ;; This file is part of GCC.
5 ;; GCC is free software; you can redistribute it and/or modify
6 ;; it under the terms of the GNU General Public License as published by
7 ;; the Free Software Foundation; either version 3, or (at your option)
10 ;; GCC is distributed in the hope that it will be useful,
11 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
12 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 ;; GNU General Public License for more details.
15 ;; You should have received a copy of the GNU General Public License
16 ;; along with GCC; see the file COPYING3. If not see
17 ;; <http://www.gnu.org/licenses/>.
20 (define_attr "znver1_decode" "direct,vector,double"
21 (const_string "direct"))
23 ;; AMD znver1 Scheduling
24 ;; Modeling automatons for zen decoders, integer execution pipes,
25 ;; AGU pipes and floating point execution units.
26 (define_automaton "znver1, znver1_ieu, znver1_fp, znver1_agu")
28 ;; Decoders unit has 4 decoders and all of them can decode fast path
29 ;; and vector type instructions.
30 (define_cpu_unit "znver1-decode0" "znver1")
31 (define_cpu_unit "znver1-decode1" "znver1")
32 (define_cpu_unit "znver1-decode2" "znver1")
33 (define_cpu_unit "znver1-decode3" "znver1")
35 ;; Currently blocking all decoders for vector path instructions as
36 ;; they are dispatched separetely as microcode sequence.
37 ;; Fix me: Need to revisit this.
38 (define_reservation "znver1-vector" "znver1-decode0+znver1-decode1+znver1-decode2+znver1-decode3")
40 ;; Direct instructions can be issued to any of the four decoders.
41 (define_reservation "znver1-direct" "znver1-decode0|znver1-decode1|znver1-decode2|znver1-decode3")
43 ;; Fix me: Need to revisit this later to simulate fast path double behavior.
44 (define_reservation "znver1-double" "znver1-direct")
47 ;; Integer unit 4 ALU pipes.
48 (define_cpu_unit "znver1-ieu0" "znver1_ieu")
49 (define_cpu_unit "znver1-ieu1" "znver1_ieu")
50 (define_cpu_unit "znver1-ieu2" "znver1_ieu")
51 (define_cpu_unit "znver1-ieu3" "znver1_ieu")
52 (define_reservation "znver1-ieu" "znver1-ieu0|znver1-ieu1|znver1-ieu2|znver1-ieu3")
55 (define_cpu_unit "znver1-agu0" "znver1_agu")
56 (define_cpu_unit "znver1-agu1" "znver1_agu")
57 (define_reservation "znver1-agu-reserve" "znver1-agu0|znver1-agu1")
59 (define_reservation "znver1-load" "znver1-agu-reserve")
60 (define_reservation "znver1-store" "znver1-agu-reserve")
62 ;; vectorpath (microcoded) instructions are single issue instructions.
63 ;; So, they occupy all the integer units.
64 (define_reservation "znver1-ivector" "znver1-ieu0+znver1-ieu1
65 +znver1-ieu2+znver1-ieu3
66 +znver1-agu0+znver1-agu1")
68 ;; Floating point unit 4 FP pipes.
69 (define_cpu_unit "znver1-fp0" "znver1_fp")
70 (define_cpu_unit "znver1-fp1" "znver1_fp")
71 (define_cpu_unit "znver1-fp2" "znver1_fp")
72 (define_cpu_unit "znver1-fp3" "znver1_fp")
74 (define_reservation "znver1-fpu" "znver1-fp0|znver1-fp1|znver1-fp2|znver1-fp3")
76 (define_reservation "znver1-fvector" "znver1-fp0+znver1-fp1
77 +znver1-fp2+znver1-fp3
78 +znver1-agu0+znver1-agu1")
81 (define_insn_reservation "znver1_call" 1
82 (and (eq_attr "cpu" "znver1")
83 (eq_attr "type" "call,callv"))
84 "znver1-double,znver1-store,znver1-ieu0|znver1-ieu3")
86 ;; General instructions
87 (define_insn_reservation "znver1_push" 1
88 (and (eq_attr "cpu" "znver1")
89 (and (eq_attr "type" "push")
90 (eq_attr "memory" "none,unknown")))
91 "znver1-direct,znver1-store")
93 (define_insn_reservation "znver1_push_store" 1
94 (and (eq_attr "cpu" "znver1")
95 (and (eq_attr "type" "push")
96 (eq_attr "memory" "store")))
97 "znver1-direct,znver1-store")
99 (define_insn_reservation "znver1_push_both" 5
100 (and (eq_attr "cpu" "znver1")
101 (and (eq_attr "type" "push")
102 (eq_attr "memory" "both")))
103 "znver1-direct,znver1-load,znver1-store")
105 (define_insn_reservation "znver1_pop" 4
106 (and (eq_attr "cpu" "znver1")
107 (and (eq_attr "type" "pop")
108 (eq_attr "memory" "load")))
109 "znver1-direct,znver1-load")
111 (define_insn_reservation "znver1_pop_mem" 4
112 (and (eq_attr "cpu" "znver1")
113 (and (eq_attr "type" "pop")
114 (eq_attr "memory" "both")))
115 "znver1-direct,znver1-load,znver1-store")
118 (define_insn_reservation "znver1_leave" 1
119 (and (eq_attr "cpu" "znver1")
120 (eq_attr "type" "leave"))
121 "znver1-double,znver1-ieu, znver1-store")
123 ;; Integer Instructions or General instructions
126 (define_insn_reservation "znver1_imul" 3
127 (and (eq_attr "cpu" "znver1")
128 (and (eq_attr "type" "imul")
129 (eq_attr "memory" "none")))
130 "znver1-direct,znver1-ieu1")
132 (define_insn_reservation "znver1_imul_mem" 7
133 (and (eq_attr "cpu" "znver1")
134 (and (eq_attr "type" "imul")
135 (eq_attr "memory" "!none")))
136 "znver1-direct,znver1-load, znver1-ieu1")
140 (define_insn_reservation "znver1_idiv_DI" 41
141 (and (eq_attr "cpu" "znver1")
142 (and (eq_attr "type" "idiv")
143 (and (eq_attr "mode" "DI")
144 (eq_attr "memory" "none"))))
145 "znver1-double,znver1-ieu2*41")
147 (define_insn_reservation "znver1_idiv_SI" 25
148 (and (eq_attr "cpu" "znver1")
149 (and (eq_attr "type" "idiv")
150 (and (eq_attr "mode" "SI")
151 (eq_attr "memory" "none"))))
152 "znver1-double,znver1-ieu2*25")
154 (define_insn_reservation "znver1_idiv_HI" 17
155 (and (eq_attr "cpu" "znver1")
156 (and (eq_attr "type" "idiv")
157 (and (eq_attr "mode" "HI")
158 (eq_attr "memory" "none"))))
159 "znver1-double,znver1-ieu2*17")
161 (define_insn_reservation "znver1_idiv_QI" 12
162 (and (eq_attr "cpu" "znver1")
163 (and (eq_attr "type" "idiv")
164 (and (eq_attr "mode" "QI")
165 (eq_attr "memory" "none"))))
166 "znver1-direct,znver1-ieu2*12")
169 (define_insn_reservation "znver1_idiv_mem_DI" 45
170 (and (eq_attr "cpu" "znver1")
171 (and (eq_attr "type" "idiv")
172 (and (eq_attr "mode" "DI")
173 (eq_attr "memory" "none"))))
174 "znver1-double,znver1-load,znver1-ieu2*41")
176 (define_insn_reservation "znver1_idiv_mem_SI" 29
177 (and (eq_attr "cpu" "znver1")
178 (and (eq_attr "type" "idiv")
179 (and (eq_attr "mode" "SI")
180 (eq_attr "memory" "none"))))
181 "znver1-double,znver1-load,znver1-ieu2*25")
183 (define_insn_reservation "znver1_idiv_mem_HI" 21
184 (and (eq_attr "cpu" "znver1")
185 (and (eq_attr "type" "idiv")
186 (and (eq_attr "mode" "HI")
187 (eq_attr "memory" "none"))))
188 "znver1-double,znver1-load,znver1-ieu2*17")
190 (define_insn_reservation "znver1_idiv_mem_QI" 16
191 (and (eq_attr "cpu" "znver1")
192 (and (eq_attr "type" "idiv")
193 (and (eq_attr "mode" "QI")
194 (eq_attr "memory" "none"))))
195 "znver1-direct,znver1-load,znver1-ieu2*12")
197 ;; STR ISHIFT which are micro coded.
198 ;; Fix me: Latency need to be rechecked.
199 (define_insn_reservation "znver1_str_ishift" 6
200 (and (eq_attr "cpu" "znver1")
201 (and (eq_attr "type" "str,ishift")
202 (eq_attr "memory" "both,store")))
203 "znver1-vector,znver1-ivector")
204 ;; MOV - integer moves
205 (define_insn_reservation "znver1_load_imov_double" 2
206 (and (eq_attr "cpu" "znver1")
207 (and (eq_attr "znver1_decode" "double")
208 (and (eq_attr "type" "imovx")
209 (eq_attr "memory" "none"))))
210 "znver1-double,znver1-ieu")
212 (define_insn_reservation "znver1_load_imov_direct" 1
213 (and (eq_attr "cpu" "znver1")
214 (and (eq_attr "type" "imov,imovx")
215 (eq_attr "memory" "none")))
216 "znver1-direct,znver1-ieu")
218 (define_insn_reservation "znver1_load_imov_double_store" 2
219 (and (eq_attr "cpu" "znver1")
220 (and (eq_attr "znver1_decode" "double")
221 (and (eq_attr "type" "imovx")
222 (eq_attr "memory" "store"))))
223 "znver1-double,znver1-ieu,znver1-store")
225 (define_insn_reservation "znver1_load_imov_direct_store" 1
226 (and (eq_attr "cpu" "znver1")
227 (and (eq_attr "type" "imov,imovx")
228 (eq_attr "memory" "store")))
229 "znver1-direct,znver1-ieu,znver1-store")
231 (define_insn_reservation "znver1_load_imov_double_load" 5
232 (and (eq_attr "cpu" "znver1")
233 (and (eq_attr "znver1_decode" "double")
234 (and (eq_attr "type" "imovx")
235 (eq_attr "memory" "load"))))
236 "znver1-double,znver1-load")
238 (define_insn_reservation "znver1_load_imov_direct_load" 4
239 (and (eq_attr "cpu" "znver1")
240 (and (eq_attr "type" "imov,imovx")
241 (eq_attr "memory" "load")))
242 "znver1-direct,znver1-load")
244 ;; INTEGER/GENERAL instructions
245 ;; register/imm operands only: ALU, ICMP, NEG, NOT, ROTATE, ISHIFT, TEST
246 (define_insn_reservation "znver1_insn" 1
247 (and (eq_attr "cpu" "znver1")
248 (and (eq_attr "type" "alu,icmp,negnot,rotate,rotate1,ishift,ishift1,test,setcc,incdec,icmov")
249 (eq_attr "memory" "none,unknown")))
250 "znver1-direct,znver1-ieu")
252 (define_insn_reservation "znver1_insn_load" 5
253 (and (eq_attr "cpu" "znver1")
254 (and (eq_attr "type" "alu,icmp,negnot,rotate,rotate1,ishift,ishift1,test,setcc,incdec,icmov")
255 (eq_attr "memory" "load")))
256 "znver1-direct,znver1-load,znver1-ieu")
258 (define_insn_reservation "znver1_insn_store" 1
259 (and (eq_attr "cpu" "znver1")
260 (and (eq_attr "type" "alu,icmp,negnot,rotate,rotate1,ishift1,test,setcc,incdec")
261 (eq_attr "memory" "store")))
262 "znver1-direct,znver1-ieu,znver1-store")
264 (define_insn_reservation "znver1_insn_both" 5
265 (and (eq_attr "cpu" "znver1")
266 (and (eq_attr "type" "alu,icmp,negnot,rotate,rotate1,ishift1,test,setcc,incdec")
267 (eq_attr "memory" "both")))
268 "znver1-direct,znver1-load,znver1-ieu,znver1-store")
270 ;; Fix me: Other vector type insns keeping latency 6 as of now.
271 (define_insn_reservation "znver1_ieu_vector" 6
272 (and (eq_attr "cpu" "znver1")
273 (eq_attr "type" "other,str,multi"))
274 "znver1-vector,znver1-ivector")
276 ;; ALU1 register operands.
277 (define_insn_reservation "znver1_alu1_vector" 3
278 (and (eq_attr "cpu" "znver1")
279 (and (eq_attr "znver1_decode" "vector")
280 (and (eq_attr "type" "alu1")
281 (eq_attr "memory" "none,unknown"))))
282 "znver1-vector,znver1-ivector")
284 (define_insn_reservation "znver1_alu1_double" 2
285 (and (eq_attr "cpu" "znver1")
286 (and (eq_attr "znver1_decode" "double")
287 (and (eq_attr "type" "alu1")
288 (eq_attr "memory" "none,unknown"))))
289 "znver1-double,znver1-ieu")
291 (define_insn_reservation "znver1_alu1_direct" 1
292 (and (eq_attr "cpu" "znver1")
293 (and (eq_attr "znver1_decode" "direct")
294 (and (eq_attr "type" "alu1")
295 (eq_attr "memory" "none,unknown"))))
296 "znver1-direct,znver1-ieu")
298 ;; Branches : Fix me need to model conditional branches.
299 (define_insn_reservation "znver1_branch" 1
300 (and (eq_attr "cpu" "znver1")
301 (and (eq_attr "type" "ibr")
302 (eq_attr "memory" "none")))
305 ;; Indirect branches check latencies.
306 (define_insn_reservation "znver1_indirect_branch_mem" 6
307 (and (eq_attr "cpu" "znver1")
308 (and (eq_attr "type" "ibr")
309 (eq_attr "memory" "load")))
310 "znver1-vector,znver1-ivector")
312 ;; LEA executes in ALU units with 1 cycle latency.
313 (define_insn_reservation "znver1_lea" 1
314 (and (eq_attr "cpu" "znver1")
315 (eq_attr "type" "lea"))
316 "znver1-direct,znver1-ieu")
318 ;; Other integer instrucions
319 (define_insn_reservation "znver1_idirect" 1
320 (and (eq_attr "cpu" "znver1")
321 (and (eq_attr "unit" "integer,unknown")
322 (eq_attr "memory" "none,unknown")))
323 "znver1-direct,znver1-ieu")
326 (define_insn_reservation "znver1_fp_cmov" 6
327 (and (eq_attr "cpu" "znver1")
328 (eq_attr "type" "fcmov"))
329 "znver1-vector,znver1-fvector")
331 (define_insn_reservation "znver1_fp_mov_direct_load" 8
332 (and (eq_attr "cpu" "znver1")
333 (and (eq_attr "znver1_decode" "direct")
334 (and (eq_attr "type" "fmov")
335 (eq_attr "memory" "load"))))
336 "znver1-direct,znver1-load,znver1-fp3|znver1-fp1")
338 (define_insn_reservation "znver1_fp_mov_direct_store" 5
339 (and (eq_attr "cpu" "znver1")
340 (and (eq_attr "znver1_decode" "direct")
341 (and (eq_attr "type" "fmov")
342 (eq_attr "memory" "store"))))
343 "znver1-direct,znver1-fp2|znver1-fp3,znver1-store")
345 (define_insn_reservation "znver1_fp_mov_double" 4
346 (and (eq_attr "cpu" "znver1")
347 (and (eq_attr "znver1_decode" "double")
348 (and (eq_attr "type" "fmov")
349 (eq_attr "memory" "none"))))
350 "znver1-double,znver1-fp3")
352 (define_insn_reservation "znver1_fp_mov_double_load" 12
353 (and (eq_attr "cpu" "znver1")
354 (and (eq_attr "znver1_decode" "double")
355 (and (eq_attr "type" "fmov")
356 (eq_attr "memory" "load"))))
357 "znver1-double,znver1-load,znver1-fp3")
359 (define_insn_reservation "znver1_fp_mov_direct" 1
360 (and (eq_attr "cpu" "znver1")
361 (eq_attr "type" "fmov"))
362 "znver1-direct,znver1-fp3")
364 (define_insn_reservation "znver1_fp_spc_direct" 5
365 (and (eq_attr "cpu" "znver1")
366 (and (eq_attr "type" "fpspc")
367 (eq_attr "memory" "store")))
368 "znver1-direct,znver1-fp3,znver1-fp2")
370 (define_insn_reservation "znver1_fp_insn_vector" 6
371 (and (eq_attr "cpu" "znver1")
372 (and (eq_attr "znver1_decode" "vector")
373 (eq_attr "type" "fpspc,mmxcvt,sselog1,ssemul,ssemov")))
374 "znver1-vector,znver1-fvector")
377 (define_insn_reservation "znver1_fp_fsgn" 1
378 (and (eq_attr "cpu" "znver1")
379 (eq_attr "type" "fsgn"))
380 "znver1-direct,znver1-fp3")
382 (define_insn_reservation "znver1_fp_fcmp" 2
383 (and (eq_attr "cpu" "znver1")
384 (and (eq_attr "memory" "none")
385 (and (eq_attr "znver1_decode" "double")
386 (eq_attr "type" "fcmp"))))
387 "znver1-double,znver1-fp0,znver1-fp2")
389 (define_insn_reservation "znver1_fp_fcmp_load" 9
390 (and (eq_attr "cpu" "znver1")
391 (and (eq_attr "memory" "none")
392 (and (eq_attr "znver1_decode" "double")
393 (eq_attr "type" "fcmp"))))
394 "znver1-double,znver1-load, znver1-fp0,znver1-fp2")
397 (define_insn_reservation "znver1_fp_op_mul" 5
398 (and (eq_attr "cpu" "znver1")
399 (and (eq_attr "type" "fop,fmul")
400 (eq_attr "memory" "none")))
401 "znver1-direct,znver1-fp0*5")
403 (define_insn_reservation "znver1_fp_op_mul_load" 12
404 (and (eq_attr "cpu" "znver1")
405 (and (eq_attr "type" "fop,fmul")
406 (eq_attr "memory" "load")))
407 "znver1-direct,znver1-load,znver1-fp0*5")
409 (define_insn_reservation "znver1_fp_op_imul_load" 16
410 (and (eq_attr "cpu" "znver1")
411 (and (eq_attr "type" "fop,fmul")
412 (and (eq_attr "fp_int_src" "true")
413 (eq_attr "memory" "load"))))
414 "znver1-double,znver1-load,znver1-fp3,znver1-fp0")
416 (define_insn_reservation "znver1_fp_op_div" 15
417 (and (eq_attr "cpu" "znver1")
418 (and (eq_attr "type" "fdiv")
419 (eq_attr "memory" "none")))
420 "znver1-direct,znver1-fp3*15")
422 (define_insn_reservation "znver1_fp_op_div_load" 22
423 (and (eq_attr "cpu" "znver1")
424 (and (eq_attr "type" "fdiv")
425 (eq_attr "memory" "load")))
426 "znver1-direct,znver1-load,znver1-fp3*15")
428 (define_insn_reservation "znver1_fp_op_idiv_load" 27
429 (and (eq_attr "cpu" "znver1")
430 (and (eq_attr "type" "fdiv")
431 (and (eq_attr "fp_int_src" "true")
432 (eq_attr "memory" "load"))))
433 "znver1-double,znver1-load,znver1-fp3*19")
435 ;; MMX, SSE, SSEn.n, AVX, AVX2 instructions
436 (define_insn_reservation "znver1_fp_insn" 1
437 (and (eq_attr "cpu" "znver1")
438 (eq_attr "type" "mmx"))
439 "znver1-direct,znver1-fpu")
441 (define_insn_reservation "znver1_mmx_add" 1
442 (and (eq_attr "cpu" "znver1")
443 (and (eq_attr "type" "mmxadd")
444 (eq_attr "memory" "none")))
445 "znver1-direct,znver1-fp0|znver1-fp1|znver1-fp3")
447 (define_insn_reservation "znver1_mmx_add_load" 8
448 (and (eq_attr "cpu" "znver1")
449 (and (eq_attr "type" "mmxadd")
450 (eq_attr "memory" "load")))
451 "znver1-direct,znver1-load,znver1-fp0|znver1-fp1|znver1-fp3")
453 (define_insn_reservation "znver1_mmx_cmp" 1
454 (and (eq_attr "cpu" "znver1")
455 (and (eq_attr "type" "mmxcmp")
456 (eq_attr "memory" "none")))
457 "znver1-direct,znver1-fp0|znver1-fp3")
459 (define_insn_reservation "znver1_mmx_cmp_load" 8
460 (and (eq_attr "cpu" "znver1")
461 (and (eq_attr "type" "mmxcmp")
462 (eq_attr "memory" "load")))
463 "znver1-direct,znver1-load,znver1-fp0|znver1-fp3")
465 (define_insn_reservation "znver1_mmx_cvt_pck_shuf" 1
466 (and (eq_attr "cpu" "znver1")
467 (and (eq_attr "type" "mmxcvt,sseshuf,sseshuf1")
468 (eq_attr "memory" "none")))
469 "znver1-direct,znver1-fp1|znver1-fp2")
471 (define_insn_reservation "znver1_mmx_cvt_pck_shuf_load" 8
472 (and (eq_attr "cpu" "znver1")
473 (and (eq_attr "type" "mmxcvt,sseshuf,sseshuf1")
474 (eq_attr "memory" "load")))
475 "znver1-direct,znver1-load,znver1-fp1|znver1-fp2")
477 (define_insn_reservation "znver1_mmx_shift_move" 1
478 (and (eq_attr "cpu" "znver1")
479 (and (eq_attr "type" "mmxshft,mmxmov")
480 (eq_attr "memory" "none")))
481 "znver1-direct,znver1-fp2")
483 (define_insn_reservation "znver1_mmx_shift_move_load" 8
484 (and (eq_attr "cpu" "znver1")
485 (and (eq_attr "type" "mmxshft,mmxmov")
486 (eq_attr "memory" "load")))
487 "znver1-direct,znver1-load,znver1-fp2")
489 (define_insn_reservation "znver1_mmx_move_store" 1
490 (and (eq_attr "cpu" "znver1")
491 (and (eq_attr "type" "mmxshft,mmxmov")
492 (eq_attr "memory" "store,both")))
493 "znver1-direct,znver1-fp2,znver1-store")
495 (define_insn_reservation "znver1_mmx_mul" 3
496 (and (eq_attr "cpu" "znver1")
497 (and (eq_attr "type" "mmxmul")
498 (eq_attr "memory" "none")))
499 "znver1-direct,znver1-fp0*3")
501 (define_insn_reservation "znver1_mmx_load" 10
502 (and (eq_attr "cpu" "znver1")
503 (and (eq_attr "type" "mmxmul")
504 (eq_attr "memory" "load")))
505 "znver1-direct,znver1-load,znver1-fp0*3")
507 (define_insn_reservation "znver1_avx256_log" 1
508 (and (eq_attr "cpu" "znver1")
509 (and (eq_attr "mode" "V8SF,V4DF,OI")
510 (and (eq_attr "type" "sselog")
511 (eq_attr "memory" "none"))))
512 "znver1-double,znver1-fpu")
514 (define_insn_reservation "znver1_avx256_log_load" 8
515 (and (eq_attr "cpu" "znver1")
516 (and (eq_attr "mode" "V8SF,V4DF,OI")
517 (and (eq_attr "type" "sselog")
518 (eq_attr "memory" "load"))))
519 "znver1-double,znver1-load,znver1-fpu")
521 (define_insn_reservation "znver1_sse_log" 1
522 (and (eq_attr "cpu" "znver1")
523 (and (eq_attr "type" "sselog")
524 (eq_attr "memory" "none")))
525 "znver1-direct,znver1-fpu")
527 (define_insn_reservation "znver1_sse_log_load" 8
528 (and (eq_attr "cpu" "znver1")
529 (and (eq_attr "type" "sselog")
530 (eq_attr "memory" "load")))
531 "znver1-direct,znver1-load,znver1-fpu")
533 (define_insn_reservation "znver1_avx256_log1" 1
534 (and (eq_attr "cpu" "znver1")
535 (and (eq_attr "mode" "V8SF,V4DF,OI")
536 (and (eq_attr "type" "sselog1")
537 (eq_attr "memory" "none"))))
538 "znver1-double,znver1-fp1|znver1-fp2")
540 (define_insn_reservation "znver1_avx256_log1_load" 8
541 (and (eq_attr "cpu" "znver1")
542 (and (eq_attr "mode" "V8SF,V4DF,OI")
543 (and (eq_attr "type" "sselog1")
544 (eq_attr "memory" "!none"))))
545 "znver1-double,znver1-load,znver1-fp1|znver1-fp2")
547 (define_insn_reservation "znver1_sse_log1" 1
548 (and (eq_attr "cpu" "znver1")
549 (and (eq_attr "type" "sselog1")
550 (eq_attr "memory" "none")))
551 "znver1-direct,znver1-fp1|znver1-fp2")
553 (define_insn_reservation "znver1_sse_log1_load" 8
554 (and (eq_attr "cpu" "znver1")
555 (and (eq_attr "type" "sselog1")
556 (eq_attr "memory" "!none")))
557 "znver1-direct,znver1-load,znver1-fp1|znver1-fp2")
559 (define_insn_reservation "znver1_sse_comi" 1
560 (and (eq_attr "cpu" "znver1")
561 (and (eq_attr "mode" "SF,DF,V4SF,V2DF")
562 (and (eq_attr "prefix" "!vex")
563 (and (eq_attr "prefix_extra" "0")
564 (and (eq_attr "type" "ssecomi")
565 (eq_attr "memory" "none"))))))
566 "znver1-direct,znver1-fp0|znver1-fp1")
568 (define_insn_reservation "znver1_sse_comi_load" 8
569 (and (eq_attr "cpu" "znver1")
570 (and (eq_attr "mode" "SF,DF,V4SF,V2DF")
571 (and (eq_attr "prefix" "!vex")
572 (and (eq_attr "prefix_extra" "0")
573 (and (eq_attr "type" "ssecomi")
574 (eq_attr "memory" "load"))))))
575 "znver1-direct,znver1-load,znver1-fp0|znver1-fp1")
577 (define_insn_reservation "znver1_sse_comi_double" 2
578 (and (eq_attr "cpu" "znver1")
579 (and (eq_attr "mode" "V4SF,V2DF,TI")
580 (and (eq_attr "prefix" "vex")
581 (and (eq_attr "prefix_extra" "0")
582 (and (eq_attr "type" "ssecomi")
583 (eq_attr "memory" "none"))))))
584 "znver1-double,znver1-fp0|znver1-fp1")
586 (define_insn_reservation "znver1_sse_comi_double_load" 10
587 (and (eq_attr "cpu" "znver1")
588 (and (eq_attr "mode" "V4SF,V2DF,TI")
589 (and (eq_attr "prefix" "vex")
590 (and (eq_attr "prefix_extra" "0")
591 (and (eq_attr "type" "ssecomi")
592 (eq_attr "memory" "load"))))))
593 "znver1-double,znver1-load,znver1-fp0|znver1-fp1")
595 (define_insn_reservation "znver1_sse_test" 1
596 (and (eq_attr "cpu" "znver1")
597 (and (eq_attr "mode" "SF,DF,V4SF,V2DF,TI")
598 (and (eq_attr "prefix_extra" "1")
599 (and (eq_attr "type" "ssecomi")
600 (eq_attr "memory" "none")))))
601 "znver1-direct,znver1-fp1|znver1-fp2")
603 (define_insn_reservation "znver1_sse_test_load" 8
604 (and (eq_attr "cpu" "znver1")
605 (and (eq_attr "mode" "SF,DF,V4SF,V2DF,TI")
606 (and (eq_attr "prefix_extra" "1")
607 (and (eq_attr "type" "ssecomi")
608 (eq_attr "memory" "load")))))
609 "znver1-direct,znver1-load,znver1-fp1|znver1-fp2")
612 ;; Fix me: Need to revist this again some of the moves may be restricted
613 ;; to some fpu pipes.
614 (define_insn_reservation "znver1_sse_mov" 2
615 (and (eq_attr "cpu" "znver1")
616 (and (eq_attr "mode" "SI")
617 (and (eq_attr "isa" "avx")
618 (and (eq_attr "type" "ssemov")
619 (eq_attr "memory" "none")))))
620 "znver1-direct,znver1-ieu0")
622 (define_insn_reservation "znver1_avx_mov" 2
623 (and (eq_attr "cpu" "znver1")
624 (and (eq_attr "mode" "TI")
625 (and (eq_attr "isa" "avx")
626 (and (eq_attr "type" "ssemov")
627 (and (match_operand:SI 1 "register_operand")
628 (eq_attr "memory" "none"))))))
629 "znver1-direct,znver1-ieu2")
631 (define_insn_reservation "znver1_sseavx_mov" 1
632 (and (eq_attr "cpu" "znver1")
633 (and (eq_attr "mode" "SF,DF,V4SF,V2DF,TI")
634 (and (eq_attr "type" "ssemov")
635 (eq_attr "memory" "none"))))
636 "znver1-direct,znver1-fpu")
638 (define_insn_reservation "znver1_sseavx_mov_store" 1
639 (and (eq_attr "cpu" "znver1")
640 (and (eq_attr "mode" "SF,DF,V4SF,V2DF,TI")
641 (and (eq_attr "type" "ssemov")
642 (eq_attr "memory" "store"))))
643 "znver1-direct,znver1-fpu,znver1-store")
645 (define_insn_reservation "znver1_sseavx_mov_load" 8
646 (and (eq_attr "cpu" "znver1")
647 (and (eq_attr "mode" "SF,DF,V4SF,V2DF,TI")
648 (and (eq_attr "type" "ssemov")
649 (eq_attr "memory" "load"))))
650 "znver1-direct,znver1-load,znver1-fpu")
652 (define_insn_reservation "znver1_avx256_mov" 1
653 (and (eq_attr "cpu" "znver1")
654 (and (eq_attr "mode" "V8SF,V4DF,OI")
655 (and (eq_attr "type" "ssemov")
656 (eq_attr "memory" "none"))))
657 "znver1-double,znver1-fpu")
659 (define_insn_reservation "znver1_avx256_mov_store" 1
660 (and (eq_attr "cpu" "znver1")
661 (and (eq_attr "mode" "V8SF,V4DF,OI")
662 (and (eq_attr "type" "ssemov")
663 (eq_attr "memory" "store"))))
664 "znver1-double,znver1-fpu,znver1-store")
666 (define_insn_reservation "znver1_avx256_mov_load" 8
667 (and (eq_attr "cpu" "znver1")
668 (and (eq_attr "mode" "V8SF,V4DF,OI")
669 (and (eq_attr "type" "ssemov")
670 (eq_attr "memory" "load"))))
671 "znver1-double,znver1-load,znver1-fpu")
674 (define_insn_reservation "znver1_sseavx_add" 3
675 (and (eq_attr "cpu" "znver1")
676 (and (eq_attr "mode" "SF,DF,V4SF,V2DF,TI")
677 (and (eq_attr "type" "sseadd")
678 (eq_attr "memory" "none"))))
679 "znver1-direct,znver1-fp2|znver1-fp3")
681 (define_insn_reservation "znver1_sseavx_add_load" 10
682 (and (eq_attr "cpu" "znver1")
683 (and (eq_attr "mode" "SF,DF,V4SF,V2DF,TI")
684 (and (eq_attr "type" "sseadd")
685 (eq_attr "memory" "load"))))
686 "znver1-direct,znver1-load,znver1-fp2|znver1-fp3")
688 (define_insn_reservation "znver1_avx256_add" 3
689 (and (eq_attr "cpu" "znver1")
690 (and (eq_attr "mode" "V8SF,V4DF,OI")
691 (and (eq_attr "type" "sseadd")
692 (eq_attr "memory" "none"))))
693 "znver1-double,znver1-fp2|znver1-fp3")
695 (define_insn_reservation "znver1_avx256_add_load" 10
696 (and (eq_attr "cpu" "znver1")
697 (and (eq_attr "mode" "V8SF,V4DF,OI")
698 (and (eq_attr "type" "sseadd")
699 (eq_attr "memory" "load"))))
700 "znver1-double,znver1-load,znver1-fp2|znver1-fp3")
702 (define_insn_reservation "znver1_sseavx_fma" 5
703 (and (eq_attr "cpu" "znver1")
704 (and (eq_attr "mode" "SF,DF,V4SF,V2DF")
705 (and (eq_attr "type" "ssemuladd")
706 (eq_attr "memory" "none"))))
707 "znver1-direct,znver1-fp0|znver1-fp1")
709 (define_insn_reservation "znver1_sseavx_fma_load" 12
710 (and (eq_attr "cpu" "znver1")
711 (and (eq_attr "mode" "SF,DF,V4SF,V2DF")
712 (and (eq_attr "type" "ssemuladd")
713 (eq_attr "memory" "load"))))
714 "znver1-direct,znver1-load,znver1-fp0|znver1-fp1")
716 (define_insn_reservation "znver1_avx256_fma" 5
717 (and (eq_attr "cpu" "znver1")
718 (and (eq_attr "mode" "V8SF,V4DF")
719 (and (eq_attr "type" "ssemuladd")
720 (eq_attr "memory" "none"))))
721 "znver1-double,znver1-fp0|znver1-fp1")
723 (define_insn_reservation "znver1_avx256_fma_load" 12
724 (and (eq_attr "cpu" "znver1")
725 (and (eq_attr "mode" "V8SF,V4DF")
726 (and (eq_attr "type" "ssemuladd")
727 (eq_attr "memory" "load"))))
728 "znver1-double,znver1-load,znver1-fp0|znver1-fp1")
730 (define_insn_reservation "znver1_sseavx_iadd" 1
731 (and (eq_attr "cpu" "znver1")
732 (and (eq_attr "mode" "DI,TI")
733 (and (eq_attr "type" "sseiadd")
734 (eq_attr "memory" "none"))))
735 "znver1-direct,znver1-fp0|znver1-fp1|znver1-fp3")
737 (define_insn_reservation "znver1_sseavx_iadd_load" 8
738 (and (eq_attr "cpu" "znver1")
739 (and (eq_attr "mode" "DI,TI")
740 (and (eq_attr "type" "sseiadd")
741 (eq_attr "memory" "load"))))
742 "znver1-direct,znver1-load,znver1-fp0|znver1-fp1|znver1-fp3")
744 (define_insn_reservation "znver1_avx256_iadd" 1
745 (and (eq_attr "cpu" "znver1")
746 (and (eq_attr "mode" "OI")
747 (and (eq_attr "type" "sseiadd")
748 (eq_attr "memory" "none"))))
749 "znver1-double,znver1-fp0|znver1-fp1|znver1-fp3")
751 (define_insn_reservation "znver1_avx256_iadd_load" 8
752 (and (eq_attr "cpu" "znver1")
753 (and (eq_attr "mode" "OI")
754 (and (eq_attr "type" "sseiadd")
755 (eq_attr "memory" "load"))))
756 "znver1-double,znver1-load,znver1-fp0|znver1-fp1|znver1-fp3")
759 (define_insn_reservation "znver1_ssecvtsf_si_load" 12
760 (and (eq_attr "cpu" "znver1")
761 (and (eq_attr "mode" "SI")
762 (and (eq_attr "type" "sseicvt")
763 (and (match_operand:SF 1 "memory_operand")
764 (eq_attr "memory" "load")))))
765 "znver1-double,znver1-load,znver1-fp3,znver1-ieu0")
767 (define_insn_reservation "znver1_ssecvtdf_si" 5
768 (and (eq_attr "cpu" "znver1")
769 (and (eq_attr "mode" "SI")
770 (and (match_operand:DF 1 "register_operand")
771 (and (eq_attr "type" "sseicvt")
772 (eq_attr "memory" "none")))))
773 "znver1-double,znver1-fp3,znver1-ieu0")
775 (define_insn_reservation "znver1_ssecvtdf_si_load" 12
776 (and (eq_attr "cpu" "znver1")
777 (and (eq_attr "mode" "SI")
778 (and (eq_attr "type" "sseicvt")
779 (and (match_operand:DF 1 "memory_operand")
780 (eq_attr "memory" "load")))))
781 "znver1-double,znver1-load,znver1-fp3,znver1-ieu0")
783 ;; All other used ssecvt fp3 pipes
784 ;; Check: Need to revisit this again.
785 ;; Some SSE converts may use different pipe combinations.
786 (define_insn_reservation "znver1_ssecvt" 4
787 (and (eq_attr "cpu" "znver1")
788 (and (eq_attr "type" "ssecvt")
789 (eq_attr "memory" "none")))
790 "znver1-direct,znver1-fp3")
792 (define_insn_reservation "znver1_ssecvt_load" 11
793 (and (eq_attr "cpu" "znver1")
794 (and (eq_attr "type" "ssecvt")
795 (eq_attr "memory" "load")))
796 "znver1-direct,znver1-load,znver1-fp3")
799 (define_insn_reservation "znver1_ssediv_ss_ps" 10
800 (and (eq_attr "cpu" "znver1")
801 (and (eq_attr "mode" "V4SF,SF")
802 (and (eq_attr "type" "ssediv")
803 (eq_attr "memory" "none"))))
804 "znver1-direct,znver1-fp3*10")
806 (define_insn_reservation "znver1_ssediv_ss_ps_load" 17
807 (and (eq_attr "cpu" "znver1")
808 (and (eq_attr "mode" "V4SF,SF")
809 (and (eq_attr "type" "ssediv")
810 (eq_attr "memory" "load"))))
811 "znver1-direct,znver1-load,znver1-fp3*10")
813 (define_insn_reservation "znver1_ssediv_sd_pd" 13
814 (and (eq_attr "cpu" "znver1")
815 (and (eq_attr "mode" "V2DF,DF")
816 (and (eq_attr "type" "ssediv")
817 (eq_attr "memory" "none"))))
818 "znver1-direct,znver1-fp3*13")
820 (define_insn_reservation "znver1_ssediv_sd_pd_load" 20
821 (and (eq_attr "cpu" "znver1")
822 (and (eq_attr "mode" "V2DF,DF")
823 (and (eq_attr "type" "ssediv")
824 (eq_attr "memory" "load"))))
825 "znver1-direct,znver1-load,znver1-fp3*13")
827 (define_insn_reservation "znver1_ssediv_avx256_ps" 12
828 (and (eq_attr "cpu" "znver1")
829 (and (eq_attr "mode" "V8SF")
830 (and (eq_attr "memory" "none")
831 (eq_attr "type" "ssediv"))))
832 "znver1-double,znver1-fp3*12")
834 (define_insn_reservation "znver1_ssediv_avx256_ps_load" 19
835 (and (eq_attr "cpu" "znver1")
836 (and (eq_attr "mode" "V8SF")
837 (and (eq_attr "type" "ssediv")
838 (eq_attr "memory" "load"))))
839 "znver1-double,znver1-load,znver1-fp3*12")
841 (define_insn_reservation "znver1_ssediv_avx256_pd" 15
842 (and (eq_attr "cpu" "znver1")
843 (and (eq_attr "mode" "V4DF")
844 (and (eq_attr "type" "ssediv")
845 (eq_attr "memory" "none"))))
846 "znver1-double,znver1-fp3*15")
848 (define_insn_reservation "znver1_ssediv_avx256_pd_load" 22
849 (and (eq_attr "cpu" "znver1")
850 (and (eq_attr "mode" "V4DF")
851 (and (eq_attr "type" "ssediv")
852 (eq_attr "memory" "load"))))
853 "znver1-double,znver1-load,znver1-fp3*15")
855 (define_insn_reservation "znver1_ssemul_ss_ps" 3
856 (and (eq_attr "cpu" "znver1")
857 (and (eq_attr "mode" "V4SF,SF")
858 (and (eq_attr "type" "ssemul")
859 (eq_attr "memory" "none"))))
860 "znver1-direct,(znver1-fp0|znver1-fp1)*3")
862 (define_insn_reservation "znver1_ssemul_ss_ps_load" 10
863 (and (eq_attr "cpu" "znver1")
864 (and (eq_attr "mode" "V4SF,SF")
865 (and (eq_attr "type" "ssemul")
866 (eq_attr "memory" "load"))))
867 "znver1-direct,znver1-load,(znver1-fp0|znver1-fp1)*3")
869 (define_insn_reservation "znver1_ssemul_avx256_ps" 3
870 (and (eq_attr "cpu" "znver1")
871 (and (eq_attr "mode" "V8SF")
872 (and (eq_attr "type" "ssemul")
873 (eq_attr "memory" "none"))))
874 "znver1-double,(znver1-fp0|znver1-fp1)*3")
876 (define_insn_reservation "znver1_ssemul_avx256_ps_load" 10
877 (and (eq_attr "cpu" "znver1")
878 (and (eq_attr "mode" "V8SF")
879 (and (eq_attr "type" "ssemul")
880 (eq_attr "memory" "load"))))
881 "znver1-double,znver1-load,(znver1-fp0|znver1-fp1)*3")
883 (define_insn_reservation "znver1_ssemul_sd_pd" 4
884 (and (eq_attr "cpu" "znver1")
885 (and (eq_attr "mode" "V2DF,DF")
886 (and (eq_attr "type" "ssemul")
887 (eq_attr "memory" "none"))))
888 "znver1-direct,(znver1-fp0|znver1-fp1)*4")
890 (define_insn_reservation "znver1_ssemul_sd_pd_load" 11
891 (and (eq_attr "cpu" "znver1")
892 (and (eq_attr "mode" "V2DF,DF")
893 (and (eq_attr "type" "ssemul")
894 (eq_attr "memory" "load"))))
895 "znver1-direct,znver1-load,(znver1-fp0|znver1-fp1)*4")
897 (define_insn_reservation "znver1_ssemul_avx256_pd" 5
898 (and (eq_attr "cpu" "znver1")
899 (and (eq_attr "mode" "V4DF")
900 (and (eq_attr "mode" "V4DF")
901 (and (eq_attr "type" "ssemul")
902 (eq_attr "memory" "none")))))
903 "znver1-double,(znver1-fp0|znver1-fp1)*4")
905 (define_insn_reservation "znver1_ssemul_avx256_pd_load" 12
906 (and (eq_attr "cpu" "znver1")
907 (and (eq_attr "mode" "V4DF")
908 (and (eq_attr "type" "ssemul")
909 (eq_attr "memory" "load"))))
910 "znver1-double,znver1-load,(znver1-fp0|znver1-fp1)*4")
913 (define_insn_reservation "znver1_sseimul" 3
914 (and (eq_attr "cpu" "znver1")
915 (and (eq_attr "mode" "TI")
916 (and (eq_attr "type" "sseimul")
917 (eq_attr "memory" "none"))))
918 "znver1-direct,znver1-fp0*3")
920 (define_insn_reservation "znver1_sseimul_avx256" 4
921 (and (eq_attr "cpu" "znver1")
922 (and (eq_attr "mode" "OI")
923 (and (eq_attr "type" "sseimul")
924 (eq_attr "memory" "none"))))
925 "znver1-double,znver1-fp0*4")
927 (define_insn_reservation "znver1_sseimul_load" 10
928 (and (eq_attr "cpu" "znver1")
929 (and (eq_attr "mode" "TI")
930 (and (eq_attr "type" "sseimul")
931 (eq_attr "memory" "load"))))
932 "znver1-direct,znver1-load,znver1-fp0*3")
934 (define_insn_reservation "znver1_sseimul_avx256_load" 11
935 (and (eq_attr "cpu" "znver1")
936 (and (eq_attr "mode" "OI")
937 (and (eq_attr "type" "sseimul")
938 (eq_attr "memory" "load"))))
939 "znver1-double,znver1-load,znver1-fp0*4")
941 (define_insn_reservation "znver1_sseimul_di" 3
942 (and (eq_attr "cpu" "znver1")
943 (and (eq_attr "mode" "DI")
944 (and (eq_attr "memory" "none")
945 (eq_attr "type" "sseimul"))))
946 "znver1-direct,znver1-fp0*3")
948 (define_insn_reservation "znver1_sseimul_load_di" 10
949 (and (eq_attr "cpu" "znver1")
950 (and (eq_attr "mode" "DI")
951 (and (eq_attr "type" "sseimul")
952 (eq_attr "memory" "load"))))
953 "znver1-direct,znver1-load,znver1-fp0*3")
956 (define_insn_reservation "znver1_sse_cmp" 1
957 (and (eq_attr "cpu" "znver1")
958 (and (eq_attr "mode" "SF,DF,V4SF,V2DF")
959 (and (eq_attr "type" "ssecmp")
960 (eq_attr "memory" "none"))))
961 "znver1-direct,znver1-fp0|znver1-fp1")
963 (define_insn_reservation "znver1_sse_cmp_load" 8
964 (and (eq_attr "cpu" "znver1")
965 (and (eq_attr "mode" "SF,DF,V4SF,V2DF")
966 (and (eq_attr "type" "ssecmp")
967 (eq_attr "memory" "load"))))
968 "znver1-direct,znver1-load,znver1-fp0|znver1-fp1")
970 (define_insn_reservation "znver1_sse_cmp_avx256" 1
971 (and (eq_attr "cpu" "znver1")
972 (and (eq_attr "mode" "V8SF,V4DF")
973 (and (eq_attr "type" "ssecmp")
974 (eq_attr "memory" "none"))))
975 "znver1-double,znver1-fp0|znver1-fp1")
977 (define_insn_reservation "znver1_sse_cmp_avx256_load" 8
978 (and (eq_attr "cpu" "znver1")
979 (and (eq_attr "mode" "V8SF,V4DF")
980 (and (eq_attr "type" "ssecmp")
981 (eq_attr "memory" "load"))))
982 "znver1-double,znver1-load,znver1-fp0|znver1-fp1")
984 (define_insn_reservation "znver1_sse_icmp" 1
985 (and (eq_attr "cpu" "znver1")
986 (and (eq_attr "mode" "QI,HI,SI,DI,TI")
987 (and (eq_attr "type" "ssecmp")
988 (eq_attr "memory" "none"))))
989 "znver1-direct,znver1-fp0|znver1-fp3")
991 (define_insn_reservation "znver1_sse_icmp_load" 8
992 (and (eq_attr "cpu" "znver1")
993 (and (eq_attr "mode" "QI,HI,SI,DI,TI")
994 (and (eq_attr "type" "ssecmp")
995 (eq_attr "memory" "load"))))
996 "znver1-direct,znver1-load,znver1-fp0|znver1-fp3")
998 (define_insn_reservation "znver1_sse_icmp_avx256" 1
999 (and (eq_attr "cpu" "znver1")
1000 (and (eq_attr "mode" "OI")
1001 (and (eq_attr "type" "ssecmp")
1002 (eq_attr "memory" "none"))))
1003 "znver1-double,znver1-fp0|znver1-fp3")
1005 (define_insn_reservation "znver1_sse_icmp_avx256_load" 8
1006 (and (eq_attr "cpu" "znver1")
1007 (and (eq_attr "mode" "OI")
1008 (and (eq_attr "type" "ssecmp")
1009 (eq_attr "memory" "load"))))
1010 "znver1-double,znver1-load,znver1-fp0|znver1-fp3")