blob: d589414c01540cedaa559db67a8a6af548cdd0ce [file] [log] [blame]
Jim Laskey076866c2005-10-18 16:23:40 +00001//===- PPCSchedule.td - PowerPC Scheduling Definitions -----*- tablegen -*-===//
2//
3// The LLVM Compiler Infrastructure
4//
Chris Lattner4ee451d2007-12-29 20:36:04 +00005// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
Jim Laskey076866c2005-10-18 16:23:40 +00007//
8//===----------------------------------------------------------------------===//
9
Jim Laskey076866c2005-10-18 16:23:40 +000010//===----------------------------------------------------------------------===//
11// Functional units across PowerPC chips sets
12//
Jim Laskey076866c2005-10-18 16:23:40 +000013def BPU : FuncUnit; // Branch unit
14def SLU : FuncUnit; // Store/load unit
15def SRU : FuncUnit; // special register unit
16def IU1 : FuncUnit; // integer unit 1 (simple)
17def IU2 : FuncUnit; // integer unit 2 (complex)
18def IU3 : FuncUnit; // integer unit 3 (7450 simple)
19def IU4 : FuncUnit; // integer unit 4 (7450 simple)
20def FPU1 : FuncUnit; // floating point unit 1
21def FPU2 : FuncUnit; // floating point unit 2
22def VPU : FuncUnit; // vector permutation unit
23def VIU1 : FuncUnit; // vector integer unit 1 (simple)
24def VIU2 : FuncUnit; // vector integer unit 2 (complex)
25def VFPU : FuncUnit; // vector floating point unit
26
27
28//===----------------------------------------------------------------------===//
29// Instruction Itinerary classes used for PowerPC
30//
31def IntGeneral : InstrItinClass;
32def IntCompare : InstrItinClass;
33def IntDivD : InstrItinClass;
34def IntDivW : InstrItinClass;
35def IntMFFS : InstrItinClass;
36def IntMFVSCR : InstrItinClass;
37def IntMTFSB0 : InstrItinClass;
38def IntMTSRD : InstrItinClass;
39def IntMulHD : InstrItinClass;
40def IntMulHW : InstrItinClass;
41def IntMulHWU : InstrItinClass;
42def IntMulLI : InstrItinClass;
43def IntRFID : InstrItinClass;
44def IntRotateD : InstrItinClass;
45def IntRotate : InstrItinClass;
46def IntShift : InstrItinClass;
47def IntTrapD : InstrItinClass;
48def IntTrapW : InstrItinClass;
49def BrB : InstrItinClass;
50def BrCR : InstrItinClass;
51def BrMCR : InstrItinClass;
52def BrMCRX : InstrItinClass;
53def LdStDCBA : InstrItinClass;
54def LdStDCBF : InstrItinClass;
55def LdStDCBI : InstrItinClass;
Jim Laskey53842142005-10-19 19:51:16 +000056def LdStGeneral : InstrItinClass;
Jim Laskey076866c2005-10-18 16:23:40 +000057def LdStDSS : InstrItinClass;
58def LdStICBI : InstrItinClass;
Jim Laskey53842142005-10-19 19:51:16 +000059def LdStUX : InstrItinClass;
Jim Laskey076866c2005-10-18 16:23:40 +000060def LdStLD : InstrItinClass;
61def LdStLDARX : InstrItinClass;
62def LdStLFD : InstrItinClass;
63def LdStLFDU : InstrItinClass;
64def LdStLHA : InstrItinClass;
65def LdStLMW : InstrItinClass;
Jim Laskey53842142005-10-19 19:51:16 +000066def LdStLVecX : InstrItinClass;
Jim Laskey076866c2005-10-18 16:23:40 +000067def LdStLWA : InstrItinClass;
68def LdStLWARX : InstrItinClass;
69def LdStSLBIA : InstrItinClass;
70def LdStSLBIE : InstrItinClass;
71def LdStSTD : InstrItinClass;
72def LdStSTDCX : InstrItinClass;
73def LdStSTVEBX : InstrItinClass;
74def LdStSTWCX : InstrItinClass;
75def LdStSync : InstrItinClass;
76def SprISYNC : InstrItinClass;
77def SprMFSR : InstrItinClass;
78def SprMTMSR : InstrItinClass;
79def SprMTSR : InstrItinClass;
80def SprTLBSYNC : InstrItinClass;
81def SprMFCR : InstrItinClass;
82def SprMFMSR : InstrItinClass;
83def SprMFSPR : InstrItinClass;
84def SprMFTB : InstrItinClass;
85def SprMTSPR : InstrItinClass;
86def SprMTSRIN : InstrItinClass;
87def SprRFI : InstrItinClass;
88def SprSC : InstrItinClass;
89def FPGeneral : InstrItinClass;
90def FPCompare : InstrItinClass;
91def FPDivD : InstrItinClass;
92def FPDivS : InstrItinClass;
93def FPFused : InstrItinClass;
94def FPRes : InstrItinClass;
95def FPSqrt : InstrItinClass;
96def VecGeneral : InstrItinClass;
97def VecFP : InstrItinClass;
98def VecFPCompare : InstrItinClass;
99def VecComplex : InstrItinClass;
100def VecPerm : InstrItinClass;
101def VecFPRound : InstrItinClass;
102def VecVSL : InstrItinClass;
103def VecVSR : InstrItinClass;
104
105//===----------------------------------------------------------------------===//
106// Processor instruction itineraries.
107
Jim Laskey53842142005-10-19 19:51:16 +0000108include "PPCScheduleG3.td"
109include "PPCScheduleG4.td"
110include "PPCScheduleG4Plus.td"
111include "PPCScheduleG5.td"
Jim Laskey076866c2005-10-18 16:23:40 +0000112
113//===----------------------------------------------------------------------===//
114// Instruction to itinerary class map - When add new opcodes to the supported
115// set, refer to the following table to determine which itinerary class the
116// opcode belongs.
117//
118// opcode itinerary class
119// ====== ===============
120// add IntGeneral
121// addc IntGeneral
122// adde IntGeneral
123// addi IntGeneral
124// addic IntGeneral
125// addic. IntGeneral
126// addis IntGeneral
127// addme IntGeneral
128// addze IntGeneral
129// and IntGeneral
130// andc IntGeneral
131// andi. IntGeneral
132// andis. IntGeneral
133// b BrB
134// bc BrB
135// bcctr BrB
136// bclr BrB
137// cmp IntCompare
138// cmpi IntCompare
139// cmpl IntCompare
140// cmpli IntCompare
141// cntlzd IntRotateD
142// cntlzw IntGeneral
143// crand BrCR
144// crandc BrCR
145// creqv BrCR
146// crnand BrCR
147// crnor BrCR
148// cror BrCR
149// crorc BrCR
150// crxor BrCR
151// dcba LdStDCBA
152// dcbf LdStDCBF
153// dcbi LdStDCBI
154// dcbst LdStDCBF
Jim Laskey53842142005-10-19 19:51:16 +0000155// dcbt LdStGeneral
156// dcbtst LdStGeneral
Jim Laskey076866c2005-10-18 16:23:40 +0000157// dcbz LdStDCBF
158// divd IntDivD
159// divdu IntDivD
160// divw IntDivW
161// divwu IntDivW
162// dss LdStDSS
163// dst LdStDSS
164// dstst LdStDSS
Jim Laskey53842142005-10-19 19:51:16 +0000165// eciwx LdStGeneral
166// ecowx LdStGeneral
167// eieio LdStGeneral
Jim Laskey076866c2005-10-18 16:23:40 +0000168// eqv IntGeneral
169// extsb IntGeneral
170// extsh IntGeneral
171// extsw IntRotateD
172// fabs FPGeneral
173// fadd FPGeneral
174// fadds FPGeneral
175// fcfid FPGeneral
176// fcmpo FPCompare
177// fcmpu FPCompare
178// fctid FPGeneral
179// fctidz FPGeneral
180// fctiw FPGeneral
181// fctiwz FPGeneral
182// fdiv FPDivD
183// fdivs FPDivS
184// fmadd FPFused
185// fmadds FPGeneral
186// fmr FPGeneral
187// fmsub FPFused
188// fmsubs FPGeneral
189// fmul FPFused
190// fmuls FPGeneral
191// fnabs FPGeneral
192// fneg FPGeneral
193// fnmadd FPFused
194// fnmadds FPGeneral
195// fnmsub FPFused
196// fnmsubs FPGeneral
197// fres FPRes
198// frsp FPGeneral
199// frsqrte FPGeneral
200// fsel FPGeneral
201// fsqrt FPSqrt
202// fsqrts FPSqrt
203// fsub FPGeneral
204// fsubs FPGeneral
205// icbi LdStICBI
206// isync SprISYNC
Jim Laskey53842142005-10-19 19:51:16 +0000207// lbz LdStGeneral
208// lbzu LdStGeneral
209// lbzux LdStUX
210// lbzx LdStGeneral
Jim Laskey076866c2005-10-18 16:23:40 +0000211// ld LdStLD
212// ldarx LdStLDARX
213// ldu LdStLD
214// ldux LdStLD
215// ldx LdStLD
216// lfd LdStLFD
217// lfdu LdStLFDU
218// lfdux LdStLFDU
219// lfdx LdStLFDU
220// lfs LdStLFDU
221// lfsu LdStLFDU
222// lfsux LdStLFDU
223// lfsx LdStLFDU
224// lha LdStLHA
225// lhau LdStLHA
226// lhaux LdStLHA
227// lhax LdStLHA
Jim Laskey53842142005-10-19 19:51:16 +0000228// lhbrx LdStGeneral
229// lhz LdStGeneral
230// lhzu LdStGeneral
231// lhzux LdStUX
232// lhzx LdStGeneral
Jim Laskey076866c2005-10-18 16:23:40 +0000233// lmw LdStLMW
234// lswi LdStLMW
235// lswx LdStLMW
Jim Laskey53842142005-10-19 19:51:16 +0000236// lvebx LdStLVecX
237// lvehx LdStLVecX
238// lvewx LdStLVecX
239// lvsl LdStLVecX
240// lvsr LdStLVecX
241// lvx LdStLVecX
242// lvxl LdStLVecX
Jim Laskey076866c2005-10-18 16:23:40 +0000243// lwa LdStLWA
244// lwarx LdStLWARX
245// lwaux LdStLHA
246// lwax LdStLHA
Jim Laskey53842142005-10-19 19:51:16 +0000247// lwbrx LdStGeneral
248// lwz LdStGeneral
249// lwzu LdStGeneral
250// lwzux LdStUX
251// lwzx LdStGeneral
Jim Laskey076866c2005-10-18 16:23:40 +0000252// mcrf BrMCR
253// mcrfs FPGeneral
254// mcrxr BrMCRX
255// mfcr SprMFCR
256// mffs IntMFFS
257// mfmsr SprMFMSR
258// mfspr SprMFSPR
259// mfsr SprMFSR
260// mfsrin SprMFSR
261// mftb SprMFTB
262// mfvscr IntMFVSCR
263// mtcrf BrMCRX
264// mtfsb0 IntMTFSB0
265// mtfsb1 IntMTFSB0
266// mtfsf IntMTFSB0
267// mtfsfi IntMTFSB0
268// mtmsr SprMTMSR
269// mtmsrd LdStLD
270// mtspr SprMTSPR
271// mtsr SprMTSR
272// mtsrd IntMTSRD
273// mtsrdin IntMTSRD
274// mtsrin SprMTSRIN
275// mtvscr IntMFVSCR
276// mulhd IntMulHD
277// mulhdu IntMulHD
278// mulhw IntMulHW
279// mulhwu IntMulHWU
280// mulld IntMulHD
281// mulli IntMulLI
282// mullw IntMulHW
283// nand IntGeneral
284// neg IntGeneral
285// nor IntGeneral
286// or IntGeneral
287// orc IntGeneral
288// ori IntGeneral
289// oris IntGeneral
290// rfi SprRFI
291// rfid IntRFID
292// rldcl IntRotateD
293// rldcr IntRotateD
294// rldic IntRotateD
295// rldicl IntRotateD
296// rldicr IntRotateD
297// rldimi IntRotateD
298// rlwimi IntRotate
299// rlwinm IntGeneral
300// rlwnm IntGeneral
301// sc SprSC
302// slbia LdStSLBIA
303// slbie LdStSLBIE
304// sld IntRotateD
305// slw IntGeneral
306// srad IntRotateD
307// sradi IntRotateD
308// sraw IntShift
309// srawi IntShift
310// srd IntRotateD
311// srw IntGeneral
Jim Laskey53842142005-10-19 19:51:16 +0000312// stb LdStGeneral
313// stbu LdStGeneral
314// stbux LdStGeneral
315// stbx LdStGeneral
Jim Laskey076866c2005-10-18 16:23:40 +0000316// std LdStSTD
317// stdcx. LdStSTDCX
318// stdu LdStSTD
319// stdux LdStSTD
320// stdx LdStSTD
Jim Laskey53842142005-10-19 19:51:16 +0000321// stfd LdStUX
322// stfdu LdStUX
323// stfdux LdStUX
324// stfdx LdStUX
325// stfiwx LdStUX
326// stfs LdStUX
327// stfsu LdStUX
328// stfsux LdStUX
329// stfsx LdStUX
330// sth LdStGeneral
331// sthbrx LdStGeneral
332// sthu LdStGeneral
333// sthux LdStGeneral
334// sthx LdStGeneral
Jim Laskey076866c2005-10-18 16:23:40 +0000335// stmw LdStLMW
336// stswi LdStLMW
337// stswx LdStLMW
338// stvebx LdStSTVEBX
339// stvehx LdStSTVEBX
340// stvewx LdStSTVEBX
341// stvx LdStSTVEBX
342// stvxl LdStSTVEBX
Jim Laskey53842142005-10-19 19:51:16 +0000343// stw LdStGeneral
344// stwbrx LdStGeneral
Jim Laskey076866c2005-10-18 16:23:40 +0000345// stwcx. LdStSTWCX
Jim Laskey53842142005-10-19 19:51:16 +0000346// stwu LdStGeneral
347// stwux LdStGeneral
348// stwx LdStGeneral
Jim Laskey076866c2005-10-18 16:23:40 +0000349// subf IntGeneral
350// subfc IntGeneral
351// subfe IntGeneral
352// subfic IntGeneral
353// subfme IntGeneral
354// subfze IntGeneral
355// sync LdStSync
356// td IntTrapD
357// tdi IntTrapD
358// tlbia LdStSLBIA
359// tlbie LdStDCBF
360// tlbsync SprTLBSYNC
361// tw IntTrapW
362// twi IntTrapW
363// vaddcuw VecGeneral
364// vaddfp VecFP
365// vaddsbs VecGeneral
366// vaddshs VecGeneral
367// vaddsws VecGeneral
368// vaddubm VecGeneral
369// vaddubs VecGeneral
370// vadduhm VecGeneral
371// vadduhs VecGeneral
372// vadduwm VecGeneral
373// vadduws VecGeneral
374// vand VecGeneral
375// vandc VecGeneral
376// vavgsb VecGeneral
377// vavgsh VecGeneral
378// vavgsw VecGeneral
379// vavgub VecGeneral
380// vavguh VecGeneral
381// vavguw VecGeneral
382// vcfsx VecFP
383// vcfux VecFP
384// vcmpbfp VecFPCompare
385// vcmpeqfp VecFPCompare
386// vcmpequb VecGeneral
387// vcmpequh VecGeneral
388// vcmpequw VecGeneral
389// vcmpgefp VecFPCompare
390// vcmpgtfp VecFPCompare
391// vcmpgtsb VecGeneral
392// vcmpgtsh VecGeneral
393// vcmpgtsw VecGeneral
394// vcmpgtub VecGeneral
395// vcmpgtuh VecGeneral
396// vcmpgtuw VecGeneral
397// vctsxs VecFP
398// vctuxs VecFP
399// vexptefp VecFP
400// vlogefp VecFP
401// vmaddfp VecFP
402// vmaxfp VecFPCompare
403// vmaxsb VecGeneral
404// vmaxsh VecGeneral
405// vmaxsw VecGeneral
406// vmaxub VecGeneral
407// vmaxuh VecGeneral
408// vmaxuw VecGeneral
409// vmhaddshs VecComplex
410// vmhraddshs VecComplex
411// vminfp VecFPCompare
412// vminsb VecGeneral
413// vminsh VecGeneral
414// vminsw VecGeneral
415// vminub VecGeneral
416// vminuh VecGeneral
417// vminuw VecGeneral
418// vmladduhm VecComplex
419// vmrghb VecPerm
420// vmrghh VecPerm
421// vmrghw VecPerm
422// vmrglb VecPerm
423// vmrglh VecPerm
424// vmrglw VecPerm
425// vmsubfp VecFP
426// vmsummbm VecComplex
427// vmsumshm VecComplex
428// vmsumshs VecComplex
429// vmsumubm VecComplex
430// vmsumuhm VecComplex
431// vmsumuhs VecComplex
432// vmulesb VecComplex
433// vmulesh VecComplex
434// vmuleub VecComplex
435// vmuleuh VecComplex
436// vmulosb VecComplex
437// vmulosh VecComplex
438// vmuloub VecComplex
439// vmulouh VecComplex
440// vnor VecGeneral
441// vor VecGeneral
442// vperm VecPerm
443// vpkpx VecPerm
444// vpkshss VecPerm
445// vpkshus VecPerm
446// vpkswss VecPerm
447// vpkswus VecPerm
448// vpkuhum VecPerm
449// vpkuhus VecPerm
450// vpkuwum VecPerm
451// vpkuwus VecPerm
452// vrefp VecFPRound
453// vrfim VecFPRound
454// vrfin VecFPRound
455// vrfip VecFPRound
456// vrfiz VecFPRound
457// vrlb VecGeneral
458// vrlh VecGeneral
459// vrlw VecGeneral
460// vrsqrtefp VecFP
461// vsel VecGeneral
462// vsl VecVSL
463// vslb VecGeneral
464// vsldoi VecPerm
465// vslh VecGeneral
466// vslo VecPerm
467// vslw VecGeneral
468// vspltb VecPerm
469// vsplth VecPerm
470// vspltisb VecPerm
471// vspltish VecPerm
472// vspltisw VecPerm
473// vspltw VecPerm
474// vsr VecVSR
475// vsrab VecGeneral
476// vsrah VecGeneral
477// vsraw VecGeneral
478// vsrb VecGeneral
479// vsrh VecGeneral
480// vsro VecPerm
481// vsrw VecGeneral
482// vsubcuw VecGeneral
483// vsubfp VecFP
484// vsubsbs VecGeneral
485// vsubshs VecGeneral
486// vsubsws VecGeneral
487// vsububm VecGeneral
488// vsububs VecGeneral
489// vsubuhm VecGeneral
490// vsubuhs VecGeneral
491// vsubuwm VecGeneral
492// vsubuws VecGeneral
493// vsum2sws VecComplex
494// vsum4sbs VecComplex
495// vsum4shs VecComplex
496// vsum4ubs VecComplex
497// vsumsws VecComplex
498// vupkhpx VecPerm
499// vupkhsb VecPerm
500// vupkhsh VecPerm
501// vupklpx VecPerm
502// vupklsb VecPerm
503// vupklsh VecPerm
504// vxor VecGeneral
505// xor IntGeneral
506// xori IntGeneral
507// xoris IntGeneral
508//