]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/config/rs6000/power6.md
Update copyright years.
[thirdparty/gcc.git] / gcc / config / rs6000 / power6.md
CommitLineData
44cd321e 1;; Scheduling description for IBM POWER6 processor.
8d9254fc 2;; Copyright (C) 2006-2020 Free Software Foundation, Inc.
44cd321e
PS
3;; Contributed by Peter Steinmetz (steinmtz@us.ibm.com)
4;;
5;; This file is part of GCC.
6;;
7;; GCC is free software; you can redistribute it and/or modify it
8;; under the terms of the GNU General Public License as published
2f83c7d6 9;; by the Free Software Foundation; either version 3, or (at your
44cd321e
PS
10;; option) any later version.
11;;
12;; GCC is distributed in the hope that it will be useful, but WITHOUT
13;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
14;; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
15;; License for more details.
16;;
17;; You should have received a copy of the GNU General Public License
2f83c7d6
NC
18;; along with GCC; see the file COPYING3. If not see
19;; <http://www.gnu.org/licenses/>.
44cd321e
PS
20
21;; Sources:
22
23;; The POWER6 has 2 iu, 2 fpu, 2 lsu, and 1 bu/cru unit per engine
24;; (2 engines per chip). The chip can issue up to 5 internal ops
25;; per cycle.
26
27(define_automaton "power6iu,power6lsu,power6fpu,power6bu")
28
29(define_cpu_unit "iu1_power6,iu2_power6" "power6iu")
30(define_cpu_unit "lsu1_power6,lsu2_power6" "power6lsu")
31(define_cpu_unit "bpu_power6" "power6bu")
32(define_cpu_unit "fpu1_power6,fpu2_power6" "power6fpu")
33
34(define_reservation "LS2_power6"
35 "lsu1_power6+lsu2_power6")
36
37(define_reservation "FPU_power6"
38 "fpu1_power6|fpu2_power6")
39
40(define_reservation "BRU_power6"
41 "bpu_power6")
42
43(define_reservation "LSU_power6"
44 "lsu1_power6|lsu2_power6")
45
46(define_reservation "LSF_power6"
47 "(lsu1_power6+fpu1_power6)\
48 |(lsu1_power6+fpu2_power6)\
49 |(lsu2_power6+fpu1_power6)\
50 |(lsu2_power6+fpu2_power6)")
51
52(define_reservation "LX2_power6"
53 "(iu1_power6+iu2_power6+lsu1_power6)\
54 |(iu1_power6+iu2_power6+lsu2_power6)")
55
56(define_reservation "FX2_power6"
57 "iu1_power6+iu2_power6")
58
59(define_reservation "X2F_power6"
60 "(iu1_power6+iu2_power6+fpu1_power6)\
61 |(iu1_power6+iu2_power6+fpu2_power6)")
62
63(define_reservation "BX2_power6"
64 "iu1_power6+iu2_power6+bpu_power6")
65
66(define_reservation "LSX_power6"
67 "(iu1_power6+lsu1_power6)\
68 |(iu1_power6+lsu2_power6)\
69 |(iu2_power6+lsu1_power6)\
70 |(iu2_power6+lsu2_power6)")
71
72(define_reservation "FXU_power6"
73 "iu1_power6|iu2_power6")
74
75(define_reservation "XLF_power6"
76 "(iu1_power6+lsu1_power6+fpu1_power6)\
77 |(iu1_power6+lsu1_power6+fpu2_power6)\
78 |(iu1_power6+lsu2_power6+fpu1_power6)\
79 |(iu1_power6+lsu2_power6+fpu2_power6)\
80 |(iu2_power6+lsu1_power6+fpu1_power6)\
81 |(iu2_power6+lsu1_power6+fpu2_power6)\
82 |(iu2_power6+lsu2_power6+fpu1_power6)\
83 |(iu2_power6+lsu2_power6+fpu2_power6)")
84
85(define_reservation "BRX_power6"
86 "(bpu_power6+iu1_power6)\
87 |(bpu_power6+iu2_power6)")
88
89; Load/store
90
91; The default for a value written by a fixed point load
92; that is read/written by a subsequent fixed point op.
93(define_insn_reservation "power6-load" 2 ; fx
94 (and (eq_attr "type" "load")
d839f53b
SB
95 (eq_attr "sign_extend" "no")
96 (eq_attr "update" "no")
44cd321e
PS
97 (eq_attr "cpu" "power6"))
98 "LSU_power6")
99
100; define the bypass for the case where the value written
101; by a fixed point load is used as the source value on
102; a store.
103(define_bypass 1 "power6-load,\
104 power6-load-update,\
105 power6-load-update-indexed"
106 "power6-store,\
107 power6-store-update,\
108 power6-store-update-indexed,\
109 power6-fpstore,\
110 power6-fpstore-update"
6ba86ba7 111 "rs6000_store_data_bypass_p")
44cd321e
PS
112
113(define_insn_reservation "power6-load-ext" 4 ; fx
d839f53b
SB
114 (and (eq_attr "type" "load")
115 (eq_attr "sign_extend" "yes")
116 (eq_attr "update" "no")
44cd321e
PS
117 (eq_attr "cpu" "power6"))
118 "LSU_power6")
119
120; define the bypass for the case where the value written
121; by a fixed point load ext is used as the source value on
122; a store.
123(define_bypass 1 "power6-load-ext,\
124 power6-load-ext-update,\
125 power6-load-ext-update-indexed"
126 "power6-store,\
127 power6-store-update,\
128 power6-store-update-indexed,\
129 power6-fpstore,\
130 power6-fpstore-update"
6ba86ba7 131 "rs6000_store_data_bypass_p")
44cd321e
PS
132
133(define_insn_reservation "power6-load-update" 2 ; fx
d839f53b
SB
134 (and (eq_attr "type" "load")
135 (eq_attr "sign_extend" "no")
136 (eq_attr "update" "yes")
137 (eq_attr "indexed" "no")
44cd321e
PS
138 (eq_attr "cpu" "power6"))
139 "LSX_power6")
140
141(define_insn_reservation "power6-load-update-indexed" 2 ; fx
d839f53b
SB
142 (and (eq_attr "type" "load")
143 (eq_attr "sign_extend" "no")
144 (eq_attr "update" "yes")
145 (eq_attr "indexed" "yes")
44cd321e
PS
146 (eq_attr "cpu" "power6"))
147 "LSX_power6")
148
149(define_insn_reservation "power6-load-ext-update" 4 ; fx
d839f53b
SB
150 (and (eq_attr "type" "load")
151 (eq_attr "sign_extend" "yes")
152 (eq_attr "update" "yes")
153 (eq_attr "indexed" "no")
44cd321e
PS
154 (eq_attr "cpu" "power6"))
155 "LSX_power6")
156
157(define_insn_reservation "power6-load-ext-update-indexed" 4 ; fx
d839f53b
SB
158 (and (eq_attr "type" "load")
159 (eq_attr "sign_extend" "yes")
160 (eq_attr "update" "yes")
161 (eq_attr "indexed" "yes")
44cd321e
PS
162 (eq_attr "cpu" "power6"))
163 "LSX_power6")
164
165(define_insn_reservation "power6-fpload" 1
166 (and (eq_attr "type" "fpload")
d839f53b 167 (eq_attr "update" "no")
44cd321e
PS
168 (eq_attr "cpu" "power6"))
169 "LSU_power6")
170
171(define_insn_reservation "power6-fpload-update" 1
d839f53b
SB
172 (and (eq_attr "type" "fpload")
173 (eq_attr "update" "yes")
44cd321e
PS
174 (eq_attr "cpu" "power6"))
175 "LSX_power6")
176
177(define_insn_reservation "power6-store" 14
178 (and (eq_attr "type" "store")
d839f53b 179 (eq_attr "update" "no")
44cd321e
PS
180 (eq_attr "cpu" "power6"))
181 "LSU_power6")
182
183(define_insn_reservation "power6-store-update" 14
d839f53b
SB
184 (and (eq_attr "type" "store")
185 (eq_attr "update" "yes")
186 (eq_attr "indexed" "no")
44cd321e
PS
187 (eq_attr "cpu" "power6"))
188 "LSX_power6")
189
190(define_insn_reservation "power6-store-update-indexed" 14
d839f53b
SB
191 (and (eq_attr "type" "store")
192 (eq_attr "update" "yes")
193 (eq_attr "indexed" "yes")
44cd321e
PS
194 (eq_attr "cpu" "power6"))
195 "LX2_power6")
196
197(define_insn_reservation "power6-fpstore" 14
198 (and (eq_attr "type" "fpstore")
d839f53b 199 (eq_attr "update" "no")
44cd321e
PS
200 (eq_attr "cpu" "power6"))
201 "LSF_power6")
202
203(define_insn_reservation "power6-fpstore-update" 14
d839f53b
SB
204 (and (eq_attr "type" "fpstore")
205 (eq_attr "update" "yes")
44cd321e
PS
206 (eq_attr "cpu" "power6"))
207 "XLF_power6")
208
209(define_insn_reservation "power6-larx" 3
210 (and (eq_attr "type" "load_l")
211 (eq_attr "cpu" "power6"))
212 "LS2_power6")
213
214(define_insn_reservation "power6-stcx" 10 ; best case
215 (and (eq_attr "type" "store_c")
216 (eq_attr "cpu" "power6"))
217 "LSX_power6")
218
219(define_insn_reservation "power6-sync" 11 ; N/A
220 (and (eq_attr "type" "sync")
221 (eq_attr "cpu" "power6"))
222 "LSU_power6")
223
224(define_insn_reservation "power6-integer" 1
0cbb4f58 225 (and (ior (eq_attr "type" "integer")
73c076c8 226 (and (eq_attr "type" "add,logical")
0cbb4f58 227 (eq_attr "dot" "no")))
44cd321e
PS
228 (eq_attr "cpu" "power6"))
229 "FXU_power6")
230
47f67e51
PB
231(define_insn_reservation "power6-isel" 1
232 (and (eq_attr "type" "isel")
233 (eq_attr "cpu" "power6"))
234 "FXU_power6")
235
44cd321e
PS
236(define_insn_reservation "power6-exts" 1
237 (and (eq_attr "type" "exts")
79430730 238 (eq_attr "dot" "no")
44cd321e
PS
239 (eq_attr "cpu" "power6"))
240 "FXU_power6")
241
242(define_insn_reservation "power6-shift" 1
243 (and (eq_attr "type" "shift")
892e7fa6
SB
244 (eq_attr "var_shift" "no")
245 (eq_attr "dot" "no")
44cd321e
PS
246 (eq_attr "cpu" "power6"))
247 "FXU_power6")
248
42533d77
EW
249(define_insn_reservation "power6-popcnt" 1
250 (and (eq_attr "type" "popcnt")
251 (eq_attr "cpu" "power6"))
252 "FXU_power6")
253
44cd321e 254(define_insn_reservation "power6-insert" 1
58ee9e66
SB
255 (and (eq_attr "type" "insert")
256 (eq_attr "size" "32")
44cd321e
PS
257 (eq_attr "cpu" "power6"))
258 "FX2_power6")
259
260(define_insn_reservation "power6-insert-dword" 1
58ee9e66
SB
261 (and (eq_attr "type" "insert")
262 (eq_attr "size" "64")
44cd321e
PS
263 (eq_attr "cpu" "power6"))
264 "FX2_power6")
265
266; define the bypass for the case where the value written
267; by a fixed point op is used as the source value on a
268; store.
269(define_bypass 1 "power6-integer,\
270 power6-exts,\
271 power6-shift,\
272 power6-insert,\
273 power6-insert-dword"
274 "power6-store,\
275 power6-store-update,\
276 power6-store-update-indexed,\
277 power6-fpstore,\
278 power6-fpstore-update"
6ba86ba7 279 "rs6000_store_data_bypass_p")
44cd321e
PS
280
281(define_insn_reservation "power6-cntlz" 2
282 (and (eq_attr "type" "cntlz")
283 (eq_attr "cpu" "power6"))
284 "FXU_power6")
285
286(define_bypass 1 "power6-cntlz"
287 "power6-store,\
288 power6-store-update,\
289 power6-store-update-indexed,\
290 power6-fpstore,\
291 power6-fpstore-update"
6ba86ba7 292 "rs6000_store_data_bypass_p")
44cd321e
PS
293
294(define_insn_reservation "power6-var-rotate" 4
892e7fa6
SB
295 (and (eq_attr "type" "shift")
296 (eq_attr "var_shift" "yes")
297 (eq_attr "dot" "no")
44cd321e
PS
298 (eq_attr "cpu" "power6"))
299 "FXU_power6")
300
301(define_insn_reservation "power6-trap" 1 ; N/A
302 (and (eq_attr "type" "trap")
303 (eq_attr "cpu" "power6"))
304 "BRX_power6")
305
306(define_insn_reservation "power6-two" 1
307 (and (eq_attr "type" "two")
308 (eq_attr "cpu" "power6"))
309 "(iu1_power6,iu1_power6)\
310 |(iu1_power6+iu2_power6,nothing)\
311 |(iu1_power6,iu2_power6)\
312 |(iu2_power6,iu1_power6)\
313 |(iu2_power6,iu2_power6)")
314
315(define_insn_reservation "power6-three" 1
316 (and (eq_attr "type" "three")
317 (eq_attr "cpu" "power6"))
318 "(iu1_power6,iu1_power6,iu1_power6)\
319 |(iu1_power6,iu1_power6,iu2_power6)\
320 |(iu1_power6,iu2_power6,iu1_power6)\
321 |(iu1_power6,iu2_power6,iu2_power6)\
322 |(iu2_power6,iu1_power6,iu1_power6)\
323 |(iu2_power6,iu1_power6,iu2_power6)\
324 |(iu2_power6,iu2_power6,iu1_power6)\
325 |(iu2_power6,iu2_power6,iu2_power6)\
326 |(iu1_power6+iu2_power6,iu1_power6)\
327 |(iu1_power6+iu2_power6,iu2_power6)\
328 |(iu1_power6,iu1_power6+iu2_power6)\
329 |(iu2_power6,iu1_power6+iu2_power6)")
330
331(define_insn_reservation "power6-cmp" 1
332 (and (eq_attr "type" "cmp")
333 (eq_attr "cpu" "power6"))
334 "FXU_power6")
335
336(define_insn_reservation "power6-compare" 1
f5ae5a23
SB
337 (and (eq_attr "type" "exts")
338 (eq_attr "dot" "yes")
44cd321e
PS
339 (eq_attr "cpu" "power6"))
340 "FXU_power6")
341
342(define_insn_reservation "power6-fast-compare" 1
73c076c8
SB
343 (and (eq_attr "type" "add,logical")
344 (eq_attr "dot" "yes")
44cd321e
PS
345 (eq_attr "cpu" "power6"))
346 "FXU_power6")
347
348; define the bypass for the case where the value written
349; by a fixed point rec form op is used as the source value
350; on a store.
351(define_bypass 1 "power6-compare,\
352 power6-fast-compare"
353 "power6-store,\
354 power6-store-update,\
355 power6-store-update-indexed,\
356 power6-fpstore,\
357 power6-fpstore-update"
6ba86ba7 358 "rs6000_store_data_bypass_p")
44cd321e
PS
359
360(define_insn_reservation "power6-delayed-compare" 2 ; N/A
892e7fa6
SB
361 (and (eq_attr "type" "shift")
362 (eq_attr "var_shift" "no")
363 (eq_attr "dot" "yes")
44cd321e
PS
364 (eq_attr "cpu" "power6"))
365 "FXU_power6")
366
367(define_insn_reservation "power6-var-delayed-compare" 4
892e7fa6
SB
368 (and (eq_attr "type" "shift")
369 (eq_attr "var_shift" "yes")
370 (eq_attr "dot" "yes")
44cd321e
PS
371 (eq_attr "cpu" "power6"))
372 "FXU_power6")
373
374(define_insn_reservation "power6-lmul-cmp" 16
e0528ed9
SB
375 (and (eq_attr "type" "mul")
376 (eq_attr "dot" "yes")
377 (eq_attr "size" "64")
44cd321e
PS
378 (eq_attr "cpu" "power6"))
379 "(iu1_power6*16+iu2_power6*16+fpu1_power6*16)\
380 |(iu1_power6*16+iu2_power6*16+fpu2_power6*16)");
381
382(define_insn_reservation "power6-imul-cmp" 16
e0528ed9
SB
383 (and (eq_attr "type" "mul")
384 (eq_attr "dot" "yes")
385 (eq_attr "size" "32")
44cd321e
PS
386 (eq_attr "cpu" "power6"))
387 "(iu1_power6*16+iu2_power6*16+fpu1_power6*16)\
388 |(iu1_power6*16+iu2_power6*16+fpu2_power6*16)");
389
390(define_insn_reservation "power6-lmul" 16
e0528ed9
SB
391 (and (eq_attr "type" "mul")
392 (eq_attr "dot" "no")
393 (eq_attr "size" "64")
44cd321e
PS
394 (eq_attr "cpu" "power6"))
395 "(iu1_power6*16+iu2_power6*16+fpu1_power6*16)\
396 |(iu1_power6*16+iu2_power6*16+fpu2_power6*16)");
397
398(define_insn_reservation "power6-imul" 16
e0528ed9
SB
399 (and (eq_attr "type" "mul")
400 (eq_attr "dot" "no")
401 (eq_attr "size" "32")
44cd321e
PS
402 (eq_attr "cpu" "power6"))
403 "(iu1_power6*16+iu2_power6*16+fpu1_power6*16)\
404 |(iu1_power6*16+iu2_power6*16+fpu2_power6*16)");
405
406(define_insn_reservation "power6-imul3" 16
e0528ed9
SB
407 (and (eq_attr "type" "mul")
408 (eq_attr "size" "8,16")
44cd321e
PS
409 (eq_attr "cpu" "power6"))
410 "(iu1_power6*16+iu2_power6*16+fpu1_power6*16)\
411 |(iu1_power6*16+iu2_power6*16+fpu2_power6*16)");
412
413(define_bypass 9 "power6-imul,\
414 power6-lmul,\
415 power6-imul-cmp,\
416 power6-lmul-cmp,\
417 power6-imul3"
418 "power6-store,\
419 power6-store-update,\
420 power6-store-update-indexed,\
421 power6-fpstore,\
422 power6-fpstore-update"
6ba86ba7 423 "rs6000_store_data_bypass_p")
44cd321e
PS
424
425(define_insn_reservation "power6-idiv" 44
441e02a5
SB
426 (and (eq_attr "type" "div")
427 (eq_attr "size" "32")
44cd321e
PS
428 (eq_attr "cpu" "power6"))
429 "(iu1_power6*44+iu2_power6*44+fpu1_power6*44)\
430 |(iu1_power6*44+iu2_power6*44+fpu2_power6*44)");
431
432; The latency for this bypass is yet to be defined
433;(define_bypass ? "power6-idiv"
434; "power6-store,\
435; power6-store-update,\
436; power6-store-update-indexed,\
437; power6-fpstore,\
438; power6-fpstore-update"
6ba86ba7 439; "rs6000_store_data_bypass_p")
44cd321e
PS
440
441(define_insn_reservation "power6-ldiv" 56
441e02a5
SB
442 (and (eq_attr "type" "div")
443 (eq_attr "size" "64")
44cd321e
PS
444 (eq_attr "cpu" "power6"))
445 "(iu1_power6*56+iu2_power6*56+fpu1_power6*56)\
446 |(iu1_power6*56+iu2_power6*56+fpu2_power6*56)");
447
448; The latency for this bypass is yet to be defined
449;(define_bypass ? "power6-ldiv"
450; "power6-store,\
451; power6-store-update,\
452; power6-store-update-indexed,\
453; power6-fpstore,\
454; power6-fpstore-update"
6ba86ba7 455; "rs6000_store_data_bypass_p")
44cd321e
PS
456
457(define_insn_reservation "power6-mtjmpr" 2
458 (and (eq_attr "type" "mtjmpr,mfjmpr")
459 (eq_attr "cpu" "power6"))
460 "BX2_power6")
461
462(define_bypass 5 "power6-mtjmpr" "power6-branch")
463
464(define_insn_reservation "power6-branch" 2
465 (and (eq_attr "type" "jmpreg,branch")
466 (eq_attr "cpu" "power6"))
467 "BRU_power6")
468
469(define_bypass 5 "power6-branch" "power6-mtjmpr")
470
471(define_insn_reservation "power6-crlogical" 3
472 (and (eq_attr "type" "cr_logical")
473 (eq_attr "cpu" "power6"))
474 "BRU_power6")
475
476(define_bypass 3 "power6-crlogical" "power6-branch")
477
44cd321e
PS
478(define_insn_reservation "power6-mfcr" 6 ; N/A
479 (and (eq_attr "type" "mfcr")
480 (eq_attr "cpu" "power6"))
481 "BX2_power6")
482
483; mfcrf (1 field)
484(define_insn_reservation "power6-mfcrf" 3 ; N/A
485 (and (eq_attr "type" "mfcrf")
486 (eq_attr "cpu" "power6"))
487 "BX2_power6") ;
488
489; mtcrf (1 field)
490(define_insn_reservation "power6-mtcr" 4 ; N/A
491 (and (eq_attr "type" "mtcr")
492 (eq_attr "cpu" "power6"))
493 "BX2_power6")
494
495(define_bypass 9 "power6-mtcr" "power6-branch")
496
497(define_insn_reservation "power6-fp" 6
eda328bf 498 (and (eq_attr "type" "fp,fpsimple,dmul,dfp")
44cd321e
PS
499 (eq_attr "cpu" "power6"))
500 "FPU_power6")
501
502; Any fp instruction that updates a CR has a latency
503; of 6 to a dependent branch
504(define_bypass 6 "power6-fp" "power6-branch")
505
506(define_bypass 1 "power6-fp"
507 "power6-fpstore,power6-fpstore-update"
6ba86ba7 508 "rs6000_store_data_bypass_p")
44cd321e
PS
509
510(define_insn_reservation "power6-fpcompare" 8
511 (and (eq_attr "type" "fpcompare")
512 (eq_attr "cpu" "power6"))
513 "FPU_power6")
514
515(define_bypass 12 "power6-fpcompare"
516 "power6-branch,power6-crlogical")
517
518(define_insn_reservation "power6-sdiv" 26
519 (and (eq_attr "type" "sdiv")
520 (eq_attr "cpu" "power6"))
521 "FPU_power6")
522
523(define_insn_reservation "power6-ddiv" 32
524 (and (eq_attr "type" "ddiv")
525 (eq_attr "cpu" "power6"))
526 "FPU_power6")
527
528(define_insn_reservation "power6-sqrt" 30
529 (and (eq_attr "type" "ssqrt")
530 (eq_attr "cpu" "power6"))
531 "FPU_power6")
532
533(define_insn_reservation "power6-dsqrt" 42
534 (and (eq_attr "type" "dsqrt")
535 (eq_attr "cpu" "power6"))
536 "FPU_power6")
537
538(define_insn_reservation "power6-isync" 2 ; N/A
539 (and (eq_attr "type" "isync")
540 (eq_attr "cpu" "power6"))
541 "FXU_power6")
542
543(define_insn_reservation "power6-vecload" 1
544 (and (eq_attr "type" "vecload")
545 (eq_attr "cpu" "power6"))
546 "LSU_power6")
547
548(define_insn_reservation "power6-vecstore" 1
549 (and (eq_attr "type" "vecstore")
550 (eq_attr "cpu" "power6"))
551 "LSF_power6")
552
553(define_insn_reservation "power6-vecsimple" 3
7c788ce2 554 (and (eq_attr "type" "vecsimple,veclogical,vecmove")
44cd321e
PS
555 (eq_attr "cpu" "power6"))
556 "FPU_power6")
557
558(define_bypass 6 "power6-vecsimple" "power6-veccomplex,\
559 power6-vecperm")
560
561(define_bypass 5 "power6-vecsimple" "power6-vecfloat")
562
563(define_bypass 4 "power6-vecsimple" "power6-vecstore" )
564
565(define_insn_reservation "power6-veccmp" 1
7c788ce2 566 (and (eq_attr "type" "veccmp,veccmpfx")
44cd321e
PS
567 (eq_attr "cpu" "power6"))
568 "FPU_power6")
569
570(define_bypass 10 "power6-veccmp" "power6-branch")
571
572(define_insn_reservation "power6-vecfloat" 7
573 (and (eq_attr "type" "vecfloat")
574 (eq_attr "cpu" "power6"))
575 "FPU_power6")
576
577(define_bypass 10 "power6-vecfloat" "power6-vecsimple")
578
579(define_bypass 11 "power6-vecfloat" "power6-veccomplex,\
580 power6-vecperm")
581
582(define_bypass 9 "power6-vecfloat" "power6-vecstore" )
583
584(define_insn_reservation "power6-veccomplex" 7
585 (and (eq_attr "type" "vecsimple")
586 (eq_attr "cpu" "power6"))
587 "FPU_power6")
588
589(define_bypass 10 "power6-veccomplex" "power6-vecsimple,\
590 power6-vecfloat" )
591
592(define_bypass 9 "power6-veccomplex" "power6-vecperm" )
593
594(define_bypass 8 "power6-veccomplex" "power6-vecstore" )
595
596(define_insn_reservation "power6-vecperm" 4
597 (and (eq_attr "type" "vecperm")
598 (eq_attr "cpu" "power6"))
599 "FPU_power6")
600
601(define_bypass 7 "power6-vecperm" "power6-vecsimple,\
602 power6-vecfloat" )
603
604(define_bypass 6 "power6-vecperm" "power6-veccomplex" )
605
606(define_bypass 5 "power6-vecperm" "power6-vecstore" )
607
608(define_insn_reservation "power6-mftgpr" 8
609 (and (eq_attr "type" "mftgpr")
610 (eq_attr "cpu" "power6"))
611 "X2F_power6")
612
613(define_insn_reservation "power6-mffgpr" 14
614 (and (eq_attr "type" "mffgpr")
615 (eq_attr "cpu" "power6"))
616 "LX2_power6")
617
618(define_bypass 4 "power6-mftgpr" "power6-imul,\
619 power6-lmul,\
620 power6-imul-cmp,\
621 power6-lmul-cmp,\
622 power6-imul3,\
623 power6-idiv,\
624 power6-ldiv" )