]> git.proxmox.com Git - rustc.git/blob - src/llvm/lib/Target/PowerPC/PPCSchedule.td
Imported Upstream version 1.0.0+dfsg1
[rustc.git] / src / llvm / lib / Target / PowerPC / PPCSchedule.td
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 //
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;
112
113 //===----------------------------------------------------------------------===//
114 // Processor instruction itineraries.
115
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 "PPCScheduleP8.td"
123 include "PPCScheduleA2.td"
124 include "PPCScheduleE500mc.td"
125 include "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 //