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