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 "PPCScheduleA2.td"
121 include "PPCScheduleE500mc.td"
122 include "PPCScheduleE5500.td"
124 //===----------------------------------------------------------------------===//
125 // Instruction to itinerary class map - When add new opcodes to the supported
126 // set, refer to the following table to determine which itinerary class the
129 // opcode itinerary class
130 // ====== ===============
132 // addc IIC_IntGeneral
133 // adde IIC_IntGeneral
134 // addi IIC_IntSimple
135 // addic IIC_IntGeneral
136 // addic. IIC_IntGeneral
137 // addis IIC_IntSimple
138 // addme IIC_IntGeneral
139 // addze IIC_IntGeneral
141 // andc IIC_IntSimple
142 // andi. IIC_IntGeneral
143 // andis. IIC_IntGeneral
148 // cmp IIC_IntCompare
149 // cmpi IIC_IntCompare
150 // cmpl IIC_IntCompare
151 // cmpli IIC_IntCompare
152 // cntlzd IIC_IntRotateD
153 // cntlzw IIC_IntGeneral
165 // dcbst IIC_LdStDCBF
167 // dcbtst IIC_LdStLoad
176 // eciwx IIC_LdStLoad
177 // ecowx IIC_LdStLoad
178 // eieio IIC_LdStLoad
180 // extsb IIC_IntSimple
181 // extsh IIC_IntSimple
182 // extsw IIC_IntSimple
183 // fabs IIC_FPGeneral
185 // fadds IIC_FPGeneral
186 // fcfid IIC_FPGeneral
187 // fcmpo IIC_FPCompare
188 // fcmpu IIC_FPCompare
189 // fctid IIC_FPGeneral
190 // fctidz IIC_FPGeneral
191 // fctiw IIC_FPGeneral
192 // fctiwz IIC_FPGeneral
196 // fmadds IIC_FPGeneral
199 // fmsubs IIC_FPGeneral
201 // fmuls IIC_FPGeneral
202 // fnabs IIC_FPGeneral
203 // fneg IIC_FPGeneral
204 // fnmadd IIC_FPFused
205 // fnmadds IIC_FPGeneral
206 // fnmsub IIC_FPFused
207 // fnmsubs IIC_FPGeneral
209 // frsp IIC_FPGeneral
210 // frsqrte IIC_FPGeneral
211 // fsel IIC_FPGeneral
213 // fsqrts IIC_FPSqrtS
215 // fsubs IIC_FPGeneral
217 // isync IIC_SprISYNC
219 // lbzu IIC_LdStLoadUpd
220 // lbzux IIC_LdStLoadUpdX
223 // ldarx IIC_LdStLDARX
229 // lfdux IIC_LdStLFDUX
233 // lfsux IIC_LdStLFDUX
237 // lhaux IIC_LdStLHAUX
239 // lhbrx IIC_LdStLoad
241 // lhzu IIC_LdStLoadUpd
242 // lhzux IIC_LdStLoadUpdX
247 // lvebx IIC_LdStLVecX
248 // lvehx IIC_LdStLVecX
249 // lvewx IIC_LdStLVecX
250 // lvsl IIC_LdStLVecX
251 // lvsr IIC_LdStLVecX
253 // lvxl IIC_LdStLVecX
255 // lwarx IIC_LdStLWARX
256 // lwaux IIC_LdStLHAUX
258 // lwbrx IIC_LdStLoad
260 // lwzu IIC_LdStLoadUpd
261 // lwzux IIC_LdStLoadUpdX
264 // mcrfs IIC_FPGeneral
268 // mfmsr IIC_SprMFMSR
269 // mfspr IIC_SprMFSPR
271 // mfsrin IIC_SprMFSR
273 // mfvscr IIC_IntMFVSCR
275 // mtfsb0 IIC_IntMTFSB0
276 // mtfsb1 IIC_IntMTFSB0
277 // mtfsf IIC_IntMTFSB0
278 // mtfsfi IIC_IntMTFSB0
279 // mtmsr IIC_SprMTMSR
281 // mtspr IIC_SprMTSPR
283 // mtsrd IIC_IntMTSRD
284 // mtsrdin IIC_IntMTSRD
285 // mtsrin IIC_SprMTSRIN
286 // mtvscr IIC_IntMFVSCR
287 // mulhd IIC_IntMulHD
288 // mulhdu IIC_IntMulHD
289 // mulhw IIC_IntMulHW
290 // mulhwu IIC_IntMulHWU
291 // mulld IIC_IntMulHD
292 // mulli IIC_IntMulLI
293 // mullw IIC_IntMulHW
294 // nand IIC_IntSimple
300 // oris IIC_IntSimple
303 // rldcl IIC_IntRotateD
304 // rldcr IIC_IntRotateD
305 // rldic IIC_IntRotateDI
306 // rldicl IIC_IntRotateDI
307 // rldicr IIC_IntRotateDI
308 // rldimi IIC_IntRotateDI
309 // rlwimi IIC_IntRotate
310 // rlwinm IIC_IntGeneral
311 // rlwnm IIC_IntGeneral
313 // slbia IIC_LdStSLBIA
314 // slbie IIC_LdStSLBIE
315 // sld IIC_IntRotateD
316 // slw IIC_IntGeneral
317 // srad IIC_IntRotateD
318 // sradi IIC_IntRotateDI
320 // srawi IIC_IntShift
321 // srd IIC_IntRotateD
322 // srw IIC_IntGeneral
324 // stbu IIC_LdStStoreUpd
325 // stbux IIC_LdStStoreUpd
326 // stbx IIC_LdStStore
328 // stdcx. IIC_LdStSTDCX
330 // stdux IIC_LdStSTDUX
333 // stfdu IIC_LdStSTFDU
334 // stfdux IIC_LdStSTFDU
335 // stfdx IIC_LdStSTFD
336 // stfiwx IIC_LdStSTFD
338 // stfsu IIC_LdStSTFDU
339 // stfsux IIC_LdStSTFDU
340 // stfsx IIC_LdStSTFD
342 // sthbrx IIC_LdStStore
343 // sthu IIC_LdStStoreUpd
344 // sthux IIC_LdStStoreUpd
345 // sthx IIC_LdStStore
349 // stvebx IIC_LdStSTVEBX
350 // stvehx IIC_LdStSTVEBX
351 // stvewx IIC_LdStSTVEBX
352 // stvx IIC_LdStSTVEBX
353 // stvxl IIC_LdStSTVEBX
355 // stwbrx IIC_LdStStore
356 // stwcx. IIC_LdStSTWCX
357 // stwu IIC_LdStStoreUpd
358 // stwux IIC_LdStStoreUpd
359 // stwx IIC_LdStStore
360 // subf IIC_IntGeneral
361 // subfc IIC_IntGeneral
362 // subfe IIC_IntGeneral
363 // subfic IIC_IntGeneral
364 // subfme IIC_IntGeneral
365 // subfze IIC_IntGeneral
369 // tlbia IIC_LdStSLBIA
370 // tlbie IIC_LdStDCBF
371 // tlbsync IIC_SprTLBSYNC
374 // vaddcuw IIC_VecGeneral
376 // vaddsbs IIC_VecGeneral
377 // vaddshs IIC_VecGeneral
378 // vaddsws IIC_VecGeneral
379 // vaddubm IIC_VecGeneral
380 // vaddubs IIC_VecGeneral
381 // vadduhm IIC_VecGeneral
382 // vadduhs IIC_VecGeneral
383 // vadduwm IIC_VecGeneral
384 // vadduws IIC_VecGeneral
385 // vand IIC_VecGeneral
386 // vandc IIC_VecGeneral
387 // vavgsb IIC_VecGeneral
388 // vavgsh IIC_VecGeneral
389 // vavgsw IIC_VecGeneral
390 // vavgub IIC_VecGeneral
391 // vavguh IIC_VecGeneral
392 // vavguw IIC_VecGeneral
395 // vcmpbfp IIC_VecFPCompare
396 // vcmpeqfp IIC_VecFPCompare
397 // vcmpequb IIC_VecGeneral
398 // vcmpequh IIC_VecGeneral
399 // vcmpequw IIC_VecGeneral
400 // vcmpgefp IIC_VecFPCompare
401 // vcmpgtfp IIC_VecFPCompare
402 // vcmpgtsb IIC_VecGeneral
403 // vcmpgtsh IIC_VecGeneral
404 // vcmpgtsw IIC_VecGeneral
405 // vcmpgtub IIC_VecGeneral
406 // vcmpgtuh IIC_VecGeneral
407 // vcmpgtuw IIC_VecGeneral
410 // vexptefp IIC_VecFP
413 // vmaxfp IIC_VecFPCompare
414 // vmaxsb IIC_VecGeneral
415 // vmaxsh IIC_VecGeneral
416 // vmaxsw IIC_VecGeneral
417 // vmaxub IIC_VecGeneral
418 // vmaxuh IIC_VecGeneral
419 // vmaxuw IIC_VecGeneral
420 // vmhaddshs IIC_VecComplex
421 // vmhraddshs IIC_VecComplex
422 // vminfp IIC_VecFPCompare
423 // vminsb IIC_VecGeneral
424 // vminsh IIC_VecGeneral
425 // vminsw IIC_VecGeneral
426 // vminub IIC_VecGeneral
427 // vminuh IIC_VecGeneral
428 // vminuw IIC_VecGeneral
429 // vmladduhm IIC_VecComplex
430 // vmrghb IIC_VecPerm
431 // vmrghh IIC_VecPerm
432 // vmrghw IIC_VecPerm
433 // vmrglb IIC_VecPerm
434 // vmrglh IIC_VecPerm
435 // vmrglw IIC_VecPerm
437 // vmsummbm IIC_VecComplex
438 // vmsumshm IIC_VecComplex
439 // vmsumshs IIC_VecComplex
440 // vmsumubm IIC_VecComplex
441 // vmsumuhm IIC_VecComplex
442 // vmsumuhs IIC_VecComplex
443 // vmulesb IIC_VecComplex
444 // vmulesh IIC_VecComplex
445 // vmuleub IIC_VecComplex
446 // vmuleuh IIC_VecComplex
447 // vmulosb IIC_VecComplex
448 // vmulosh IIC_VecComplex
449 // vmuloub IIC_VecComplex
450 // vmulouh IIC_VecComplex
451 // vnor IIC_VecGeneral
452 // vor IIC_VecGeneral
455 // vpkshss IIC_VecPerm
456 // vpkshus IIC_VecPerm
457 // vpkswss IIC_VecPerm
458 // vpkswus IIC_VecPerm
459 // vpkuhum IIC_VecPerm
460 // vpkuhus IIC_VecPerm
461 // vpkuwum IIC_VecPerm
462 // vpkuwus IIC_VecPerm
463 // vrefp IIC_VecFPRound
464 // vrfim IIC_VecFPRound
465 // vrfin IIC_VecFPRound
466 // vrfip IIC_VecFPRound
467 // vrfiz IIC_VecFPRound
468 // vrlb IIC_VecGeneral
469 // vrlh IIC_VecGeneral
470 // vrlw IIC_VecGeneral
471 // vrsqrtefp IIC_VecFP
472 // vsel IIC_VecGeneral
474 // vslb IIC_VecGeneral
475 // vsldoi IIC_VecPerm
476 // vslh IIC_VecGeneral
478 // vslw IIC_VecGeneral
479 // vspltb IIC_VecPerm
480 // vsplth IIC_VecPerm
481 // vspltisb IIC_VecPerm
482 // vspltish IIC_VecPerm
483 // vspltisw IIC_VecPerm
484 // vspltw IIC_VecPerm
486 // vsrab IIC_VecGeneral
487 // vsrah IIC_VecGeneral
488 // vsraw IIC_VecGeneral
489 // vsrb IIC_VecGeneral
490 // vsrh IIC_VecGeneral
492 // vsrw IIC_VecGeneral
493 // vsubcuw IIC_VecGeneral
495 // vsubsbs IIC_VecGeneral
496 // vsubshs IIC_VecGeneral
497 // vsubsws IIC_VecGeneral
498 // vsububm IIC_VecGeneral
499 // vsububs IIC_VecGeneral
500 // vsubuhm IIC_VecGeneral
501 // vsubuhs IIC_VecGeneral
502 // vsubuwm IIC_VecGeneral
503 // vsubuws IIC_VecGeneral
504 // vsum2sws IIC_VecComplex
505 // vsum4sbs IIC_VecComplex
506 // vsum4shs IIC_VecComplex
507 // vsum4ubs IIC_VecComplex
508 // vsumsws IIC_VecComplex
509 // vupkhpx IIC_VecPerm
510 // vupkhsb IIC_VecPerm
511 // vupkhsh IIC_VecPerm
512 // vupklpx IIC_VecPerm
513 // vupklsb IIC_VecPerm
514 // vupklsh IIC_VecPerm
515 // vxor IIC_VecGeneral
517 // xori IIC_IntSimple
518 // xoris IIC_IntSimple