1//===-- PPCSchedule.td - PowerPC Scheduling Definitions ----*- tablegen -*-===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10//===----------------------------------------------------------------------===//
11// Instruction Itinerary classes used for PowerPC
12//
13def IIC_IntSimple    : InstrItinClass;
14def IIC_IntGeneral   : InstrItinClass;
15def IIC_IntCompare   : InstrItinClass;
16def IIC_IntDivD      : InstrItinClass;
17def IIC_IntDivW      : InstrItinClass;
18def IIC_IntMFFS      : InstrItinClass;
19def IIC_IntMFVSCR    : InstrItinClass;
20def IIC_IntMTFSB0    : InstrItinClass;
21def IIC_IntMTSRD     : InstrItinClass;
22def IIC_IntMulHD     : InstrItinClass;
23def IIC_IntMulHW     : InstrItinClass;
24def IIC_IntMulHWU    : InstrItinClass;
25def IIC_IntMulLI     : InstrItinClass;
26def IIC_IntRFID      : InstrItinClass;
27def IIC_IntRotateD   : InstrItinClass;
28def IIC_IntRotateDI  : InstrItinClass;
29def IIC_IntRotate    : InstrItinClass;
30def IIC_IntShift     : InstrItinClass;
31def IIC_IntTrapD     : InstrItinClass;
32def IIC_IntTrapW     : InstrItinClass;
33def IIC_BrB          : InstrItinClass;
34def IIC_BrCR         : InstrItinClass;
35def IIC_BrMCR        : InstrItinClass;
36def IIC_BrMCRX       : InstrItinClass;
37def IIC_LdStDCBA     : InstrItinClass;
38def IIC_LdStDCBF     : InstrItinClass;
39def IIC_LdStDCBI     : InstrItinClass;
40def IIC_LdStLoad     : InstrItinClass;
41def IIC_LdStLoadUpd  : InstrItinClass;
42def IIC_LdStLoadUpdX : InstrItinClass;
43def IIC_LdStStore    : InstrItinClass;
44def IIC_LdStStoreUpd : InstrItinClass;
45def IIC_LdStDSS      : InstrItinClass;
46def IIC_LdStICBI     : InstrItinClass;
47def IIC_LdStLD       : InstrItinClass;
48def IIC_LdStLDU      : InstrItinClass;
49def IIC_LdStLDUX     : InstrItinClass;
50def IIC_LdStLDARX    : InstrItinClass;
51def IIC_LdStLFD      : InstrItinClass;
52def IIC_LdStLFDU     : InstrItinClass;
53def IIC_LdStLFDUX    : InstrItinClass;
54def IIC_LdStLHA      : InstrItinClass;
55def IIC_LdStLHAU     : InstrItinClass;
56def IIC_LdStLHAUX    : InstrItinClass;
57def IIC_LdStLMW      : InstrItinClass;
58def IIC_LdStLVecX    : InstrItinClass;
59def IIC_LdStLWA      : InstrItinClass;
60def IIC_LdStLWARX    : InstrItinClass;
61def IIC_LdStSLBIA    : InstrItinClass;
62def IIC_LdStSLBIE    : InstrItinClass;
63def IIC_LdStSTD      : InstrItinClass;
64def IIC_LdStSTDCX    : InstrItinClass;
65def IIC_LdStSTDU     : InstrItinClass;
66def IIC_LdStSTDUX    : InstrItinClass;
67def IIC_LdStSTFD     : InstrItinClass;
68def IIC_LdStSTFDU    : InstrItinClass;
69def IIC_LdStSTVEBX   : InstrItinClass;
70def IIC_LdStSTWCX    : InstrItinClass;
71def IIC_LdStSync     : InstrItinClass;
72def IIC_SprISYNC     : InstrItinClass;
73def IIC_SprMFSR      : InstrItinClass;
74def IIC_SprMTMSR     : InstrItinClass;
75def IIC_SprMTSR      : InstrItinClass;
76def IIC_SprTLBSYNC   : InstrItinClass;
77def IIC_SprMFCR      : InstrItinClass;
78def IIC_SprMFCRF     : InstrItinClass;
79def IIC_SprMFMSR     : InstrItinClass;
80def IIC_SprMFSPR     : InstrItinClass;
81def IIC_SprMFTB      : InstrItinClass;
82def IIC_SprMTSPR     : InstrItinClass;
83def IIC_SprMTSRIN    : InstrItinClass;
84def IIC_SprRFI       : InstrItinClass;
85def IIC_SprSC        : InstrItinClass;
86def IIC_FPGeneral    : InstrItinClass;
87def IIC_FPAddSub     : InstrItinClass;
88def IIC_FPCompare    : InstrItinClass;
89def IIC_FPDivD       : InstrItinClass;
90def IIC_FPDivS       : InstrItinClass;
91def IIC_FPFused      : InstrItinClass;
92def IIC_FPRes        : InstrItinClass;
93def IIC_FPSqrtD      : InstrItinClass;
94def IIC_FPSqrtS      : InstrItinClass;
95def IIC_VecGeneral   : InstrItinClass;
96def IIC_VecFP        : InstrItinClass;
97def IIC_VecFPCompare : InstrItinClass;
98def IIC_VecComplex   : InstrItinClass;
99def IIC_VecPerm      : InstrItinClass;
100def IIC_VecFPRound   : InstrItinClass;
101def IIC_VecVSL       : InstrItinClass;
102def IIC_VecVSR       : InstrItinClass;
103def IIC_SprMTMSRD    : InstrItinClass;
104def IIC_SprSLIE      : InstrItinClass;
105def IIC_SprSLBIE     : InstrItinClass;
106def IIC_SprSLBMTE    : InstrItinClass;
107def IIC_SprSLBMFEE   : InstrItinClass;
108def IIC_SprSLBIA     : InstrItinClass;
109def IIC_SprTLBIA     : InstrItinClass;
110def IIC_SprTLBIEL    : InstrItinClass;
111def IIC_SprTLBIE     : InstrItinClass;
112
113//===----------------------------------------------------------------------===//
114// Processor instruction itineraries.
115
116include "PPCScheduleG3.td"
117include "PPCSchedule440.td"
118include "PPCScheduleG4.td"
119include "PPCScheduleG4Plus.td"
120include "PPCScheduleG5.td"
121include "PPCScheduleP7.td"
122include "PPCScheduleP8.td"
123include "PPCScheduleA2.td"
124include "PPCScheduleE500mc.td"
125include "PPCScheduleE5500.td"
126
127//===----------------------------------------------------------------------===//
128// Instruction to itinerary class map - When add new opcodes to the supported
129// set, refer to the following table to determine which itinerary class the
130// opcode belongs.
131//
132//    opcode     itinerary class
133//    ======     ===============
134//    add        IIC_IntSimple
135//    addc       IIC_IntGeneral
136//    adde       IIC_IntGeneral
137//    addi       IIC_IntSimple
138//    addic      IIC_IntGeneral
139//    addic.     IIC_IntGeneral
140//    addis      IIC_IntSimple
141//    addme      IIC_IntGeneral
142//    addze      IIC_IntGeneral
143//    and        IIC_IntSimple
144//    andc       IIC_IntSimple
145//    andi.      IIC_IntGeneral
146//    andis.     IIC_IntGeneral
147//    b          IIC_BrB
148//    bc         IIC_BrB
149//    bcctr      IIC_BrB
150//    bclr       IIC_BrB
151//    cmp        IIC_IntCompare
152//    cmpi       IIC_IntCompare
153//    cmpl       IIC_IntCompare
154//    cmpli      IIC_IntCompare
155//    cntlzd     IIC_IntRotateD
156//    cntlzw     IIC_IntGeneral
157//    crand      IIC_BrCR
158//    crandc     IIC_BrCR
159//    creqv      IIC_BrCR
160//    crnand     IIC_BrCR
161//    crnor      IIC_BrCR
162//    cror       IIC_BrCR
163//    crorc      IIC_BrCR
164//    crxor      IIC_BrCR
165//    dcba       IIC_LdStDCBA
166//    dcbf       IIC_LdStDCBF
167//    dcbi       IIC_LdStDCBI
168//    dcbst      IIC_LdStDCBF
169//    dcbt       IIC_LdStLoad
170//    dcbtst     IIC_LdStLoad
171//    dcbz       IIC_LdStDCBF
172//    divd       IIC_IntDivD
173//    divdu      IIC_IntDivD
174//    divw       IIC_IntDivW
175//    divwu      IIC_IntDivW
176//    dss        IIC_LdStDSS
177//    dst        IIC_LdStDSS
178//    dstst      IIC_LdStDSS
179//    eciwx      IIC_LdStLoad
180//    ecowx      IIC_LdStLoad
181//    eieio      IIC_LdStLoad
182//    eqv        IIC_IntSimple
183//    extsb      IIC_IntSimple
184//    extsh      IIC_IntSimple
185//    extsw      IIC_IntSimple
186//    fabs       IIC_FPGeneral
187//    fadd       IIC_FPAddSub
188//    fadds      IIC_FPGeneral
189//    fcfid      IIC_FPGeneral
190//    fcmpo      IIC_FPCompare
191//    fcmpu      IIC_FPCompare
192//    fctid      IIC_FPGeneral
193//    fctidz     IIC_FPGeneral
194//    fctiw      IIC_FPGeneral
195//    fctiwz     IIC_FPGeneral
196//    fdiv       IIC_FPDivD
197//    fdivs      IIC_FPDivS
198//    fmadd      IIC_FPFused
199//    fmadds     IIC_FPGeneral
200//    fmr        IIC_FPGeneral
201//    fmsub      IIC_FPFused
202//    fmsubs     IIC_FPGeneral
203//    fmul       IIC_FPFused
204//    fmuls      IIC_FPGeneral
205//    fnabs      IIC_FPGeneral
206//    fneg       IIC_FPGeneral
207//    fnmadd     IIC_FPFused
208//    fnmadds    IIC_FPGeneral
209//    fnmsub     IIC_FPFused
210//    fnmsubs    IIC_FPGeneral
211//    fres       IIC_FPRes
212//    frsp       IIC_FPGeneral
213//    frsqrte    IIC_FPGeneral
214//    fsel       IIC_FPGeneral
215//    fsqrt      IIC_FPSqrtD
216//    fsqrts     IIC_FPSqrtS
217//    fsub       IIC_FPAddSub
218//    fsubs      IIC_FPGeneral
219//    icbi       IIC_LdStICBI
220//    isync      IIC_SprISYNC
221//    lbz        IIC_LdStLoad
222//    lbzu       IIC_LdStLoadUpd
223//    lbzux      IIC_LdStLoadUpdX
224//    lbzx       IIC_LdStLoad
225//    ld         IIC_LdStLD
226//    ldarx      IIC_LdStLDARX
227//    ldu        IIC_LdStLDU
228//    ldux       IIC_LdStLDUX
229//    ldx        IIC_LdStLD
230//    lfd        IIC_LdStLFD
231//    lfdu       IIC_LdStLFDU
232//    lfdux      IIC_LdStLFDUX
233//    lfdx       IIC_LdStLFD
234//    lfs        IIC_LdStLFD
235//    lfsu       IIC_LdStLFDU
236//    lfsux      IIC_LdStLFDUX
237//    lfsx       IIC_LdStLFD
238//    lha        IIC_LdStLHA
239//    lhau       IIC_LdStLHAU
240//    lhaux      IIC_LdStLHAUX
241//    lhax       IIC_LdStLHA
242//    lhbrx      IIC_LdStLoad
243//    lhz        IIC_LdStLoad
244//    lhzu       IIC_LdStLoadUpd
245//    lhzux      IIC_LdStLoadUpdX
246//    lhzx       IIC_LdStLoad
247//    lmw        IIC_LdStLMW
248//    lswi       IIC_LdStLMW
249//    lswx       IIC_LdStLMW
250//    lvebx      IIC_LdStLVecX
251//    lvehx      IIC_LdStLVecX
252//    lvewx      IIC_LdStLVecX
253//    lvsl       IIC_LdStLVecX
254//    lvsr       IIC_LdStLVecX
255//    lvx        IIC_LdStLVecX
256//    lvxl       IIC_LdStLVecX
257//    lwa        IIC_LdStLWA
258//    lwarx      IIC_LdStLWARX
259//    lwaux      IIC_LdStLHAUX
260//    lwax       IIC_LdStLHA
261//    lwbrx      IIC_LdStLoad
262//    lwz        IIC_LdStLoad
263//    lwzu       IIC_LdStLoadUpd
264//    lwzux      IIC_LdStLoadUpdX
265//    lwzx       IIC_LdStLoad
266//    mcrf       IIC_BrMCR
267//    mcrfs      IIC_FPGeneral
268//    mcrxr      IIC_BrMCRX
269//    mfcr       IIC_SprMFCR
270//    mffs       IIC_IntMFFS
271//    mfmsr      IIC_SprMFMSR
272//    mfspr      IIC_SprMFSPR
273//    mfsr       IIC_SprMFSR
274//    mfsrin     IIC_SprMFSR
275//    mftb       IIC_SprMFTB
276//    mfvscr     IIC_IntMFVSCR
277//    mtcrf      IIC_BrMCRX
278//    mtfsb0     IIC_IntMTFSB0
279//    mtfsb1     IIC_IntMTFSB0
280//    mtfsf      IIC_IntMTFSB0
281//    mtfsfi     IIC_IntMTFSB0
282//    mtmsr      IIC_SprMTMSR
283//    mtmsrd     IIC_LdStLD
284//    mtspr      IIC_SprMTSPR
285//    mtsr       IIC_SprMTSR
286//    mtsrd      IIC_IntMTSRD
287//    mtsrdin    IIC_IntMTSRD
288//    mtsrin     IIC_SprMTSRIN
289//    mtvscr     IIC_IntMFVSCR
290//    mulhd      IIC_IntMulHD
291//    mulhdu     IIC_IntMulHD
292//    mulhw      IIC_IntMulHW
293//    mulhwu     IIC_IntMulHWU
294//    mulld      IIC_IntMulHD
295//    mulli      IIC_IntMulLI
296//    mullw      IIC_IntMulHW
297//    nand       IIC_IntSimple
298//    neg        IIC_IntSimple
299//    nor        IIC_IntSimple
300//    or         IIC_IntSimple
301//    orc        IIC_IntSimple
302//    ori        IIC_IntSimple
303//    oris       IIC_IntSimple
304//    rfi        IIC_SprRFI
305//    rfid       IIC_IntRFID
306//    rldcl      IIC_IntRotateD
307//    rldcr      IIC_IntRotateD
308//    rldic      IIC_IntRotateDI
309//    rldicl     IIC_IntRotateDI
310//    rldicr     IIC_IntRotateDI
311//    rldimi     IIC_IntRotateDI
312//    rlwimi     IIC_IntRotate
313//    rlwinm     IIC_IntGeneral
314//    rlwnm      IIC_IntGeneral
315//    sc         IIC_SprSC
316//    slbia      IIC_LdStSLBIA
317//    slbie      IIC_LdStSLBIE
318//    sld        IIC_IntRotateD
319//    slw        IIC_IntGeneral
320//    srad       IIC_IntRotateD
321//    sradi      IIC_IntRotateDI
322//    sraw       IIC_IntShift
323//    srawi      IIC_IntShift
324//    srd        IIC_IntRotateD
325//    srw        IIC_IntGeneral
326//    stb        IIC_LdStStore
327//    stbu       IIC_LdStStoreUpd
328//    stbux      IIC_LdStStoreUpd
329//    stbx       IIC_LdStStore
330//    std        IIC_LdStSTD
331//    stdcx.     IIC_LdStSTDCX
332//    stdu       IIC_LdStSTDU
333//    stdux      IIC_LdStSTDUX
334//    stdx       IIC_LdStSTD
335//    stfd       IIC_LdStSTFD
336//    stfdu      IIC_LdStSTFDU
337//    stfdux     IIC_LdStSTFDU
338//    stfdx      IIC_LdStSTFD
339//    stfiwx     IIC_LdStSTFD
340//    stfs       IIC_LdStSTFD
341//    stfsu      IIC_LdStSTFDU
342//    stfsux     IIC_LdStSTFDU
343//    stfsx      IIC_LdStSTFD
344//    sth        IIC_LdStStore
345//    sthbrx     IIC_LdStStore
346//    sthu       IIC_LdStStoreUpd
347//    sthux      IIC_LdStStoreUpd
348//    sthx       IIC_LdStStore
349//    stmw       IIC_LdStLMW
350//    stswi      IIC_LdStLMW
351//    stswx      IIC_LdStLMW
352//    stvebx     IIC_LdStSTVEBX
353//    stvehx     IIC_LdStSTVEBX
354//    stvewx     IIC_LdStSTVEBX
355//    stvx       IIC_LdStSTVEBX
356//    stvxl      IIC_LdStSTVEBX
357//    stw        IIC_LdStStore
358//    stwbrx     IIC_LdStStore
359//    stwcx.     IIC_LdStSTWCX
360//    stwu       IIC_LdStStoreUpd
361//    stwux      IIC_LdStStoreUpd
362//    stwx       IIC_LdStStore
363//    subf       IIC_IntGeneral
364//    subfc      IIC_IntGeneral
365//    subfe      IIC_IntGeneral
366//    subfic     IIC_IntGeneral
367//    subfme     IIC_IntGeneral
368//    subfze     IIC_IntGeneral
369//    sync       IIC_LdStSync
370//    td         IIC_IntTrapD
371//    tdi        IIC_IntTrapD
372//    tlbia      IIC_LdStSLBIA
373//    tlbie      IIC_LdStDCBF
374//    tlbsync    IIC_SprTLBSYNC
375//    tw         IIC_IntTrapW
376//    twi        IIC_IntTrapW
377//    vaddcuw    IIC_VecGeneral
378//    vaddfp     IIC_VecFP
379//    vaddsbs    IIC_VecGeneral
380//    vaddshs    IIC_VecGeneral
381//    vaddsws    IIC_VecGeneral
382//    vaddubm    IIC_VecGeneral
383//    vaddubs    IIC_VecGeneral
384//    vadduhm    IIC_VecGeneral
385//    vadduhs    IIC_VecGeneral
386//    vadduwm    IIC_VecGeneral
387//    vadduws    IIC_VecGeneral
388//    vand       IIC_VecGeneral
389//    vandc      IIC_VecGeneral
390//    vavgsb     IIC_VecGeneral
391//    vavgsh     IIC_VecGeneral
392//    vavgsw     IIC_VecGeneral
393//    vavgub     IIC_VecGeneral
394//    vavguh     IIC_VecGeneral
395//    vavguw     IIC_VecGeneral
396//    vcfsx      IIC_VecFP
397//    vcfux      IIC_VecFP
398//    vcmpbfp    IIC_VecFPCompare
399//    vcmpeqfp   IIC_VecFPCompare
400//    vcmpequb   IIC_VecGeneral
401//    vcmpequh   IIC_VecGeneral
402//    vcmpequw   IIC_VecGeneral
403//    vcmpgefp   IIC_VecFPCompare
404//    vcmpgtfp   IIC_VecFPCompare
405//    vcmpgtsb   IIC_VecGeneral
406//    vcmpgtsh   IIC_VecGeneral
407//    vcmpgtsw   IIC_VecGeneral
408//    vcmpgtub   IIC_VecGeneral
409//    vcmpgtuh   IIC_VecGeneral
410//    vcmpgtuw   IIC_VecGeneral
411//    vctsxs     IIC_VecFP
412//    vctuxs     IIC_VecFP
413//    vexptefp   IIC_VecFP
414//    vlogefp    IIC_VecFP
415//    vmaddfp    IIC_VecFP
416//    vmaxfp     IIC_VecFPCompare
417//    vmaxsb     IIC_VecGeneral
418//    vmaxsh     IIC_VecGeneral
419//    vmaxsw     IIC_VecGeneral
420//    vmaxub     IIC_VecGeneral
421//    vmaxuh     IIC_VecGeneral
422//    vmaxuw     IIC_VecGeneral
423//    vmhaddshs  IIC_VecComplex
424//    vmhraddshs IIC_VecComplex
425//    vminfp     IIC_VecFPCompare
426//    vminsb     IIC_VecGeneral
427//    vminsh     IIC_VecGeneral
428//    vminsw     IIC_VecGeneral
429//    vminub     IIC_VecGeneral
430//    vminuh     IIC_VecGeneral
431//    vminuw     IIC_VecGeneral
432//    vmladduhm  IIC_VecComplex
433//    vmrghb     IIC_VecPerm
434//    vmrghh     IIC_VecPerm
435//    vmrghw     IIC_VecPerm
436//    vmrglb     IIC_VecPerm
437//    vmrglh     IIC_VecPerm
438//    vmrglw     IIC_VecPerm
439//    vmsubfp    IIC_VecFP
440//    vmsummbm   IIC_VecComplex
441//    vmsumshm   IIC_VecComplex
442//    vmsumshs   IIC_VecComplex
443//    vmsumubm   IIC_VecComplex
444//    vmsumuhm   IIC_VecComplex
445//    vmsumuhs   IIC_VecComplex
446//    vmulesb    IIC_VecComplex
447//    vmulesh    IIC_VecComplex
448//    vmuleub    IIC_VecComplex
449//    vmuleuh    IIC_VecComplex
450//    vmulosb    IIC_VecComplex
451//    vmulosh    IIC_VecComplex
452//    vmuloub    IIC_VecComplex
453//    vmulouh    IIC_VecComplex
454//    vnor       IIC_VecGeneral
455//    vor        IIC_VecGeneral
456//    vperm      IIC_VecPerm
457//    vpkpx      IIC_VecPerm
458//    vpkshss    IIC_VecPerm
459//    vpkshus    IIC_VecPerm
460//    vpkswss    IIC_VecPerm
461//    vpkswus    IIC_VecPerm
462//    vpkuhum    IIC_VecPerm
463//    vpkuhus    IIC_VecPerm
464//    vpkuwum    IIC_VecPerm
465//    vpkuwus    IIC_VecPerm
466//    vrefp      IIC_VecFPRound
467//    vrfim      IIC_VecFPRound
468//    vrfin      IIC_VecFPRound
469//    vrfip      IIC_VecFPRound
470//    vrfiz      IIC_VecFPRound
471//    vrlb       IIC_VecGeneral
472//    vrlh       IIC_VecGeneral
473//    vrlw       IIC_VecGeneral
474//    vrsqrtefp  IIC_VecFP
475//    vsel       IIC_VecGeneral
476//    vsl        IIC_VecVSL
477//    vslb       IIC_VecGeneral
478//    vsldoi     IIC_VecPerm
479//    vslh       IIC_VecGeneral
480//    vslo       IIC_VecPerm
481//    vslw       IIC_VecGeneral
482//    vspltb     IIC_VecPerm
483//    vsplth     IIC_VecPerm
484//    vspltisb   IIC_VecPerm
485//    vspltish   IIC_VecPerm
486//    vspltisw   IIC_VecPerm
487//    vspltw     IIC_VecPerm
488//    vsr        IIC_VecVSR
489//    vsrab      IIC_VecGeneral
490//    vsrah      IIC_VecGeneral
491//    vsraw      IIC_VecGeneral
492//    vsrb       IIC_VecGeneral
493//    vsrh       IIC_VecGeneral
494//    vsro       IIC_VecPerm
495//    vsrw       IIC_VecGeneral
496//    vsubcuw    IIC_VecGeneral
497//    vsubfp     IIC_VecFP
498//    vsubsbs    IIC_VecGeneral
499//    vsubshs    IIC_VecGeneral
500//    vsubsws    IIC_VecGeneral
501//    vsububm    IIC_VecGeneral
502//    vsububs    IIC_VecGeneral
503//    vsubuhm    IIC_VecGeneral
504//    vsubuhs    IIC_VecGeneral
505//    vsubuwm    IIC_VecGeneral
506//    vsubuws    IIC_VecGeneral
507//    vsum2sws   IIC_VecComplex
508//    vsum4sbs   IIC_VecComplex
509//    vsum4shs   IIC_VecComplex
510//    vsum4ubs   IIC_VecComplex
511//    vsumsws    IIC_VecComplex
512//    vupkhpx    IIC_VecPerm
513//    vupkhsb    IIC_VecPerm
514//    vupkhsh    IIC_VecPerm
515//    vupklpx    IIC_VecPerm
516//    vupklsb    IIC_VecPerm
517//    vupklsh    IIC_VecPerm
518//    vxor       IIC_VecGeneral
519//    xor        IIC_IntSimple
520//    xori       IIC_IntSimple
521//    xoris      IIC_IntSimple
522//
523