1*9880d681SAndroid Build Coastguard Worker//===- PPCScheduleA2.td - PPC A2 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// Primary reference: 11*9880d681SAndroid Build Coastguard Worker// A2 Processor User's Manual. 12*9880d681SAndroid Build Coastguard Worker// IBM (as updated in) 2010. 13*9880d681SAndroid Build Coastguard Worker 14*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===// 15*9880d681SAndroid Build Coastguard Worker// Functional units on the PowerPC A2 chip sets 16*9880d681SAndroid Build Coastguard Worker// 17*9880d681SAndroid Build Coastguard Workerdef A2_XU : FuncUnit; // A2_XU pipeline 18*9880d681SAndroid Build Coastguard Workerdef A2_FU : FuncUnit; // FI pipeline 19*9880d681SAndroid Build Coastguard Worker 20*9880d681SAndroid Build Coastguard Worker// 21*9880d681SAndroid Build Coastguard Worker// This file defines the itinerary class data for the PPC A2 processor. 22*9880d681SAndroid Build Coastguard Worker// 23*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===// 24*9880d681SAndroid Build Coastguard Worker 25*9880d681SAndroid Build Coastguard Worker 26*9880d681SAndroid Build Coastguard Workerdef PPCA2Itineraries : ProcessorItineraries< 27*9880d681SAndroid Build Coastguard Worker [A2_XU, A2_FU], [], [ 28*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_IntSimple, [InstrStage<1, [A2_XU]>], 29*9880d681SAndroid Build Coastguard Worker [1, 0, 0]>, 30*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_IntGeneral, [InstrStage<1, [A2_XU]>], 31*9880d681SAndroid Build Coastguard Worker [2, 0, 0]>, 32*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_IntISEL, [InstrStage<1, [A2_XU]>], 33*9880d681SAndroid Build Coastguard Worker [2, 0, 0, 0]>, 34*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_IntCompare, [InstrStage<1, [A2_XU]>], 35*9880d681SAndroid Build Coastguard Worker [2, 0, 0]>, 36*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_IntDivW, [InstrStage<1, [A2_XU]>], 37*9880d681SAndroid Build Coastguard Worker [39, 0, 0]>, 38*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_IntDivD, [InstrStage<1, [A2_XU]>], 39*9880d681SAndroid Build Coastguard Worker [71, 0, 0]>, 40*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_IntMulHW, [InstrStage<1, [A2_XU]>], 41*9880d681SAndroid Build Coastguard Worker [5, 0, 0]>, 42*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_IntMulHWU, [InstrStage<1, [A2_XU]>], 43*9880d681SAndroid Build Coastguard Worker [5, 0, 0]>, 44*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_IntMulLI, [InstrStage<1, [A2_XU]>], 45*9880d681SAndroid Build Coastguard Worker [6, 0, 0]>, 46*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_IntRotate, [InstrStage<1, [A2_XU]>], 47*9880d681SAndroid Build Coastguard Worker [2, 0, 0]>, 48*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_IntRotateD, [InstrStage<1, [A2_XU]>], 49*9880d681SAndroid Build Coastguard Worker [2, 0, 0]>, 50*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_IntRotateDI, [InstrStage<1, [A2_XU]>], 51*9880d681SAndroid Build Coastguard Worker [2, 0, 0]>, 52*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_IntShift, [InstrStage<1, [A2_XU]>], 53*9880d681SAndroid Build Coastguard Worker [2, 0, 0]>, 54*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_IntTrapW, [InstrStage<1, [A2_XU]>], 55*9880d681SAndroid Build Coastguard Worker [2, 0]>, 56*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_IntTrapD, [InstrStage<1, [A2_XU]>], 57*9880d681SAndroid Build Coastguard Worker [2, 0]>, 58*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_BrB, [InstrStage<1, [A2_XU]>], 59*9880d681SAndroid Build Coastguard Worker [6, 0, 0]>, 60*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_BrCR, [InstrStage<1, [A2_XU]>], 61*9880d681SAndroid Build Coastguard Worker [1, 0, 0]>, 62*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_BrMCR, [InstrStage<1, [A2_XU]>], 63*9880d681SAndroid Build Coastguard Worker [5, 0, 0]>, 64*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_BrMCRX, [InstrStage<1, [A2_XU]>], 65*9880d681SAndroid Build Coastguard Worker [1, 0, 0]>, 66*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_LdStDCBA, [InstrStage<1, [A2_XU]>], 67*9880d681SAndroid Build Coastguard Worker [1, 0, 0]>, 68*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_LdStDCBF, [InstrStage<1, [A2_XU]>], 69*9880d681SAndroid Build Coastguard Worker [1, 0, 0]>, 70*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_LdStDCBI, [InstrStage<1, [A2_XU]>], 71*9880d681SAndroid Build Coastguard Worker [1, 0, 0]>, 72*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_LdStLoad, [InstrStage<1, [A2_XU]>], 73*9880d681SAndroid Build Coastguard Worker [6, 0, 0]>, 74*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_LdStLoadUpd, [InstrStage<1, [A2_XU]>], 75*9880d681SAndroid Build Coastguard Worker [6, 8, 0, 0]>, 76*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_LdStLoadUpdX,[InstrStage<1, [A2_XU]>], 77*9880d681SAndroid Build Coastguard Worker [6, 8, 0, 0]>, 78*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_LdStLDU, [InstrStage<1, [A2_XU]>], 79*9880d681SAndroid Build Coastguard Worker [6, 0, 0]>, 80*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_LdStLDUX, [InstrStage<1, [A2_XU]>], 81*9880d681SAndroid Build Coastguard Worker [6, 0, 0]>, 82*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_LdStStore, [InstrStage<1, [A2_XU]>], 83*9880d681SAndroid Build Coastguard Worker [0, 0, 0]>, 84*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_LdStStoreUpd,[InstrStage<1, [A2_XU]>], 85*9880d681SAndroid Build Coastguard Worker [2, 0, 0, 0]>, 86*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_LdStICBI, [InstrStage<1, [A2_XU]>], 87*9880d681SAndroid Build Coastguard Worker [16, 0, 0]>, 88*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_LdStSTFD, [InstrStage<1, [A2_XU]>], 89*9880d681SAndroid Build Coastguard Worker [0, 0, 0]>, 90*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_LdStSTFDU, [InstrStage<1, [A2_XU]>], 91*9880d681SAndroid Build Coastguard Worker [2, 0, 0, 0]>, 92*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_LdStLFD, [InstrStage<1, [A2_XU]>], 93*9880d681SAndroid Build Coastguard Worker [7, 0, 0]>, 94*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_LdStLFDU, [InstrStage<1, [A2_XU]>], 95*9880d681SAndroid Build Coastguard Worker [7, 9, 0, 0]>, 96*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_LdStLFDUX, [InstrStage<1, [A2_XU]>], 97*9880d681SAndroid Build Coastguard Worker [7, 9, 0, 0]>, 98*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_LdStLHA, [InstrStage<1, [A2_XU]>], 99*9880d681SAndroid Build Coastguard Worker [6, 0, 0]>, 100*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_LdStLHAU, [InstrStage<1, [A2_XU]>], 101*9880d681SAndroid Build Coastguard Worker [6, 8, 0, 0]>, 102*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_LdStLHAUX, [InstrStage<1, [A2_XU]>], 103*9880d681SAndroid Build Coastguard Worker [6, 8, 0, 0]>, 104*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_LdStLWARX, [InstrStage<1, [A2_XU]>], 105*9880d681SAndroid Build Coastguard Worker [82, 0, 0]>, // L2 latency 106*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_LdStSTD, [InstrStage<1, [A2_XU]>], 107*9880d681SAndroid Build Coastguard Worker [0, 0, 0]>, 108*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_LdStSTDU, [InstrStage<1, [A2_XU]>], 109*9880d681SAndroid Build Coastguard Worker [2, 0, 0, 0]>, 110*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_LdStSTDUX, [InstrStage<1, [A2_XU]>], 111*9880d681SAndroid Build Coastguard Worker [2, 0, 0, 0]>, 112*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_LdStSTDCX, [InstrStage<1, [A2_XU]>], 113*9880d681SAndroid Build Coastguard Worker [82, 0, 0]>, // L2 latency 114*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_LdStSTWCX, [InstrStage<1, [A2_XU]>], 115*9880d681SAndroid Build Coastguard Worker [82, 0, 0]>, // L2 latency 116*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_LdStSync, [InstrStage<1, [A2_XU]>], 117*9880d681SAndroid Build Coastguard Worker [6]>, 118*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_SprISYNC, [InstrStage<1, [A2_XU]>], 119*9880d681SAndroid Build Coastguard Worker [16]>, 120*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_SprMTMSR, [InstrStage<1, [A2_XU]>], 121*9880d681SAndroid Build Coastguard Worker [16, 0]>, 122*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_SprMFCR, [InstrStage<1, [A2_XU]>], 123*9880d681SAndroid Build Coastguard Worker [6, 0]>, 124*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_SprMFCRF, [InstrStage<1, [A2_XU]>], 125*9880d681SAndroid Build Coastguard Worker [1, 0]>, 126*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_SprMFMSR, [InstrStage<1, [A2_XU]>], 127*9880d681SAndroid Build Coastguard Worker [4, 0]>, 128*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_SprMFSPR, [InstrStage<1, [A2_XU]>], 129*9880d681SAndroid Build Coastguard Worker [6, 0]>, 130*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_SprMFTB, [InstrStage<1, [A2_XU]>], 131*9880d681SAndroid Build Coastguard Worker [4, 0]>, 132*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_SprMTSPR, [InstrStage<1, [A2_XU]>], 133*9880d681SAndroid Build Coastguard Worker [6, 0]>, 134*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_SprRFI, [InstrStage<1, [A2_XU]>], 135*9880d681SAndroid Build Coastguard Worker [16]>, 136*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_SprSC, [InstrStage<1, [A2_XU]>], 137*9880d681SAndroid Build Coastguard Worker [16]>, 138*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_FPGeneral, [InstrStage<1, [A2_FU]>], 139*9880d681SAndroid Build Coastguard Worker [6, 0, 0]>, 140*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_FPAddSub, [InstrStage<1, [A2_FU]>], 141*9880d681SAndroid Build Coastguard Worker [6, 0, 0]>, 142*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_FPCompare, [InstrStage<1, [A2_FU]>], 143*9880d681SAndroid Build Coastguard Worker [5, 0, 0]>, 144*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_FPDivD, [InstrStage<1, [A2_FU]>], 145*9880d681SAndroid Build Coastguard Worker [72, 0, 0]>, 146*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_FPDivS, [InstrStage<1, [A2_FU]>], 147*9880d681SAndroid Build Coastguard Worker [59, 0, 0]>, 148*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_FPSqrtD, [InstrStage<1, [A2_FU]>], 149*9880d681SAndroid Build Coastguard Worker [69, 0, 0]>, 150*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_FPSqrtS, [InstrStage<1, [A2_FU]>], 151*9880d681SAndroid Build Coastguard Worker [65, 0, 0]>, 152*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_FPFused, [InstrStage<1, [A2_FU]>], 153*9880d681SAndroid Build Coastguard Worker [6, 0, 0, 0]>, 154*9880d681SAndroid Build Coastguard Worker InstrItinData<IIC_FPRes, [InstrStage<1, [A2_FU]>], 155*9880d681SAndroid Build Coastguard Worker [6, 0]> 156*9880d681SAndroid Build Coastguard Worker]>; 157*9880d681SAndroid Build Coastguard Worker 158*9880d681SAndroid Build Coastguard Worker// ===---------------------------------------------------------------------===// 159*9880d681SAndroid Build Coastguard Worker// A2 machine model for scheduling and other instruction cost heuristics. 160*9880d681SAndroid Build Coastguard Worker 161*9880d681SAndroid Build Coastguard Workerdef PPCA2Model : SchedMachineModel { 162*9880d681SAndroid Build Coastguard Worker let IssueWidth = 1; // 1 instruction is dispatched per cycle. 163*9880d681SAndroid Build Coastguard Worker let LoadLatency = 6; // Optimistic load latency assuming bypass. 164*9880d681SAndroid Build Coastguard Worker // This is overriden by OperandCycles if the 165*9880d681SAndroid Build Coastguard Worker // Itineraries are queried instead. 166*9880d681SAndroid Build Coastguard Worker let MispredictPenalty = 13; 167*9880d681SAndroid Build Coastguard Worker 168*9880d681SAndroid Build Coastguard Worker let CompleteModel = 0; 169*9880d681SAndroid Build Coastguard Worker 170*9880d681SAndroid Build Coastguard Worker let Itineraries = PPCA2Itineraries; 171*9880d681SAndroid Build Coastguard Worker} 172*9880d681SAndroid Build Coastguard Worker 173