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