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