Home | History | Annotate | Download | only in PowerPC
      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 // Functional units across PowerPC chips sets
     12 //
     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
     24 
     25 //===----------------------------------------------------------------------===//
     26 // Instruction Itinerary classes used for PowerPC
     27 //
     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;
    101 
    102 //===----------------------------------------------------------------------===//
    103 // Processor instruction itineraries.
    104 
    105 include "PPCScheduleG3.td"
    106 include "PPCScheduleG4.td"
    107 include "PPCScheduleG4Plus.td"
    108 include "PPCScheduleG5.td"
    109 
    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.
    114 //
    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
    505 //
    506