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_SprTLBIA : InstrItinClass;
110 def IIC_SprTLBIEL : InstrItinClass;
111 def IIC_SprTLBIE : InstrItinClass;
113 //===----------------------------------------------------------------------===//
114 // Processor instruction itineraries.
116 include "PPCScheduleG3.td"
117 include "PPCSchedule440.td"
118 include "PPCScheduleG4.td"
119 include "PPCScheduleG4Plus.td"
120 include "PPCScheduleG5.td"
121 include "PPCScheduleP7.td"
122 include "PPCScheduleA2.td"
123 include "PPCScheduleE500mc.td"
124 include "PPCScheduleE5500.td"
126 //===----------------------------------------------------------------------===//
127 // Instruction to itinerary class map - When add new opcodes to the supported
128 // set, refer to the following table to determine which itinerary class the
131 // opcode itinerary class
132 // ====== ===============
134 // addc IIC_IntGeneral
135 // adde IIC_IntGeneral
136 // addi IIC_IntSimple
137 // addic IIC_IntGeneral
138 // addic. IIC_IntGeneral
139 // addis IIC_IntSimple
140 // addme IIC_IntGeneral
141 // addze IIC_IntGeneral
143 // andc IIC_IntSimple
144 // andi. IIC_IntGeneral
145 // andis. IIC_IntGeneral
150 // cmp IIC_IntCompare
151 // cmpi IIC_IntCompare
152 // cmpl IIC_IntCompare
153 // cmpli IIC_IntCompare
154 // cntlzd IIC_IntRotateD
155 // cntlzw IIC_IntGeneral
167 // dcbst IIC_LdStDCBF
169 // dcbtst IIC_LdStLoad
178 // eciwx IIC_LdStLoad
179 // ecowx IIC_LdStLoad
180 // eieio IIC_LdStLoad
182 // extsb IIC_IntSimple
183 // extsh IIC_IntSimple
184 // extsw IIC_IntSimple
185 // fabs IIC_FPGeneral
187 // fadds IIC_FPGeneral
188 // fcfid IIC_FPGeneral
189 // fcmpo IIC_FPCompare
190 // fcmpu IIC_FPCompare
191 // fctid IIC_FPGeneral
192 // fctidz IIC_FPGeneral
193 // fctiw IIC_FPGeneral
194 // fctiwz IIC_FPGeneral
198 // fmadds IIC_FPGeneral
201 // fmsubs IIC_FPGeneral
203 // fmuls IIC_FPGeneral
204 // fnabs IIC_FPGeneral
205 // fneg IIC_FPGeneral
206 // fnmadd IIC_FPFused
207 // fnmadds IIC_FPGeneral
208 // fnmsub IIC_FPFused
209 // fnmsubs IIC_FPGeneral
211 // frsp IIC_FPGeneral
212 // frsqrte IIC_FPGeneral
213 // fsel IIC_FPGeneral
215 // fsqrts IIC_FPSqrtS
217 // fsubs IIC_FPGeneral
219 // isync IIC_SprISYNC
221 // lbzu IIC_LdStLoadUpd
222 // lbzux IIC_LdStLoadUpdX
225 // ldarx IIC_LdStLDARX
231 // lfdux IIC_LdStLFDUX
235 // lfsux IIC_LdStLFDUX
239 // lhaux IIC_LdStLHAUX
241 // lhbrx IIC_LdStLoad
243 // lhzu IIC_LdStLoadUpd
244 // lhzux IIC_LdStLoadUpdX
249 // lvebx IIC_LdStLVecX
250 // lvehx IIC_LdStLVecX
251 // lvewx IIC_LdStLVecX
252 // lvsl IIC_LdStLVecX
253 // lvsr IIC_LdStLVecX
255 // lvxl IIC_LdStLVecX
257 // lwarx IIC_LdStLWARX
258 // lwaux IIC_LdStLHAUX
260 // lwbrx IIC_LdStLoad
262 // lwzu IIC_LdStLoadUpd
263 // lwzux IIC_LdStLoadUpdX
266 // mcrfs IIC_FPGeneral
270 // mfmsr IIC_SprMFMSR
271 // mfspr IIC_SprMFSPR
273 // mfsrin IIC_SprMFSR
275 // mfvscr IIC_IntMFVSCR
277 // mtfsb0 IIC_IntMTFSB0
278 // mtfsb1 IIC_IntMTFSB0
279 // mtfsf IIC_IntMTFSB0
280 // mtfsfi IIC_IntMTFSB0
281 // mtmsr IIC_SprMTMSR
283 // mtspr IIC_SprMTSPR
285 // mtsrd IIC_IntMTSRD
286 // mtsrdin IIC_IntMTSRD
287 // mtsrin IIC_SprMTSRIN
288 // mtvscr IIC_IntMFVSCR
289 // mulhd IIC_IntMulHD
290 // mulhdu IIC_IntMulHD
291 // mulhw IIC_IntMulHW
292 // mulhwu IIC_IntMulHWU
293 // mulld IIC_IntMulHD
294 // mulli IIC_IntMulLI
295 // mullw IIC_IntMulHW
296 // nand IIC_IntSimple
302 // oris IIC_IntSimple
305 // rldcl IIC_IntRotateD
306 // rldcr IIC_IntRotateD
307 // rldic IIC_IntRotateDI
308 // rldicl IIC_IntRotateDI
309 // rldicr IIC_IntRotateDI
310 // rldimi IIC_IntRotateDI
311 // rlwimi IIC_IntRotate
312 // rlwinm IIC_IntGeneral
313 // rlwnm IIC_IntGeneral
315 // slbia IIC_LdStSLBIA
316 // slbie IIC_LdStSLBIE
317 // sld IIC_IntRotateD
318 // slw IIC_IntGeneral
319 // srad IIC_IntRotateD
320 // sradi IIC_IntRotateDI
322 // srawi IIC_IntShift
323 // srd IIC_IntRotateD
324 // srw IIC_IntGeneral
326 // stbu IIC_LdStStoreUpd
327 // stbux IIC_LdStStoreUpd
328 // stbx IIC_LdStStore
330 // stdcx. IIC_LdStSTDCX
332 // stdux IIC_LdStSTDUX
335 // stfdu IIC_LdStSTFDU
336 // stfdux IIC_LdStSTFDU
337 // stfdx IIC_LdStSTFD
338 // stfiwx IIC_LdStSTFD
340 // stfsu IIC_LdStSTFDU
341 // stfsux IIC_LdStSTFDU
342 // stfsx IIC_LdStSTFD
344 // sthbrx IIC_LdStStore
345 // sthu IIC_LdStStoreUpd
346 // sthux IIC_LdStStoreUpd
347 // sthx IIC_LdStStore
351 // stvebx IIC_LdStSTVEBX
352 // stvehx IIC_LdStSTVEBX
353 // stvewx IIC_LdStSTVEBX
354 // stvx IIC_LdStSTVEBX
355 // stvxl IIC_LdStSTVEBX
357 // stwbrx IIC_LdStStore
358 // stwcx. IIC_LdStSTWCX
359 // stwu IIC_LdStStoreUpd
360 // stwux IIC_LdStStoreUpd
361 // stwx IIC_LdStStore
362 // subf IIC_IntGeneral
363 // subfc IIC_IntGeneral
364 // subfe IIC_IntGeneral
365 // subfic IIC_IntGeneral
366 // subfme IIC_IntGeneral
367 // subfze IIC_IntGeneral
371 // tlbia IIC_LdStSLBIA
372 // tlbie IIC_LdStDCBF
373 // tlbsync IIC_SprTLBSYNC
376 // vaddcuw IIC_VecGeneral
378 // vaddsbs IIC_VecGeneral
379 // vaddshs IIC_VecGeneral
380 // vaddsws IIC_VecGeneral
381 // vaddubm IIC_VecGeneral
382 // vaddubs IIC_VecGeneral
383 // vadduhm IIC_VecGeneral
384 // vadduhs IIC_VecGeneral
385 // vadduwm IIC_VecGeneral
386 // vadduws IIC_VecGeneral
387 // vand IIC_VecGeneral
388 // vandc IIC_VecGeneral
389 // vavgsb IIC_VecGeneral
390 // vavgsh IIC_VecGeneral
391 // vavgsw IIC_VecGeneral
392 // vavgub IIC_VecGeneral
393 // vavguh IIC_VecGeneral
394 // vavguw IIC_VecGeneral
397 // vcmpbfp IIC_VecFPCompare
398 // vcmpeqfp IIC_VecFPCompare
399 // vcmpequb IIC_VecGeneral
400 // vcmpequh IIC_VecGeneral
401 // vcmpequw IIC_VecGeneral
402 // vcmpgefp IIC_VecFPCompare
403 // vcmpgtfp IIC_VecFPCompare
404 // vcmpgtsb IIC_VecGeneral
405 // vcmpgtsh IIC_VecGeneral
406 // vcmpgtsw IIC_VecGeneral
407 // vcmpgtub IIC_VecGeneral
408 // vcmpgtuh IIC_VecGeneral
409 // vcmpgtuw IIC_VecGeneral
412 // vexptefp IIC_VecFP
415 // vmaxfp IIC_VecFPCompare
416 // vmaxsb IIC_VecGeneral
417 // vmaxsh IIC_VecGeneral
418 // vmaxsw IIC_VecGeneral
419 // vmaxub IIC_VecGeneral
420 // vmaxuh IIC_VecGeneral
421 // vmaxuw IIC_VecGeneral
422 // vmhaddshs IIC_VecComplex
423 // vmhraddshs IIC_VecComplex
424 // vminfp IIC_VecFPCompare
425 // vminsb IIC_VecGeneral
426 // vminsh IIC_VecGeneral
427 // vminsw IIC_VecGeneral
428 // vminub IIC_VecGeneral
429 // vminuh IIC_VecGeneral
430 // vminuw IIC_VecGeneral
431 // vmladduhm IIC_VecComplex
432 // vmrghb IIC_VecPerm
433 // vmrghh IIC_VecPerm
434 // vmrghw IIC_VecPerm
435 // vmrglb IIC_VecPerm
436 // vmrglh IIC_VecPerm
437 // vmrglw IIC_VecPerm
439 // vmsummbm IIC_VecComplex
440 // vmsumshm IIC_VecComplex
441 // vmsumshs IIC_VecComplex
442 // vmsumubm IIC_VecComplex
443 // vmsumuhm IIC_VecComplex
444 // vmsumuhs IIC_VecComplex
445 // vmulesb IIC_VecComplex
446 // vmulesh IIC_VecComplex
447 // vmuleub IIC_VecComplex
448 // vmuleuh IIC_VecComplex
449 // vmulosb IIC_VecComplex
450 // vmulosh IIC_VecComplex
451 // vmuloub IIC_VecComplex
452 // vmulouh IIC_VecComplex
453 // vnor IIC_VecGeneral
454 // vor IIC_VecGeneral
457 // vpkshss IIC_VecPerm
458 // vpkshus IIC_VecPerm
459 // vpkswss IIC_VecPerm
460 // vpkswus IIC_VecPerm
461 // vpkuhum IIC_VecPerm
462 // vpkuhus IIC_VecPerm
463 // vpkuwum IIC_VecPerm
464 // vpkuwus IIC_VecPerm
465 // vrefp IIC_VecFPRound
466 // vrfim IIC_VecFPRound
467 // vrfin IIC_VecFPRound
468 // vrfip IIC_VecFPRound
469 // vrfiz IIC_VecFPRound
470 // vrlb IIC_VecGeneral
471 // vrlh IIC_VecGeneral
472 // vrlw IIC_VecGeneral
473 // vrsqrtefp IIC_VecFP
474 // vsel IIC_VecGeneral
476 // vslb IIC_VecGeneral
477 // vsldoi IIC_VecPerm
478 // vslh IIC_VecGeneral
480 // vslw IIC_VecGeneral
481 // vspltb IIC_VecPerm
482 // vsplth IIC_VecPerm
483 // vspltisb IIC_VecPerm
484 // vspltish IIC_VecPerm
485 // vspltisw IIC_VecPerm
486 // vspltw IIC_VecPerm
488 // vsrab IIC_VecGeneral
489 // vsrah IIC_VecGeneral
490 // vsraw IIC_VecGeneral
491 // vsrb IIC_VecGeneral
492 // vsrh IIC_VecGeneral
494 // vsrw IIC_VecGeneral
495 // vsubcuw IIC_VecGeneral
497 // vsubsbs IIC_VecGeneral
498 // vsubshs IIC_VecGeneral
499 // vsubsws IIC_VecGeneral
500 // vsububm IIC_VecGeneral
501 // vsububs IIC_VecGeneral
502 // vsubuhm IIC_VecGeneral
503 // vsubuhs IIC_VecGeneral
504 // vsubuwm IIC_VecGeneral
505 // vsubuws IIC_VecGeneral
506 // vsum2sws IIC_VecComplex
507 // vsum4sbs IIC_VecComplex
508 // vsum4shs IIC_VecComplex
509 // vsum4ubs IIC_VecComplex
510 // vsumsws IIC_VecComplex
511 // vupkhpx IIC_VecPerm
512 // vupkhsb IIC_VecPerm
513 // vupkhsh IIC_VecPerm
514 // vupklpx IIC_VecPerm
515 // vupklsb IIC_VecPerm
516 // vupklsh IIC_VecPerm
517 // vxor IIC_VecGeneral
519 // xori IIC_IntSimple
520 // xoris IIC_IntSimple