1*9880d681SAndroid Build Coastguard Worker//===-- PPCScheduleP7.td - PPC P7 Scheduling Definitions ---*- tablegen -*-===// 2*9880d681SAndroid Build Coastguard Worker// 3*9880d681SAndroid Build Coastguard Worker// The LLVM Compiler Infrastructure 4*9880d681SAndroid Build Coastguard Worker// 5*9880d681SAndroid Build Coastguard Worker// This file is distributed under the University of Illinois Open Source 6*9880d681SAndroid Build Coastguard Worker// License. See LICENSE.TXT for details. 7*9880d681SAndroid Build Coastguard Worker// 8*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===// 9*9880d681SAndroid Build Coastguard Worker// 10*9880d681SAndroid Build Coastguard Worker// This file defines the itinerary class data for the POWER7 processor. 11*9880d681SAndroid Build Coastguard Worker// 12*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===// 13*9880d681SAndroid Build Coastguard Worker 14*9880d681SAndroid Build Coastguard Worker// Primary reference: 15*9880d681SAndroid Build Coastguard Worker// IBM POWER7 multicore server processor 16*9880d681SAndroid Build Coastguard Worker// B. Sinharoy, et al. 17*9880d681SAndroid Build Coastguard Worker// IBM J. Res. & Dev. (55) 3. May/June 2011. 18*9880d681SAndroid Build Coastguard Worker 19*9880d681SAndroid Build Coastguard Worker// Scheduling for the P7 involves tracking two types of resources: 20*9880d681SAndroid Build Coastguard Worker// 1. The dispatch bundle slots 21*9880d681SAndroid Build Coastguard Worker// 2. The functional unit resources 22*9880d681SAndroid Build Coastguard Worker 23*9880d681SAndroid Build Coastguard Worker// Dispatch units: 24*9880d681SAndroid Build Coastguard Workerdef P7_DU1 : FuncUnit; 25*9880d681SAndroid Build Coastguard Workerdef P7_DU2 : FuncUnit; 26*9880d681SAndroid Build Coastguard Workerdef P7_DU3 : FuncUnit; 27*9880d681SAndroid Build Coastguard Workerdef P7_DU4 : FuncUnit; 28*9880d681SAndroid Build Coastguard Workerdef P7_DU5 : FuncUnit; 29*9880d681SAndroid Build Coastguard Workerdef P7_DU6 : FuncUnit; 30*9880d681SAndroid Build Coastguard Worker 31*9880d681SAndroid Build Coastguard Workerdef P7_LS1 : FuncUnit; // Load/Store pipeline 1 32*9880d681SAndroid Build Coastguard Workerdef P7_LS2 : FuncUnit; // Load/Store pipeline 2 33*9880d681SAndroid Build Coastguard Worker 34*9880d681SAndroid Build Coastguard Workerdef P7_FX1 : FuncUnit; // FX pipeline 1 35*9880d681SAndroid Build Coastguard Workerdef P7_FX2 : FuncUnit; // FX pipeline 2 36*9880d681SAndroid Build Coastguard Worker 37*9880d681SAndroid Build Coastguard Worker// VS pipeline 1 (vector integer ops. always here) 38*9880d681SAndroid Build Coastguard Workerdef P7_VS1 : FuncUnit; // VS pipeline 1 39*9880d681SAndroid Build Coastguard Worker// VS pipeline 2 (128-bit stores and perms. here) 40*9880d681SAndroid Build Coastguard Workerdef P7_VS2 : FuncUnit; // VS pipeline 2 41*9880d681SAndroid Build Coastguard Worker 42*9880d681SAndroid Build Coastguard Workerdef P7_CRU : FuncUnit; // CR unit (CR logicals and move-from-SPRs) 43*9880d681SAndroid Build Coastguard Workerdef P7_BRU : FuncUnit; // BR unit 44*9880d681SAndroid Build Coastguard Worker 45*9880d681SAndroid Build Coastguard Worker// Notes: 46*9880d681SAndroid Build Coastguard Worker// Each LSU pipeline can also execute FX add and logical instructions. 47*9880d681SAndroid Build Coastguard Worker// Each LSU pipeline can complete a load or store in one cycle. 48*9880d681SAndroid Build Coastguard Worker// 49*9880d681SAndroid Build Coastguard Worker// Each store is broken into two parts, AGEN goes to the LSU while a 50*9880d681SAndroid Build Coastguard Worker// "data steering" op. goes to the FXU or VSU. 51*9880d681SAndroid Build Coastguard Worker// 52*9880d681SAndroid Build Coastguard Worker// FX loads have a two cycle load-to-use latency (so one "bubble" cycle). 53*9880d681SAndroid Build Coastguard Worker// VSU loads have a three cycle load-to-use latency (so two "bubble" cycle). 54*9880d681SAndroid Build Coastguard Worker// 55*9880d681SAndroid Build Coastguard Worker// Frequent FX ops. take only one cycle and results can be used again in the 56*9880d681SAndroid Build Coastguard Worker// next cycle (there is a self-bypass). Getting results from the other FX 57*9880d681SAndroid Build Coastguard Worker// pipeline takes an additional cycle. 58*9880d681SAndroid Build Coastguard Worker// 59*9880d681SAndroid Build Coastguard Worker// The VSU XS is similar to the POWER6, but with a pipeline length of 2 cycles 60*9880d681SAndroid Build Coastguard Worker// (instead of 3 cycles on the POWER6). VSU XS handles vector FX-style ops. 61*9880d681SAndroid Build Coastguard Worker// Dispatch of an instruction to VS1 that uses four single prec. inputs 62*9880d681SAndroid Build Coastguard Worker// (either to a float or XC op). prevents dispatch in that cycle to VS2 of any 63*9880d681SAndroid Build Coastguard Worker// floating point instruction. 64*9880d681SAndroid Build Coastguard Worker// 65*9880d681SAndroid Build Coastguard Worker// The VSU PM is similar to the POWER6, but with a pipeline length of 3 cycles 66*9880d681SAndroid Build Coastguard Worker// (instead of 4 cycles on the POWER6). vsel is handled by the PM pipeline 67*9880d681SAndroid Build Coastguard Worker// (unlike on the POWER6). 68*9880d681SAndroid Build Coastguard Worker// 69*9880d681SAndroid Build Coastguard Worker// FMA from the VSUs can forward results in 6 cycles. VS1 XS and vector FP 70*9880d681SAndroid Build Coastguard Worker// share the same write-back, and have a 5-cycle latency difference, so the 71*9880d681SAndroid Build Coastguard Worker// IFU/IDU will not dispatch an XS instructon 5 cycles after a vector FP 72*9880d681SAndroid Build Coastguard Worker// op. has been dispatched to VS1. 73*9880d681SAndroid Build Coastguard Worker// 74*9880d681SAndroid Build Coastguard Worker// Three cycles after an L1 cache hit, a dependent VSU instruction can issue. 75*9880d681SAndroid Build Coastguard Worker// 76*9880d681SAndroid Build Coastguard Worker// Instruction dispatch groups have (at most) four non-branch instructions, and 77*9880d681SAndroid Build Coastguard Worker// two branches. Unlike on the POWER4/5, a branch does not automatically 78*9880d681SAndroid Build Coastguard Worker// end the dispatch group, but a second branch must be the last in the group. 79*9880d681SAndroid Build Coastguard Worker 80*9880d681SAndroid Build Coastguard Workerdef P7Itineraries : ProcessorItineraries< 81*9880d681SAndroid Build Coastguard Worker [P7_DU1, P7_DU2, P7_DU3, P7_DU4, P7_DU5, P7_DU6, 82*9880d681SAndroid Build Coastguard Worker P7_LS1, P7_LS2, P7_FX1, P7_FX2, P7_VS1, P7_VS2, P7_CRU, P7_BRU], [], [ 83*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_IntSimple , [InstrStage<1, [P7_DU1, P7_DU2, 84*9880d681SAndroid Build Coastguard Worker P7_DU3, P7_DU4], 0>, 85*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_FX1, P7_FX2, 86*9880d681SAndroid Build Coastguard Worker P7_LS1, P7_LS2]>], 87*9880d681SAndroid Build Coastguard Worker [1, 1, 1]>, 88*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_IntGeneral , [InstrStage<1, [P7_DU1, P7_DU2, 89*9880d681SAndroid Build Coastguard Worker P7_DU3, P7_DU4], 0>, 90*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_FX1, P7_FX2]>], 91*9880d681SAndroid Build Coastguard Worker [1, 1, 1]>, 92*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_IntISEL, [InstrStage<1, [P7_DU1], 0>, 93*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_FX1, P7_FX2], 0>, 94*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_BRU]>], 95*9880d681SAndroid Build Coastguard Worker [1, 1, 1, 1]>, 96*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_IntCompare , [InstrStage<1, [P7_DU1, P7_DU2, 97*9880d681SAndroid Build Coastguard Worker P7_DU3, P7_DU4], 0>, 98*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_FX1, P7_FX2]>], 99*9880d681SAndroid Build Coastguard Worker [1, 1, 1]>, 100*9880d681SAndroid Build Coastguard Worker // FIXME: Add record-form itinerary data. 101*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_IntDivW , [InstrStage<1, [P7_DU1], 0>, 102*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_DU2], 0>, 103*9880d681SAndroid Build Coastguard Worker InstrStage<36, [P7_FX1, P7_FX2]>], 104*9880d681SAndroid Build Coastguard Worker [36, 1, 1]>, 105*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_IntDivD , [InstrStage<1, [P7_DU1], 0>, 106*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_DU2], 0>, 107*9880d681SAndroid Build Coastguard Worker InstrStage<68, [P7_FX1, P7_FX2]>], 108*9880d681SAndroid Build Coastguard Worker [68, 1, 1]>, 109*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_IntMulHW , [InstrStage<1, [P7_DU1, P7_DU2, 110*9880d681SAndroid Build Coastguard Worker P7_DU3, P7_DU4], 0>, 111*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_FX1, P7_FX2]>], 112*9880d681SAndroid Build Coastguard Worker [4, 1, 1]>, 113*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_IntMulHWU , [InstrStage<1, [P7_DU1, P7_DU2, 114*9880d681SAndroid Build Coastguard Worker P7_DU3, P7_DU4], 0>, 115*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_FX1, P7_FX2]>], 116*9880d681SAndroid Build Coastguard Worker [4, 1, 1]>, 117*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_IntMulLI , [InstrStage<1, [P7_DU1, P7_DU2, 118*9880d681SAndroid Build Coastguard Worker P7_DU3, P7_DU4], 0>, 119*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_FX1, P7_FX2]>], 120*9880d681SAndroid Build Coastguard Worker [4, 1, 1]>, 121*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_IntRotate , [InstrStage<1, [P7_DU1, P7_DU2, 122*9880d681SAndroid Build Coastguard Worker P7_DU3, P7_DU4], 0>, 123*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_FX1, P7_FX2]>], 124*9880d681SAndroid Build Coastguard Worker [1, 1, 1]>, 125*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_IntRotateD , [InstrStage<1, [P7_DU1, P7_DU2, 126*9880d681SAndroid Build Coastguard Worker P7_DU3, P7_DU4], 0>, 127*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_FX1, P7_FX2]>], 128*9880d681SAndroid Build Coastguard Worker [1, 1, 1]>, 129*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_IntShift , [InstrStage<1, [P7_DU1, P7_DU2, 130*9880d681SAndroid Build Coastguard Worker P7_DU3, P7_DU4], 0>, 131*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_FX1, P7_FX2]>], 132*9880d681SAndroid Build Coastguard Worker [1, 1, 1]>, 133*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_IntTrapW , [InstrStage<1, [P7_DU1, P7_DU2, 134*9880d681SAndroid Build Coastguard Worker P7_DU3, P7_DU4], 0>, 135*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_FX1, P7_FX2]>], 136*9880d681SAndroid Build Coastguard Worker [1, 1]>, 137*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_IntTrapD , [InstrStage<1, [P7_DU1, P7_DU2, 138*9880d681SAndroid Build Coastguard Worker P7_DU3, P7_DU4], 0>, 139*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_FX1, P7_FX2]>], 140*9880d681SAndroid Build Coastguard Worker [1, 1]>, 141*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_BrB , [InstrStage<1, [P7_DU5, P7_DU6], 0>, 142*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_BRU]>], 143*9880d681SAndroid Build Coastguard Worker [3, 1, 1]>, 144*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_BrCR , [InstrStage<1, [P7_DU1], 0>, 145*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_CRU]>], 146*9880d681SAndroid Build Coastguard Worker [3, 1, 1]>, 147*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_BrMCR , [InstrStage<1, [P7_DU5, P7_DU6], 0>, 148*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_BRU]>], 149*9880d681SAndroid Build Coastguard Worker [3, 1, 1]>, 150*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_BrMCRX , [InstrStage<1, [P7_DU5, P7_DU6], 0>, 151*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_BRU]>], 152*9880d681SAndroid Build Coastguard Worker [3, 1, 1]>, 153*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_LdStLoad , [InstrStage<1, [P7_DU1, P7_DU2, 154*9880d681SAndroid Build Coastguard Worker P7_DU3, P7_DU4], 0>, 155*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_LS1, P7_LS2]>], 156*9880d681SAndroid Build Coastguard Worker [2, 1, 1]>, 157*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_LdStLoadUpd , [InstrStage<1, [P7_DU1], 0>, 158*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_DU2], 0>, 159*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_LS1, P7_LS2], 0>, 160*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_FX1, P7_FX2]>], 161*9880d681SAndroid Build Coastguard Worker [2, 2, 1, 1]>, 162*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_LdStLoadUpdX, [InstrStage<1, [P7_DU1], 0>, 163*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_DU2], 0>, 164*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_DU3], 0>, 165*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_DU4], 0>, 166*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_FX1, P7_FX2]>, 167*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_LS1, P7_LS2], 0>, 168*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_FX1, P7_FX2]>], 169*9880d681SAndroid Build Coastguard Worker [3, 3, 1, 1]>, 170*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_LdStLD , [InstrStage<1, [P7_DU1, P7_DU2, 171*9880d681SAndroid Build Coastguard Worker P7_DU3, P7_DU4], 0>, 172*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_LS1, P7_LS2]>], 173*9880d681SAndroid Build Coastguard Worker [2, 1, 1]>, 174*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_LdStLDU , [InstrStage<1, [P7_DU1], 0>, 175*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_DU2], 0>, 176*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_LS1, P7_LS2], 0>, 177*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_FX1, P7_FX2]>], 178*9880d681SAndroid Build Coastguard Worker [2, 2, 1, 1]>, 179*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_LdStLDUX , [InstrStage<1, [P7_DU1], 0>, 180*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_DU2], 0>, 181*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_DU3], 0>, 182*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_DU4], 0>, 183*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_FX1, P7_FX2]>, 184*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_LS1, P7_LS2], 0>, 185*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_FX1, P7_FX2]>], 186*9880d681SAndroid Build Coastguard Worker [3, 3, 1, 1]>, 187*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_LdStLFD , [InstrStage<1, [P7_DU1, P7_DU2, 188*9880d681SAndroid Build Coastguard Worker P7_DU3, P7_DU4], 0>, 189*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_LS1, P7_LS2]>], 190*9880d681SAndroid Build Coastguard Worker [3, 1, 1]>, 191*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_LdStLVecX , [InstrStage<1, [P7_DU1, P7_DU2, 192*9880d681SAndroid Build Coastguard Worker P7_DU3, P7_DU4], 0>, 193*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_LS1, P7_LS2]>], 194*9880d681SAndroid Build Coastguard Worker [3, 1, 1]>, 195*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_LdStLFDU , [InstrStage<1, [P7_DU1], 0>, 196*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_DU2], 0>, 197*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_LS1, P7_LS2], 0>, 198*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_FX1, P7_FX2]>], 199*9880d681SAndroid Build Coastguard Worker [3, 3, 1, 1]>, 200*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_LdStLFDUX , [InstrStage<1, [P7_DU1], 0>, 201*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_DU2], 0>, 202*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_LS1, P7_LS2], 0>, 203*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_FX1, P7_FX2]>], 204*9880d681SAndroid Build Coastguard Worker [3, 3, 1, 1]>, 205*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_LdStLHA , [InstrStage<1, [P7_DU1], 0>, 206*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_DU2], 0>, 207*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_LS1, P7_LS2]>, 208*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_FX1, P7_FX2]>], 209*9880d681SAndroid Build Coastguard Worker [3, 1, 1]>, 210*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_LdStLHAU , [InstrStage<1, [P7_DU1], 0>, 211*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_DU2], 0>, 212*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_LS1, P7_LS2], 0>, 213*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_FX1, P7_FX2]>, 214*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_FX1, P7_FX2]>], 215*9880d681SAndroid Build Coastguard Worker [4, 4, 1, 1]>, 216*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_LdStLHAUX , [InstrStage<1, [P7_DU1], 0>, 217*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_DU2], 0>, 218*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_DU3], 0>, 219*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_DU4], 0>, 220*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_FX1, P7_FX2]>, 221*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_LS1, P7_LS2], 0>, 222*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_FX1, P7_FX2]>, 223*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_FX1, P7_FX2]>], 224*9880d681SAndroid Build Coastguard Worker [4, 4, 1, 1]>, 225*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_LdStLWA , [InstrStage<1, [P7_DU1], 0>, 226*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_DU2], 0>, 227*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_LS1, P7_LS2]>, 228*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_FX1, P7_FX2]>], 229*9880d681SAndroid Build Coastguard Worker [3, 1, 1]>, 230*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_LdStLWARX, [InstrStage<1, [P7_DU1], 0>, 231*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_DU2], 0>, 232*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_DU3], 0>, 233*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_DU4], 0>, 234*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_LS1, P7_LS2]>], 235*9880d681SAndroid Build Coastguard Worker [3, 1, 1]>, 236*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_LdStLDARX, [InstrStage<1, [P7_DU1], 0>, 237*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_DU2], 0>, 238*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_DU3], 0>, 239*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_DU4], 0>, 240*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_LS1, P7_LS2]>], 241*9880d681SAndroid Build Coastguard Worker [3, 1, 1]>, 242*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_LdStLMW , [InstrStage<1, [P7_DU1, P7_DU2, 243*9880d681SAndroid Build Coastguard Worker P7_DU3, P7_DU4], 0>, 244*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_LS1, P7_LS2]>], 245*9880d681SAndroid Build Coastguard Worker [2, 1, 1]>, 246*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_LdStStore , [InstrStage<1, [P7_DU1, P7_DU2, 247*9880d681SAndroid Build Coastguard Worker P7_DU3, P7_DU4], 0>, 248*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_LS1, P7_LS2], 0>, 249*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_FX1, P7_FX2]>], 250*9880d681SAndroid Build Coastguard Worker [1, 1, 1]>, 251*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_LdStSTD , [InstrStage<1, [P7_DU1, P7_DU2, 252*9880d681SAndroid Build Coastguard Worker P7_DU3, P7_DU4], 0>, 253*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_LS1, P7_LS2], 0>, 254*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_FX1, P7_FX2]>], 255*9880d681SAndroid Build Coastguard Worker [1, 1, 1]>, 256*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_LdStSTDU , [InstrStage<1, [P7_DU1], 0>, 257*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_DU2], 0>, 258*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_LS1, P7_LS2], 0>, 259*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_FX1, P7_FX2]>, 260*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_FX1, P7_FX2]>], 261*9880d681SAndroid Build Coastguard Worker [2, 1, 1, 1]>, 262*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_LdStSTDUX , [InstrStage<1, [P7_DU1], 0>, 263*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_DU2], 0>, 264*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_DU3], 0>, 265*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_DU4], 0>, 266*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_LS1, P7_LS2], 0>, 267*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_FX1, P7_FX2]>, 268*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_FX1, P7_FX2]>], 269*9880d681SAndroid Build Coastguard Worker [2, 1, 1, 1]>, 270*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_LdStSTFD , [InstrStage<1, [P7_DU1, P7_DU2, 271*9880d681SAndroid Build Coastguard Worker P7_DU3, P7_DU4], 0>, 272*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_LS1, P7_LS2], 0>, 273*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_VS1, P7_VS2]>], 274*9880d681SAndroid Build Coastguard Worker [1, 1, 1]>, 275*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_LdStSTFDU , [InstrStage<1, [P7_DU1], 0>, 276*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_DU2], 0>, 277*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_LS1, P7_LS2], 0>, 278*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_FX1, P7_FX2], 0>, 279*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_VS1, P7_VS2]>], 280*9880d681SAndroid Build Coastguard Worker [2, 1, 1, 1]>, 281*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_LdStSTVEBX , [InstrStage<1, [P7_DU1, P7_DU2, 282*9880d681SAndroid Build Coastguard Worker P7_DU3, P7_DU4], 0>, 283*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_LS1, P7_LS2], 0>, 284*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_VS2]>], 285*9880d681SAndroid Build Coastguard Worker [1, 1, 1]>, 286*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_LdStSTDCX , [InstrStage<1, [P7_DU1], 0>, 287*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_DU2], 0>, 288*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_DU3], 0>, 289*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_DU4], 0>, 290*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_LS1, P7_LS2]>], 291*9880d681SAndroid Build Coastguard Worker [1, 1, 1]>, 292*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_LdStSTWCX , [InstrStage<1, [P7_DU1], 0>, 293*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_DU2], 0>, 294*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_DU3], 0>, 295*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_DU4], 0>, 296*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_LS1, P7_LS2]>], 297*9880d681SAndroid Build Coastguard Worker [1, 1, 1]>, 298*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_BrMCRX , [InstrStage<1, [P7_DU1], 0>, 299*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_DU2], 0>, 300*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_DU3], 0>, 301*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_DU4], 0>, 302*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_CRU]>, 303*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_FX1, P7_FX2]>], 304*9880d681SAndroid Build Coastguard Worker [3, 1]>, // mtcr 305*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_SprMFCR , [InstrStage<1, [P7_DU1], 0>, 306*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_CRU]>], 307*9880d681SAndroid Build Coastguard Worker [6, 1]>, 308*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_SprMFCRF , [InstrStage<1, [P7_DU1], 0>, 309*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_CRU]>], 310*9880d681SAndroid Build Coastguard Worker [3, 1]>, 311*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_SprMTSPR , [InstrStage<1, [P7_DU1], 0>, 312*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_FX1]>], 313*9880d681SAndroid Build Coastguard Worker [4, 1]>, // mtctr 314*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_FPGeneral , [InstrStage<1, [P7_DU1, P7_DU2, 315*9880d681SAndroid Build Coastguard Worker P7_DU3, P7_DU4], 0>, 316*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_VS1, P7_VS2]>], 317*9880d681SAndroid Build Coastguard Worker [5, 1, 1]>, 318*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_FPAddSub , [InstrStage<1, [P7_DU1, P7_DU2, 319*9880d681SAndroid Build Coastguard Worker P7_DU3, P7_DU4], 0>, 320*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_VS1, P7_VS2]>], 321*9880d681SAndroid Build Coastguard Worker [5, 1, 1]>, 322*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_FPCompare , [InstrStage<1, [P7_DU1, P7_DU2, 323*9880d681SAndroid Build Coastguard Worker P7_DU3, P7_DU4], 0>, 324*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_VS1, P7_VS2]>], 325*9880d681SAndroid Build Coastguard Worker [8, 1, 1]>, 326*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_FPDivD , [InstrStage<1, [P7_DU1, P7_DU2, 327*9880d681SAndroid Build Coastguard Worker P7_DU3, P7_DU4], 0>, 328*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_VS1, P7_VS2]>], 329*9880d681SAndroid Build Coastguard Worker [33, 1, 1]>, 330*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_FPDivS , [InstrStage<1, [P7_DU1, P7_DU2, 331*9880d681SAndroid Build Coastguard Worker P7_DU3, P7_DU4], 0>, 332*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_VS1, P7_VS2]>], 333*9880d681SAndroid Build Coastguard Worker [27, 1, 1]>, 334*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_FPSqrtD , [InstrStage<1, [P7_DU1, P7_DU2, 335*9880d681SAndroid Build Coastguard Worker P7_DU3, P7_DU4], 0>, 336*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_VS1, P7_VS2]>], 337*9880d681SAndroid Build Coastguard Worker [44, 1, 1]>, 338*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_FPSqrtS , [InstrStage<1, [P7_DU1, P7_DU2, 339*9880d681SAndroid Build Coastguard Worker P7_DU3, P7_DU4], 0>, 340*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_VS1, P7_VS2]>], 341*9880d681SAndroid Build Coastguard Worker [32, 1, 1]>, 342*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_FPFused , [InstrStage<1, [P7_DU1, P7_DU2, 343*9880d681SAndroid Build Coastguard Worker P7_DU3, P7_DU4], 0>, 344*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_VS1, P7_VS2]>], 345*9880d681SAndroid Build Coastguard Worker [5, 1, 1, 1]>, 346*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_FPRes , [InstrStage<1, [P7_DU1, P7_DU2, 347*9880d681SAndroid Build Coastguard Worker P7_DU3, P7_DU4], 0>, 348*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_VS1, P7_VS2]>], 349*9880d681SAndroid Build Coastguard Worker [5, 1, 1]>, 350*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_VecGeneral , [InstrStage<1, [P7_DU1], 0>, 351*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_VS1]>], 352*9880d681SAndroid Build Coastguard Worker [2, 1, 1]>, 353*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_VecVSL , [InstrStage<1, [P7_DU1], 0>, 354*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_VS1]>], 355*9880d681SAndroid Build Coastguard Worker [2, 1, 1]>, 356*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_VecVSR , [InstrStage<1, [P7_DU1], 0>, 357*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_VS1]>], 358*9880d681SAndroid Build Coastguard Worker [2, 1, 1]>, 359*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_VecFP , [InstrStage<1, [P7_DU1], 0>, 360*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_VS1, P7_VS2]>], 361*9880d681SAndroid Build Coastguard Worker [6, 1, 1]>, 362*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_VecFPCompare, [InstrStage<1, [P7_DU1], 0>, 363*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_VS1, P7_VS2]>], 364*9880d681SAndroid Build Coastguard Worker [6, 1, 1]>, 365*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_VecFPRound , [InstrStage<1, [P7_DU1], 0>, 366*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_VS1, P7_VS2]>], 367*9880d681SAndroid Build Coastguard Worker [6, 1, 1]>, 368*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_VecComplex , [InstrStage<1, [P7_DU1], 0>, 369*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_VS1]>], 370*9880d681SAndroid Build Coastguard Worker [7, 1, 1]>, 371*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_VecPerm , [InstrStage<1, [P7_DU1, P7_DU2], 0>, 372*9880d681SAndroid Build Coastguard Worker InstrStage<1, [P7_VS2]>], 373*9880d681SAndroid Build Coastguard Worker [3, 1, 1]> 374*9880d681SAndroid Build Coastguard Worker]>; 375*9880d681SAndroid Build Coastguard Worker 376*9880d681SAndroid Build Coastguard Worker// ===---------------------------------------------------------------------===// 377*9880d681SAndroid Build Coastguard Worker// P7 machine model for scheduling and other instruction cost heuristics. 378*9880d681SAndroid Build Coastguard Worker 379*9880d681SAndroid Build Coastguard Workerdef P7Model : SchedMachineModel { 380*9880d681SAndroid Build Coastguard Worker let IssueWidth = 6; // 4 (non-branch) instructions are dispatched per cycle. 381*9880d681SAndroid Build Coastguard Worker // Note that the dispatch bundle size is 6 (including 382*9880d681SAndroid Build Coastguard Worker // branches), but the total internal issue bandwidth per 383*9880d681SAndroid Build Coastguard Worker // cycle (from all queues) is 8. 384*9880d681SAndroid Build Coastguard Worker 385*9880d681SAndroid Build Coastguard Worker let LoadLatency = 3; // Optimistic load latency assuming bypass. 386*9880d681SAndroid Build Coastguard Worker // This is overriden by OperandCycles if the 387*9880d681SAndroid Build Coastguard Worker // Itineraries are queried instead. 388*9880d681SAndroid Build Coastguard Worker let MispredictPenalty = 16; 389*9880d681SAndroid Build Coastguard Worker 390*9880d681SAndroid Build Coastguard Worker // Try to make sure we have at least 10 dispatch groups in a loop. 391*9880d681SAndroid Build Coastguard Worker let LoopMicroOpBufferSize = 40; 392*9880d681SAndroid Build Coastguard Worker 393*9880d681SAndroid Build Coastguard Worker let CompleteModel = 0; 394*9880d681SAndroid Build Coastguard Worker 395*9880d681SAndroid Build Coastguard Worker let Itineraries = P7Itineraries; 396*9880d681SAndroid Build Coastguard Worker} 397*9880d681SAndroid Build Coastguard Worker 398