1 //===-- PPCSchedule.td - PowerPC Scheduling Definitions ----*- tablegen -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 //===----------------------------------------------------------------------===//
11 // Instruction Itinerary classes used for PowerPC
13 def IIC_IntSimple : InstrItinClass;
14 def IIC_IntGeneral : InstrItinClass;
15 def IIC_IntCompare : InstrItinClass;
16 def IIC_IntISEL : InstrItinClass;
17 def IIC_IntDivD : InstrItinClass;
18 def IIC_IntDivW : InstrItinClass;
19 def IIC_IntMFFS : InstrItinClass;
20 def IIC_IntMFVSCR : InstrItinClass;
21 def IIC_IntMTFSB0 : InstrItinClass;
22 def IIC_IntMTSRD : InstrItinClass;
23 def IIC_IntMulHD : InstrItinClass;
24 def IIC_IntMulHW : InstrItinClass;
25 def IIC_IntMulHWU : InstrItinClass;
26 def IIC_IntMulLI : InstrItinClass;
27 def IIC_IntRFID : InstrItinClass;
28 def IIC_IntRotateD : InstrItinClass;
29 def IIC_IntRotateDI : InstrItinClass;
30 def IIC_IntRotate : InstrItinClass;
31 def IIC_IntShift : InstrItinClass;
32 def IIC_IntTrapD : InstrItinClass;
33 def IIC_IntTrapW : InstrItinClass;
34 def IIC_BrB : InstrItinClass;
35 def IIC_BrCR : InstrItinClass;
36 def IIC_BrMCR : InstrItinClass;
37 def IIC_BrMCRX : InstrItinClass;
38 def IIC_LdStDCBA : InstrItinClass;
39 def IIC_LdStDCBF : InstrItinClass;
40 def IIC_LdStDCBI : InstrItinClass;
41 def IIC_LdStLoad : InstrItinClass;
42 def IIC_LdStLoadUpd : InstrItinClass;
43 def IIC_LdStLoadUpdX : InstrItinClass;
44 def IIC_LdStStore : InstrItinClass;
45 def IIC_LdStStoreUpd : InstrItinClass;
46 def IIC_LdStDSS : InstrItinClass;
47 def IIC_LdStICBI : InstrItinClass;
48 def IIC_LdStLD : InstrItinClass;
49 def IIC_LdStLDU : InstrItinClass;
50 def IIC_LdStLDUX : InstrItinClass;
51 def IIC_LdStLDARX : InstrItinClass;
52 def IIC_LdStLFD : InstrItinClass;
53 def IIC_LdStLFDU : InstrItinClass;
54 def IIC_LdStLFDUX : InstrItinClass;
55 def IIC_LdStLHA : InstrItinClass;
56 def IIC_LdStLHAU : InstrItinClass;
57 def IIC_LdStLHAUX : InstrItinClass;
58 def IIC_LdStLMW : InstrItinClass;
59 def IIC_LdStLVecX : InstrItinClass;
60 def IIC_LdStLWA : InstrItinClass;
61 def IIC_LdStLWARX : InstrItinClass;
62 def IIC_LdStSLBIA : InstrItinClass;
63 def IIC_LdStSLBIE : InstrItinClass;
64 def IIC_LdStSTD : InstrItinClass;
65 def IIC_LdStSTDCX : InstrItinClass;
66 def IIC_LdStSTDU : InstrItinClass;
67 def IIC_LdStSTDUX : InstrItinClass;
68 def IIC_LdStSTFD : InstrItinClass;
69 def IIC_LdStSTFDU : InstrItinClass;
70 def IIC_LdStSTVEBX : InstrItinClass;
71 def IIC_LdStSTWCX : InstrItinClass;
72 def IIC_LdStSync : InstrItinClass;
73 def IIC_SprISYNC : InstrItinClass;
74 def IIC_SprMFSR : InstrItinClass;
75 def IIC_SprMTMSR : InstrItinClass;
76 def IIC_SprMTSR : InstrItinClass;
77 def IIC_SprTLBSYNC : InstrItinClass;
78 def IIC_SprMFCR : InstrItinClass;
79 def IIC_SprMFCRF : InstrItinClass;
80 def IIC_SprMFMSR : InstrItinClass;
81 def IIC_SprMFSPR : InstrItinClass;
82 def IIC_SprMFTB : InstrItinClass;
83 def IIC_SprMTSPR : InstrItinClass;
84 def IIC_SprMTSRIN : InstrItinClass;
85 def IIC_SprRFI : InstrItinClass;
86 def IIC_SprSC : InstrItinClass;
87 def IIC_FPGeneral : InstrItinClass;
88 def IIC_FPAddSub : InstrItinClass;
89 def IIC_FPCompare : InstrItinClass;
90 def IIC_FPDivD : InstrItinClass;
91 def IIC_FPDivS : InstrItinClass;
92 def IIC_FPFused : InstrItinClass;
93 def IIC_FPRes : InstrItinClass;
94 def IIC_FPSqrtD : InstrItinClass;
95 def IIC_FPSqrtS : InstrItinClass;
96 def IIC_VecGeneral : InstrItinClass;
97 def IIC_VecFP : InstrItinClass;
98 def IIC_VecFPCompare : InstrItinClass;
99 def IIC_VecComplex : InstrItinClass;
100 def IIC_VecPerm : InstrItinClass;
101 def IIC_VecFPRound : InstrItinClass;
102 def IIC_VecVSL : InstrItinClass;
103 def IIC_VecVSR : InstrItinClass;
104 def IIC_SprMTMSRD : InstrItinClass;
105 def IIC_SprSLIE : InstrItinClass;
106 def IIC_SprSLBIE : InstrItinClass;
107 def IIC_SprSLBMTE : InstrItinClass;
108 def IIC_SprSLBMFEE : InstrItinClass;
109 def IIC_SprSLBIA : InstrItinClass;
110 def IIC_SprTLBIA : InstrItinClass;
111 def IIC_SprTLBIEL : InstrItinClass;
112 def IIC_SprTLBIE : InstrItinClass;
114 //===----------------------------------------------------------------------===//
115 // Processor instruction itineraries.
117 include "PPCScheduleG3.td"
118 include "PPCSchedule440.td"
119 include "PPCScheduleG4.td"
120 include "PPCScheduleG4Plus.td"
121 include "PPCScheduleG5.td"
122 include "PPCScheduleP7.td"
123 include "PPCScheduleP8.td"
124 include "PPCScheduleA2.td"
125 include "PPCScheduleE500mc.td"
126 include "PPCScheduleE5500.td"
128 //===----------------------------------------------------------------------===//
129 // Instruction to itinerary class map - When add new opcodes to the supported
130 // set, refer to the following table to determine which itinerary class the
133 // opcode itinerary class
134 // ====== ===============
136 // addc IIC_IntGeneral
137 // adde IIC_IntGeneral
138 // addi IIC_IntSimple
139 // addic IIC_IntGeneral
140 // addic. IIC_IntGeneral
141 // addis IIC_IntSimple
142 // addme IIC_IntGeneral
143 // addze IIC_IntGeneral
145 // andc IIC_IntSimple
146 // andi. IIC_IntGeneral
147 // andis. IIC_IntGeneral
152 // cmp IIC_IntCompare
153 // cmpi IIC_IntCompare
154 // cmpl IIC_IntCompare
155 // cmpli IIC_IntCompare
156 // cntlzd IIC_IntRotateD
157 // cntlzw IIC_IntGeneral
169 // dcbst IIC_LdStDCBF
171 // dcbtst IIC_LdStLoad
180 // eciwx IIC_LdStLoad
181 // ecowx IIC_LdStLoad
182 // eieio IIC_LdStLoad
184 // extsb IIC_IntSimple
185 // extsh IIC_IntSimple
186 // extsw IIC_IntSimple
187 // fabs IIC_FPGeneral
189 // fadds IIC_FPGeneral
190 // fcfid IIC_FPGeneral
191 // fcmpo IIC_FPCompare
192 // fcmpu IIC_FPCompare
193 // fctid IIC_FPGeneral
194 // fctidz IIC_FPGeneral
195 // fctiw IIC_FPGeneral
196 // fctiwz IIC_FPGeneral
200 // fmadds IIC_FPGeneral
203 // fmsubs IIC_FPGeneral
205 // fmuls IIC_FPGeneral
206 // fnabs IIC_FPGeneral
207 // fneg IIC_FPGeneral
208 // fnmadd IIC_FPFused
209 // fnmadds IIC_FPGeneral
210 // fnmsub IIC_FPFused
211 // fnmsubs IIC_FPGeneral
213 // frsp IIC_FPGeneral
214 // frsqrte IIC_FPGeneral
215 // fsel IIC_FPGeneral
217 // fsqrts IIC_FPSqrtS
219 // fsubs IIC_FPGeneral
222 // isync IIC_SprISYNC
224 // lbzu IIC_LdStLoadUpd
225 // lbzux IIC_LdStLoadUpdX
228 // ldarx IIC_LdStLDARX
234 // lfdux IIC_LdStLFDUX
238 // lfsux IIC_LdStLFDUX
242 // lhaux IIC_LdStLHAUX
244 // lhbrx IIC_LdStLoad
246 // lhzu IIC_LdStLoadUpd
247 // lhzux IIC_LdStLoadUpdX
252 // lvebx IIC_LdStLVecX
253 // lvehx IIC_LdStLVecX
254 // lvewx IIC_LdStLVecX
255 // lvsl IIC_LdStLVecX
256 // lvsr IIC_LdStLVecX
258 // lvxl IIC_LdStLVecX
260 // lwarx IIC_LdStLWARX
261 // lwaux IIC_LdStLHAUX
263 // lwbrx IIC_LdStLoad
265 // lwzu IIC_LdStLoadUpd
266 // lwzux IIC_LdStLoadUpdX
269 // mcrfs IIC_FPGeneral
273 // mfmsr IIC_SprMFMSR
274 // mfspr IIC_SprMFSPR
276 // mfsrin IIC_SprMFSR
278 // mfvscr IIC_IntMFVSCR
280 // mtfsb0 IIC_IntMTFSB0
281 // mtfsb1 IIC_IntMTFSB0
282 // mtfsf IIC_IntMTFSB0
283 // mtfsfi IIC_IntMTFSB0
284 // mtmsr IIC_SprMTMSR
286 // mtspr IIC_SprMTSPR
288 // mtsrd IIC_IntMTSRD
289 // mtsrdin IIC_IntMTSRD
290 // mtsrin IIC_SprMTSRIN
291 // mtvscr IIC_IntMFVSCR
292 // mulhd IIC_IntMulHD
293 // mulhdu IIC_IntMulHD
294 // mulhw IIC_IntMulHW
295 // mulhwu IIC_IntMulHWU
296 // mulld IIC_IntMulHD
297 // mulli IIC_IntMulLI
298 // mullw IIC_IntMulHW
299 // nand IIC_IntSimple
305 // oris IIC_IntSimple
308 // rldcl IIC_IntRotateD
309 // rldcr IIC_IntRotateD
310 // rldic IIC_IntRotateDI
311 // rldicl IIC_IntRotateDI
312 // rldicr IIC_IntRotateDI
313 // rldimi IIC_IntRotateDI
314 // rlwimi IIC_IntRotate
315 // rlwinm IIC_IntGeneral
316 // rlwnm IIC_IntGeneral
318 // slbia IIC_LdStSLBIA
319 // slbie IIC_LdStSLBIE
320 // sld IIC_IntRotateD
321 // slw IIC_IntGeneral
322 // srad IIC_IntRotateD
323 // sradi IIC_IntRotateDI
325 // srawi IIC_IntShift
326 // srd IIC_IntRotateD
327 // srw IIC_IntGeneral
329 // stbu IIC_LdStStoreUpd
330 // stbux IIC_LdStStoreUpd
331 // stbx IIC_LdStStore
333 // stdcx. IIC_LdStSTDCX
335 // stdux IIC_LdStSTDUX
338 // stfdu IIC_LdStSTFDU
339 // stfdux IIC_LdStSTFDU
340 // stfdx IIC_LdStSTFD
341 // stfiwx IIC_LdStSTFD
343 // stfsu IIC_LdStSTFDU
344 // stfsux IIC_LdStSTFDU
345 // stfsx IIC_LdStSTFD
347 // sthbrx IIC_LdStStore
348 // sthu IIC_LdStStoreUpd
349 // sthux IIC_LdStStoreUpd
350 // sthx IIC_LdStStore
354 // stvebx IIC_LdStSTVEBX
355 // stvehx IIC_LdStSTVEBX
356 // stvewx IIC_LdStSTVEBX
357 // stvx IIC_LdStSTVEBX
358 // stvxl IIC_LdStSTVEBX
360 // stwbrx IIC_LdStStore
361 // stwcx. IIC_LdStSTWCX
362 // stwu IIC_LdStStoreUpd
363 // stwux IIC_LdStStoreUpd
364 // stwx IIC_LdStStore
365 // subf IIC_IntGeneral
366 // subfc IIC_IntGeneral
367 // subfe IIC_IntGeneral
368 // subfic IIC_IntGeneral
369 // subfme IIC_IntGeneral
370 // subfze IIC_IntGeneral
374 // tlbia IIC_LdStSLBIA
375 // tlbie IIC_LdStDCBF
376 // tlbsync IIC_SprTLBSYNC
379 // vaddcuw IIC_VecGeneral
381 // vaddsbs IIC_VecGeneral
382 // vaddshs IIC_VecGeneral
383 // vaddsws IIC_VecGeneral
384 // vaddudm IIC_VecGeneral
385 // vaddubm IIC_VecGeneral
386 // vaddubs IIC_VecGeneral
387 // vadduhm IIC_VecGeneral
388 // vadduhs IIC_VecGeneral
389 // vadduwm IIC_VecGeneral
390 // vadduws IIC_VecGeneral
391 // vand IIC_VecGeneral
392 // vandc IIC_VecGeneral
393 // vavgsb IIC_VecGeneral
394 // vavgsh IIC_VecGeneral
395 // vavgsw IIC_VecGeneral
396 // vavgub IIC_VecGeneral
397 // vavguh IIC_VecGeneral
398 // vavguw IIC_VecGeneral
401 // vcmpbfp IIC_VecFPCompare
402 // vcmpeqfp IIC_VecFPCompare
403 // vcmpequb IIC_VecGeneral
404 // vcmpequh IIC_VecGeneral
405 // vcmpequw IIC_VecGeneral
406 // vcmpequd IIC_VecGeneral
407 // vcmpgefp IIC_VecFPCompare
408 // vcmpgtfp IIC_VecFPCompare
409 // vcmpgtsb IIC_VecGeneral
410 // vcmpgtsh IIC_VecGeneral
411 // vcmpgtsw IIC_VecGeneral
412 // vcmpgtsd IIC_VecGeneral
413 // vcmpgtub IIC_VecGeneral
414 // vcmpgtuh IIC_VecGeneral
415 // vcmpgtuw IIC_VecGeneral
416 // vcmpgtud IIC_VecGeneral
419 // vexptefp IIC_VecFP
422 // vmaxfp IIC_VecFPCompare
423 // vmaxsb IIC_VecGeneral
424 // vmaxsh IIC_VecGeneral
425 // vmaxsw IIC_VecGeneral
426 // vmaxsd IIC_VecGeneral
427 // vmaxub IIC_VecGeneral
428 // vmaxuh IIC_VecGeneral
429 // vmaxuw IIC_VecGeneral
430 // vmaxud IIC_VecGeneral
431 // vmhaddshs IIC_VecComplex
432 // vmhraddshs IIC_VecComplex
433 // vminfp IIC_VecFPCompare
434 // vminsb IIC_VecGeneral
435 // vminsh IIC_VecGeneral
436 // vminsw IIC_VecGeneral
437 // vminsd IIC_VecGeneral
438 // vminub IIC_VecGeneral
439 // vminuh IIC_VecGeneral
440 // vminuw IIC_VecGeneral
441 // vminud IIC_VecGeneral
442 // vmladduhm IIC_VecComplex
443 // vmrghb IIC_VecPerm
444 // vmrghh IIC_VecPerm
445 // vmrghw IIC_VecPerm
446 // vmrglb IIC_VecPerm
447 // vmrglh IIC_VecPerm
448 // vmrglw IIC_VecPerm
450 // vmsummbm IIC_VecComplex
451 // vmsumshm IIC_VecComplex
452 // vmsumshs IIC_VecComplex
453 // vmsumubm IIC_VecComplex
454 // vmsumuhm IIC_VecComplex
455 // vmsumuhs IIC_VecComplex
456 // vmulesb IIC_VecComplex
457 // vmulesh IIC_VecComplex
458 // vmulesw IIC_VecComplex
459 // vmuleub IIC_VecComplex
460 // vmuleuh IIC_VecComplex
461 // vmuleuw IIC_VecComplex
462 // vmulosb IIC_VecComplex
463 // vmulosh IIC_VecComplex
464 // vmulosw IIC_VecComplex
465 // vmuloub IIC_VecComplex
466 // vmulouh IIC_VecComplex
467 // vmulouw IIC_VecComplex
468 // vmuluwm IIC_VecComplex
469 // vnor IIC_VecGeneral
470 // vor IIC_VecGeneral
473 // vpkshss IIC_VecPerm
474 // vpkshus IIC_VecPerm
475 // vpkswss IIC_VecPerm
476 // vpkswus IIC_VecPerm
477 // vpkuhum IIC_VecPerm
478 // vpkuhus IIC_VecPerm
479 // vpkuwum IIC_VecPerm
480 // vpkuwus IIC_VecPerm
481 // vrefp IIC_VecFPRound
482 // vrfim IIC_VecFPRound
483 // vrfin IIC_VecFPRound
484 // vrfip IIC_VecFPRound
485 // vrfiz IIC_VecFPRound
486 // vrlb IIC_VecGeneral
487 // vrlh IIC_VecGeneral
488 // vrlw IIC_VecGeneral
489 // vrsqrtefp IIC_VecFP
490 // vsel IIC_VecGeneral
492 // vslb IIC_VecGeneral
493 // vsldoi IIC_VecPerm
494 // vslh IIC_VecGeneral
496 // vslw IIC_VecGeneral
497 // vspltb IIC_VecPerm
498 // vsplth IIC_VecPerm
499 // vspltisb IIC_VecPerm
500 // vspltish IIC_VecPerm
501 // vspltisw IIC_VecPerm
502 // vspltw IIC_VecPerm
504 // vsrab IIC_VecGeneral
505 // vsrah IIC_VecGeneral
506 // vsraw IIC_VecGeneral
507 // vsrb IIC_VecGeneral
508 // vsrh IIC_VecGeneral
510 // vsrw IIC_VecGeneral
511 // vsubcuw IIC_VecGeneral
513 // vsubsbs IIC_VecGeneral
514 // vsubshs IIC_VecGeneral
515 // vsubsws IIC_VecGeneral
516 // vsububm IIC_VecGeneral
517 // vsubudm IIC_VecGeneral
518 // vsububs IIC_VecGeneral
519 // vsubuhm IIC_VecGeneral
520 // vsubuhs IIC_VecGeneral
521 // vsubuwm IIC_VecGeneral
522 // vsubuws IIC_VecGeneral
523 // vsum2sws IIC_VecComplex
524 // vsum4sbs IIC_VecComplex
525 // vsum4shs IIC_VecComplex
526 // vsum4ubs IIC_VecComplex
527 // vsumsws IIC_VecComplex
528 // vupkhpx IIC_VecPerm
529 // vupkhsb IIC_VecPerm
530 // vupkhsh IIC_VecPerm
531 // vupklpx IIC_VecPerm
532 // vupklsb IIC_VecPerm
533 // vupklsh IIC_VecPerm
534 // vxor IIC_VecGeneral
536 // xori IIC_IntSimple
537 // xoris IIC_IntSimple