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_IntDivD : InstrItinClass;
17 def IIC_IntDivW : InstrItinClass;
18 def IIC_IntMFFS : InstrItinClass;
19 def IIC_IntMFVSCR : InstrItinClass;
20 def IIC_IntMTFSB0 : InstrItinClass;
21 def IIC_IntMTSRD : InstrItinClass;
22 def IIC_IntMulHD : InstrItinClass;
23 def IIC_IntMulHW : InstrItinClass;
24 def IIC_IntMulHWU : InstrItinClass;
25 def IIC_IntMulLI : InstrItinClass;
26 def IIC_IntRFID : InstrItinClass;
27 def IIC_IntRotateD : InstrItinClass;
28 def IIC_IntRotateDI : InstrItinClass;
29 def IIC_IntRotate : InstrItinClass;
30 def IIC_IntShift : InstrItinClass;
31 def IIC_IntTrapD : InstrItinClass;
32 def IIC_IntTrapW : InstrItinClass;
33 def IIC_BrB : InstrItinClass;
34 def IIC_BrCR : InstrItinClass;
35 def IIC_BrMCR : InstrItinClass;
36 def IIC_BrMCRX : InstrItinClass;
37 def IIC_LdStDCBA : InstrItinClass;
38 def IIC_LdStDCBF : InstrItinClass;
39 def IIC_LdStDCBI : InstrItinClass;
40 def IIC_LdStLoad : InstrItinClass;
41 def IIC_LdStLoadUpd : InstrItinClass;
42 def IIC_LdStLoadUpdX : InstrItinClass;
43 def IIC_LdStStore : InstrItinClass;
44 def IIC_LdStStoreUpd : InstrItinClass;
45 def IIC_LdStDSS : InstrItinClass;
46 def IIC_LdStICBI : InstrItinClass;
47 def IIC_LdStLD : InstrItinClass;
48 def IIC_LdStLDU : InstrItinClass;
49 def IIC_LdStLDUX : InstrItinClass;
50 def IIC_LdStLDARX : InstrItinClass;
51 def IIC_LdStLFD : InstrItinClass;
52 def IIC_LdStLFDU : InstrItinClass;
53 def IIC_LdStLFDUX : InstrItinClass;
54 def IIC_LdStLHA : InstrItinClass;
55 def IIC_LdStLHAU : InstrItinClass;
56 def IIC_LdStLHAUX : InstrItinClass;
57 def IIC_LdStLMW : InstrItinClass;
58 def IIC_LdStLVecX : InstrItinClass;
59 def IIC_LdStLWA : InstrItinClass;
60 def IIC_LdStLWARX : InstrItinClass;
61 def IIC_LdStSLBIA : InstrItinClass;
62 def IIC_LdStSLBIE : InstrItinClass;
63 def IIC_LdStSTD : InstrItinClass;
64 def IIC_LdStSTDCX : InstrItinClass;
65 def IIC_LdStSTDU : InstrItinClass;
66 def IIC_LdStSTDUX : InstrItinClass;
67 def IIC_LdStSTFD : InstrItinClass;
68 def IIC_LdStSTFDU : InstrItinClass;
69 def IIC_LdStSTVEBX : InstrItinClass;
70 def IIC_LdStSTWCX : InstrItinClass;
71 def IIC_LdStSync : InstrItinClass;
72 def IIC_SprISYNC : InstrItinClass;
73 def IIC_SprMFSR : InstrItinClass;
74 def IIC_SprMTMSR : InstrItinClass;
75 def IIC_SprMTSR : InstrItinClass;
76 def IIC_SprTLBSYNC : InstrItinClass;
77 def IIC_SprMFCR : InstrItinClass;
78 def IIC_SprMFCRF : InstrItinClass;
79 def IIC_SprMFMSR : InstrItinClass;
80 def IIC_SprMFSPR : InstrItinClass;
81 def IIC_SprMFTB : InstrItinClass;
82 def IIC_SprMTSPR : InstrItinClass;
83 def IIC_SprMTSRIN : InstrItinClass;
84 def IIC_SprRFI : InstrItinClass;
85 def IIC_SprSC : InstrItinClass;
86 def IIC_FPGeneral : InstrItinClass;
87 def IIC_FPAddSub : InstrItinClass;
88 def IIC_FPCompare : InstrItinClass;
89 def IIC_FPDivD : InstrItinClass;
90 def IIC_FPDivS : InstrItinClass;
91 def IIC_FPFused : InstrItinClass;
92 def IIC_FPRes : InstrItinClass;
93 def IIC_FPSqrtD : InstrItinClass;
94 def IIC_FPSqrtS : InstrItinClass;
95 def IIC_VecGeneral : InstrItinClass;
96 def IIC_VecFP : InstrItinClass;
97 def IIC_VecFPCompare : InstrItinClass;
98 def IIC_VecComplex : InstrItinClass;
99 def IIC_VecPerm : InstrItinClass;
100 def IIC_VecFPRound : InstrItinClass;
101 def IIC_VecVSL : InstrItinClass;
102 def IIC_VecVSR : InstrItinClass;
103 def IIC_SprMTMSRD : InstrItinClass;
104 def IIC_SprSLIE : InstrItinClass;
105 def IIC_SprSLBIE : InstrItinClass;
106 def IIC_SprSLBMTE : InstrItinClass;
107 def IIC_SprSLBMFEE : InstrItinClass;
108 def IIC_SprSLBIA : InstrItinClass;
109 def IIC_SprTLBIEL : InstrItinClass;
110 def IIC_SprTLBIE : InstrItinClass;
112 //===----------------------------------------------------------------------===//
113 // Processor instruction itineraries.
115 include "PPCScheduleG3.td"
116 include "PPCSchedule440.td"
117 include "PPCScheduleG4.td"
118 include "PPCScheduleG4Plus.td"
119 include "PPCScheduleG5.td"
120 include "PPCScheduleP7.td"
121 include "PPCScheduleA2.td"
122 include "PPCScheduleE500mc.td"
123 include "PPCScheduleE5500.td"
125 //===----------------------------------------------------------------------===//
126 // Instruction to itinerary class map - When add new opcodes to the supported
127 // set, refer to the following table to determine which itinerary class the
130 // opcode itinerary class
131 // ====== ===============
133 // addc IIC_IntGeneral
134 // adde IIC_IntGeneral
135 // addi IIC_IntSimple
136 // addic IIC_IntGeneral
137 // addic. IIC_IntGeneral
138 // addis IIC_IntSimple
139 // addme IIC_IntGeneral
140 // addze IIC_IntGeneral
142 // andc IIC_IntSimple
143 // andi. IIC_IntGeneral
144 // andis. IIC_IntGeneral
149 // cmp IIC_IntCompare
150 // cmpi IIC_IntCompare
151 // cmpl IIC_IntCompare
152 // cmpli IIC_IntCompare
153 // cntlzd IIC_IntRotateD
154 // cntlzw IIC_IntGeneral
166 // dcbst IIC_LdStDCBF
168 // dcbtst IIC_LdStLoad
177 // eciwx IIC_LdStLoad
178 // ecowx IIC_LdStLoad
179 // eieio IIC_LdStLoad
181 // extsb IIC_IntSimple
182 // extsh IIC_IntSimple
183 // extsw IIC_IntSimple
184 // fabs IIC_FPGeneral
186 // fadds IIC_FPGeneral
187 // fcfid IIC_FPGeneral
188 // fcmpo IIC_FPCompare
189 // fcmpu IIC_FPCompare
190 // fctid IIC_FPGeneral
191 // fctidz IIC_FPGeneral
192 // fctiw IIC_FPGeneral
193 // fctiwz IIC_FPGeneral
197 // fmadds IIC_FPGeneral
200 // fmsubs IIC_FPGeneral
202 // fmuls IIC_FPGeneral
203 // fnabs IIC_FPGeneral
204 // fneg IIC_FPGeneral
205 // fnmadd IIC_FPFused
206 // fnmadds IIC_FPGeneral
207 // fnmsub IIC_FPFused
208 // fnmsubs IIC_FPGeneral
210 // frsp IIC_FPGeneral
211 // frsqrte IIC_FPGeneral
212 // fsel IIC_FPGeneral
214 // fsqrts IIC_FPSqrtS
216 // fsubs IIC_FPGeneral
218 // isync IIC_SprISYNC
220 // lbzu IIC_LdStLoadUpd
221 // lbzux IIC_LdStLoadUpdX
224 // ldarx IIC_LdStLDARX
230 // lfdux IIC_LdStLFDUX
234 // lfsux IIC_LdStLFDUX
238 // lhaux IIC_LdStLHAUX
240 // lhbrx IIC_LdStLoad
242 // lhzu IIC_LdStLoadUpd
243 // lhzux IIC_LdStLoadUpdX
248 // lvebx IIC_LdStLVecX
249 // lvehx IIC_LdStLVecX
250 // lvewx IIC_LdStLVecX
251 // lvsl IIC_LdStLVecX
252 // lvsr IIC_LdStLVecX
254 // lvxl IIC_LdStLVecX
256 // lwarx IIC_LdStLWARX
257 // lwaux IIC_LdStLHAUX
259 // lwbrx IIC_LdStLoad
261 // lwzu IIC_LdStLoadUpd
262 // lwzux IIC_LdStLoadUpdX
265 // mcrfs IIC_FPGeneral
269 // mfmsr IIC_SprMFMSR
270 // mfspr IIC_SprMFSPR
272 // mfsrin IIC_SprMFSR
274 // mfvscr IIC_IntMFVSCR
276 // mtfsb0 IIC_IntMTFSB0
277 // mtfsb1 IIC_IntMTFSB0
278 // mtfsf IIC_IntMTFSB0
279 // mtfsfi IIC_IntMTFSB0
280 // mtmsr IIC_SprMTMSR
282 // mtspr IIC_SprMTSPR
284 // mtsrd IIC_IntMTSRD
285 // mtsrdin IIC_IntMTSRD
286 // mtsrin IIC_SprMTSRIN
287 // mtvscr IIC_IntMFVSCR
288 // mulhd IIC_IntMulHD
289 // mulhdu IIC_IntMulHD
290 // mulhw IIC_IntMulHW
291 // mulhwu IIC_IntMulHWU
292 // mulld IIC_IntMulHD
293 // mulli IIC_IntMulLI
294 // mullw IIC_IntMulHW
295 // nand IIC_IntSimple
301 // oris IIC_IntSimple
304 // rldcl IIC_IntRotateD
305 // rldcr IIC_IntRotateD
306 // rldic IIC_IntRotateDI
307 // rldicl IIC_IntRotateDI
308 // rldicr IIC_IntRotateDI
309 // rldimi IIC_IntRotateDI
310 // rlwimi IIC_IntRotate
311 // rlwinm IIC_IntGeneral
312 // rlwnm IIC_IntGeneral
314 // slbia IIC_LdStSLBIA
315 // slbie IIC_LdStSLBIE
316 // sld IIC_IntRotateD
317 // slw IIC_IntGeneral
318 // srad IIC_IntRotateD
319 // sradi IIC_IntRotateDI
321 // srawi IIC_IntShift
322 // srd IIC_IntRotateD
323 // srw IIC_IntGeneral
325 // stbu IIC_LdStStoreUpd
326 // stbux IIC_LdStStoreUpd
327 // stbx IIC_LdStStore
329 // stdcx. IIC_LdStSTDCX
331 // stdux IIC_LdStSTDUX
334 // stfdu IIC_LdStSTFDU
335 // stfdux IIC_LdStSTFDU
336 // stfdx IIC_LdStSTFD
337 // stfiwx IIC_LdStSTFD
339 // stfsu IIC_LdStSTFDU
340 // stfsux IIC_LdStSTFDU
341 // stfsx IIC_LdStSTFD
343 // sthbrx IIC_LdStStore
344 // sthu IIC_LdStStoreUpd
345 // sthux IIC_LdStStoreUpd
346 // sthx IIC_LdStStore
350 // stvebx IIC_LdStSTVEBX
351 // stvehx IIC_LdStSTVEBX
352 // stvewx IIC_LdStSTVEBX
353 // stvx IIC_LdStSTVEBX
354 // stvxl IIC_LdStSTVEBX
356 // stwbrx IIC_LdStStore
357 // stwcx. IIC_LdStSTWCX
358 // stwu IIC_LdStStoreUpd
359 // stwux IIC_LdStStoreUpd
360 // stwx IIC_LdStStore
361 // subf IIC_IntGeneral
362 // subfc IIC_IntGeneral
363 // subfe IIC_IntGeneral
364 // subfic IIC_IntGeneral
365 // subfme IIC_IntGeneral
366 // subfze IIC_IntGeneral
370 // tlbia IIC_LdStSLBIA
371 // tlbie IIC_LdStDCBF
372 // tlbsync IIC_SprTLBSYNC
375 // vaddcuw IIC_VecGeneral
377 // vaddsbs IIC_VecGeneral
378 // vaddshs IIC_VecGeneral
379 // vaddsws IIC_VecGeneral
380 // vaddubm IIC_VecGeneral
381 // vaddubs IIC_VecGeneral
382 // vadduhm IIC_VecGeneral
383 // vadduhs IIC_VecGeneral
384 // vadduwm IIC_VecGeneral
385 // vadduws IIC_VecGeneral
386 // vand IIC_VecGeneral
387 // vandc IIC_VecGeneral
388 // vavgsb IIC_VecGeneral
389 // vavgsh IIC_VecGeneral
390 // vavgsw IIC_VecGeneral
391 // vavgub IIC_VecGeneral
392 // vavguh IIC_VecGeneral
393 // vavguw IIC_VecGeneral
396 // vcmpbfp IIC_VecFPCompare
397 // vcmpeqfp IIC_VecFPCompare
398 // vcmpequb IIC_VecGeneral
399 // vcmpequh IIC_VecGeneral
400 // vcmpequw IIC_VecGeneral
401 // vcmpgefp IIC_VecFPCompare
402 // vcmpgtfp IIC_VecFPCompare
403 // vcmpgtsb IIC_VecGeneral
404 // vcmpgtsh IIC_VecGeneral
405 // vcmpgtsw IIC_VecGeneral
406 // vcmpgtub IIC_VecGeneral
407 // vcmpgtuh IIC_VecGeneral
408 // vcmpgtuw IIC_VecGeneral
411 // vexptefp IIC_VecFP
414 // vmaxfp IIC_VecFPCompare
415 // vmaxsb IIC_VecGeneral
416 // vmaxsh IIC_VecGeneral
417 // vmaxsw IIC_VecGeneral
418 // vmaxub IIC_VecGeneral
419 // vmaxuh IIC_VecGeneral
420 // vmaxuw IIC_VecGeneral
421 // vmhaddshs IIC_VecComplex
422 // vmhraddshs IIC_VecComplex
423 // vminfp IIC_VecFPCompare
424 // vminsb IIC_VecGeneral
425 // vminsh IIC_VecGeneral
426 // vminsw IIC_VecGeneral
427 // vminub IIC_VecGeneral
428 // vminuh IIC_VecGeneral
429 // vminuw IIC_VecGeneral
430 // vmladduhm IIC_VecComplex
431 // vmrghb IIC_VecPerm
432 // vmrghh IIC_VecPerm
433 // vmrghw IIC_VecPerm
434 // vmrglb IIC_VecPerm
435 // vmrglh IIC_VecPerm
436 // vmrglw IIC_VecPerm
438 // vmsummbm IIC_VecComplex
439 // vmsumshm IIC_VecComplex
440 // vmsumshs IIC_VecComplex
441 // vmsumubm IIC_VecComplex
442 // vmsumuhm IIC_VecComplex
443 // vmsumuhs IIC_VecComplex
444 // vmulesb IIC_VecComplex
445 // vmulesh IIC_VecComplex
446 // vmuleub IIC_VecComplex
447 // vmuleuh IIC_VecComplex
448 // vmulosb IIC_VecComplex
449 // vmulosh IIC_VecComplex
450 // vmuloub IIC_VecComplex
451 // vmulouh IIC_VecComplex
452 // vnor IIC_VecGeneral
453 // vor IIC_VecGeneral
456 // vpkshss IIC_VecPerm
457 // vpkshus IIC_VecPerm
458 // vpkswss IIC_VecPerm
459 // vpkswus IIC_VecPerm
460 // vpkuhum IIC_VecPerm
461 // vpkuhus IIC_VecPerm
462 // vpkuwum IIC_VecPerm
463 // vpkuwus IIC_VecPerm
464 // vrefp IIC_VecFPRound
465 // vrfim IIC_VecFPRound
466 // vrfin IIC_VecFPRound
467 // vrfip IIC_VecFPRound
468 // vrfiz IIC_VecFPRound
469 // vrlb IIC_VecGeneral
470 // vrlh IIC_VecGeneral
471 // vrlw IIC_VecGeneral
472 // vrsqrtefp IIC_VecFP
473 // vsel IIC_VecGeneral
475 // vslb IIC_VecGeneral
476 // vsldoi IIC_VecPerm
477 // vslh IIC_VecGeneral
479 // vslw IIC_VecGeneral
480 // vspltb IIC_VecPerm
481 // vsplth IIC_VecPerm
482 // vspltisb IIC_VecPerm
483 // vspltish IIC_VecPerm
484 // vspltisw IIC_VecPerm
485 // vspltw IIC_VecPerm
487 // vsrab IIC_VecGeneral
488 // vsrah IIC_VecGeneral
489 // vsraw IIC_VecGeneral
490 // vsrb IIC_VecGeneral
491 // vsrh IIC_VecGeneral
493 // vsrw IIC_VecGeneral
494 // vsubcuw IIC_VecGeneral
496 // vsubsbs IIC_VecGeneral
497 // vsubshs IIC_VecGeneral
498 // vsubsws IIC_VecGeneral
499 // vsububm IIC_VecGeneral
500 // vsububs IIC_VecGeneral
501 // vsubuhm IIC_VecGeneral
502 // vsubuhs IIC_VecGeneral
503 // vsubuwm IIC_VecGeneral
504 // vsubuws IIC_VecGeneral
505 // vsum2sws IIC_VecComplex
506 // vsum4sbs IIC_VecComplex
507 // vsum4shs IIC_VecComplex
508 // vsum4ubs IIC_VecComplex
509 // vsumsws IIC_VecComplex
510 // vupkhpx IIC_VecPerm
511 // vupkhsb IIC_VecPerm
512 // vupkhsh IIC_VecPerm
513 // vupklpx IIC_VecPerm
514 // vupklsb IIC_VecPerm
515 // vupklsh IIC_VecPerm
516 // vxor IIC_VecGeneral
518 // xori IIC_IntSimple
519 // xoris IIC_IntSimple