1*0b57cec5SDimitry Andric//===-- ARMSchedule.td - ARM Scheduling Definitions --------*- tablegen -*-===// 2*0b57cec5SDimitry Andric// 3*0b57cec5SDimitry Andric// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*0b57cec5SDimitry Andric// See https://llvm.org/LICENSE.txt for license information. 5*0b57cec5SDimitry Andric// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*0b57cec5SDimitry Andric// 7*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 8*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 9*0b57cec5SDimitry Andric// Instruction scheduling annotations for in-order and out-of-order CPUs. 10*0b57cec5SDimitry Andric// These annotations are independent of the itinerary class defined below. 11*0b57cec5SDimitry Andric// Here we define the subtarget independent read/write per-operand resources. 12*0b57cec5SDimitry Andric// The subtarget schedule definitions will then map these to the subtarget's 13*0b57cec5SDimitry Andric// resource usages. 14*0b57cec5SDimitry Andric// For example: 15*0b57cec5SDimitry Andric// The instruction cycle timings table might contain an entry for an operation 16*0b57cec5SDimitry Andric// like the following: 17*0b57cec5SDimitry Andric// Rd <- ADD Rn, Rm, <shift> Rs 18*0b57cec5SDimitry Andric// Uops | Latency from register | Uops - resource requirements - latency 19*0b57cec5SDimitry Andric// 2 | Rn: 1 Rm: 4 Rs: 4 | uop T0, Rm, Rs - P01 - 3 20*0b57cec5SDimitry Andric// | | uopc Rd, Rn, T0 - P01 - 1 21*0b57cec5SDimitry Andric// This is telling us that the result will be available in destination register 22*0b57cec5SDimitry Andric// Rd after a minimum of three cycles after the result in Rm and Rs is available 23*0b57cec5SDimitry Andric// and one cycle after the result in Rn is available. The micro-ops can execute 24*0b57cec5SDimitry Andric// on resource P01. 25*0b57cec5SDimitry Andric// To model this, we need to express that we need to dispatch two micro-ops, 26*0b57cec5SDimitry Andric// that the resource P01 is needed and that the latency to Rn is different than 27*0b57cec5SDimitry Andric// the latency to Rm and Rs. The scheduler can decrease Rn's producer latency by 28*0b57cec5SDimitry Andric// two. 29*0b57cec5SDimitry Andric// We will do this by assigning (abstract) resources to register defs/uses. 30*0b57cec5SDimitry Andric// ARMSchedule.td: 31*0b57cec5SDimitry Andric// def WriteALUsr : SchedWrite; 32*0b57cec5SDimitry Andric// def ReadAdvanceALUsr : ScheRead; 33*0b57cec5SDimitry Andric// 34*0b57cec5SDimitry Andric// ARMInstrInfo.td: 35*0b57cec5SDimitry Andric// def ADDrs : I<>, Sched<[WriteALUsr, ReadAdvanceALUsr, ReadDefault, 36*0b57cec5SDimitry Andric// ReadDefault]> { ...} 37*0b57cec5SDimitry Andric// ReadAdvance read resources allow us to define "pipeline by-passes" or 38*0b57cec5SDimitry Andric// shorter latencies to certain registers as needed in the example above. 39*0b57cec5SDimitry Andric// The "ReadDefault" can be omitted. 40*0b57cec5SDimitry Andric// Next, the subtarget td file assigns resources to the abstract resources 41*0b57cec5SDimitry Andric// defined here. 42*0b57cec5SDimitry Andric// ARMScheduleSubtarget.td: 43*0b57cec5SDimitry Andric// // Resources. 44*0b57cec5SDimitry Andric// def P01 : ProcResource<3>; // ALU unit (3 of it). 45*0b57cec5SDimitry Andric// ... 46*0b57cec5SDimitry Andric// // Resource usages. 47*0b57cec5SDimitry Andric// def : WriteRes<WriteALUsr, [P01, P01]> { 48*0b57cec5SDimitry Andric// Latency = 4; // Latency of 4. 49*0b57cec5SDimitry Andric// NumMicroOps = 2; // Dispatch 2 micro-ops. 50*0b57cec5SDimitry Andric// // The two instances of resource P01 are occupied for one cycle. It is one 51*0b57cec5SDimitry Andric// // cycle because these resources happen to be pipelined. 52*0b57cec5SDimitry Andric// ResourceCycles = [1, 1]; 53*0b57cec5SDimitry Andric// } 54*0b57cec5SDimitry Andric// def : ReadAdvance<ReadAdvanceALUsr, 3>; 55*0b57cec5SDimitry Andric 56*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 57*0b57cec5SDimitry Andric// Sched definitions for integer pipeline instructions 58*0b57cec5SDimitry Andric// 59*0b57cec5SDimitry Andric// Basic ALU operation. 60*0b57cec5SDimitry Andricdef WriteALU : SchedWrite; 61*0b57cec5SDimitry Andricdef ReadALU : SchedRead; 62*0b57cec5SDimitry Andric 63*0b57cec5SDimitry Andric// Basic ALU with shifts. 64*0b57cec5SDimitry Andricdef WriteALUsi : SchedWrite; // Shift by immediate. 65*0b57cec5SDimitry Andricdef WriteALUsr : SchedWrite; // Shift by register. 66*0b57cec5SDimitry Andricdef WriteALUSsr : SchedWrite; // Shift by register (flag setting). 67*0b57cec5SDimitry Andricdef ReadALUsr : SchedRead; // Some operands are read later. 68*0b57cec5SDimitry Andric 69*0b57cec5SDimitry Andric// Compares. 70*0b57cec5SDimitry Andricdef WriteCMP : SchedWrite; 71*0b57cec5SDimitry Andricdef WriteCMPsi : SchedWrite; 72*0b57cec5SDimitry Andricdef WriteCMPsr : SchedWrite; 73*0b57cec5SDimitry Andric 74*0b57cec5SDimitry Andric// Multiplys. 75*0b57cec5SDimitry Andricdef WriteMUL16 : SchedWrite; // 16-bit multiply. 76*0b57cec5SDimitry Andricdef WriteMUL32 : SchedWrite; // 32-bit multiply. 77*0b57cec5SDimitry Andricdef WriteMUL64Lo : SchedWrite; // 64-bit result. Low reg. 78*0b57cec5SDimitry Andricdef WriteMUL64Hi : SchedWrite; // 64-bit result. High reg. 79*0b57cec5SDimitry Andricdef ReadMUL : SchedRead; 80*0b57cec5SDimitry Andric 81*0b57cec5SDimitry Andric// Multiply-accumulates. 82*0b57cec5SDimitry Andricdef WriteMAC16 : SchedWrite; // 16-bit mac. 83*0b57cec5SDimitry Andricdef WriteMAC32 : SchedWrite; // 32-bit mac. 84*0b57cec5SDimitry Andricdef WriteMAC64Lo : SchedWrite; // 64-bit mac. Low reg. 85*0b57cec5SDimitry Andricdef WriteMAC64Hi : SchedWrite; // 64-bit mac. High reg. 86*0b57cec5SDimitry Andricdef ReadMAC : SchedRead; 87*0b57cec5SDimitry Andric 88*0b57cec5SDimitry Andric// Divisions. 89*0b57cec5SDimitry Andricdef WriteDIV : SchedWrite; 90*0b57cec5SDimitry Andric 91*0b57cec5SDimitry Andric// Loads/Stores. 92*0b57cec5SDimitry Andricdef WriteLd : SchedWrite; 93*0b57cec5SDimitry Andricdef WritePreLd : SchedWrite; 94*0b57cec5SDimitry Andricdef WriteST : SchedWrite; 95*0b57cec5SDimitry Andric 96*0b57cec5SDimitry Andric// Branches. 97*0b57cec5SDimitry Andricdef WriteBr : SchedWrite; 98*0b57cec5SDimitry Andricdef WriteBrL : SchedWrite; 99*0b57cec5SDimitry Andricdef WriteBrTbl : SchedWrite; 100*0b57cec5SDimitry Andric 101*0b57cec5SDimitry Andric// Noop. 102*0b57cec5SDimitry Andricdef WriteNoop : SchedWrite; 103*0b57cec5SDimitry Andric 104*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 105*0b57cec5SDimitry Andric// Sched definitions for floating-point and neon instructions 106*0b57cec5SDimitry Andric// 107*0b57cec5SDimitry Andric// Floating point conversions 108*0b57cec5SDimitry Andricdef WriteFPCVT : SchedWrite; 109*0b57cec5SDimitry Andricdef WriteFPMOV : SchedWrite; // FP -> GPR and vice-versa 110*0b57cec5SDimitry Andric 111*0b57cec5SDimitry Andric// ALU operations (32/64-bit) 112*0b57cec5SDimitry Andricdef WriteFPALU32 : SchedWrite; 113*0b57cec5SDimitry Andricdef WriteFPALU64 : SchedWrite; 114*0b57cec5SDimitry Andric 115*0b57cec5SDimitry Andric// Multiplication 116*0b57cec5SDimitry Andricdef WriteFPMUL32 : SchedWrite; 117*0b57cec5SDimitry Andricdef WriteFPMUL64 : SchedWrite; 118*0b57cec5SDimitry Andricdef ReadFPMUL : SchedRead; // multiplier read 119*0b57cec5SDimitry Andricdef ReadFPMAC : SchedRead; // accumulator read 120*0b57cec5SDimitry Andric 121*0b57cec5SDimitry Andric// Multiply-accumulate 122*0b57cec5SDimitry Andricdef WriteFPMAC32 : SchedWrite; 123*0b57cec5SDimitry Andricdef WriteFPMAC64 : SchedWrite; 124*0b57cec5SDimitry Andric 125*0b57cec5SDimitry Andric// Division 126*0b57cec5SDimitry Andricdef WriteFPDIV32 : SchedWrite; 127*0b57cec5SDimitry Andricdef WriteFPDIV64 : SchedWrite; 128*0b57cec5SDimitry Andric 129*0b57cec5SDimitry Andric// Square-root 130*0b57cec5SDimitry Andricdef WriteFPSQRT32 : SchedWrite; 131*0b57cec5SDimitry Andricdef WriteFPSQRT64 : SchedWrite; 132*0b57cec5SDimitry Andric 133*0b57cec5SDimitry Andric// Vector load and stores 134*0b57cec5SDimitry Andricdef WriteVLD1 : SchedWrite; 135*0b57cec5SDimitry Andricdef WriteVLD2 : SchedWrite; 136*0b57cec5SDimitry Andricdef WriteVLD3 : SchedWrite; 137*0b57cec5SDimitry Andricdef WriteVLD4 : SchedWrite; 138*0b57cec5SDimitry Andricdef WriteVST1 : SchedWrite; 139*0b57cec5SDimitry Andricdef WriteVST2 : SchedWrite; 140*0b57cec5SDimitry Andricdef WriteVST3 : SchedWrite; 141*0b57cec5SDimitry Andricdef WriteVST4 : SchedWrite; 142*0b57cec5SDimitry Andric 143*0b57cec5SDimitry Andric 144*0b57cec5SDimitry Andric// Define TII for use in SchedVariant Predicates. 145*0b57cec5SDimitry Andricdef : PredicateProlog<[{ 146*0b57cec5SDimitry Andric const ARMBaseInstrInfo *TII = 147*0b57cec5SDimitry Andric static_cast<const ARMBaseInstrInfo*>(SchedModel->getInstrInfo()); 148*0b57cec5SDimitry Andric (void)TII; 149*0b57cec5SDimitry Andric const ARMSubtarget *STI = 150*0b57cec5SDimitry Andric static_cast<const ARMSubtarget*>(SchedModel->getSubtargetInfo()); 151*0b57cec5SDimitry Andric (void)STI; 152*0b57cec5SDimitry Andric}]>; 153*0b57cec5SDimitry Andric 154*0b57cec5SDimitry Andricdef IsPredicatedPred : SchedPredicate<[{TII->isPredicated(*MI)}]>; 155*0b57cec5SDimitry Andric 156*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 157*0b57cec5SDimitry Andric// Instruction Itinerary classes used for ARM 158*0b57cec5SDimitry Andric// 159*0b57cec5SDimitry Andricdef IIC_iALUx : InstrItinClass; 160*0b57cec5SDimitry Andricdef IIC_iALUi : InstrItinClass; 161*0b57cec5SDimitry Andricdef IIC_iALUr : InstrItinClass; 162*0b57cec5SDimitry Andricdef IIC_iALUsi : InstrItinClass; 163*0b57cec5SDimitry Andricdef IIC_iALUsir : InstrItinClass; 164*0b57cec5SDimitry Andricdef IIC_iALUsr : InstrItinClass; 165*0b57cec5SDimitry Andricdef IIC_iBITi : InstrItinClass; 166*0b57cec5SDimitry Andricdef IIC_iBITr : InstrItinClass; 167*0b57cec5SDimitry Andricdef IIC_iBITsi : InstrItinClass; 168*0b57cec5SDimitry Andricdef IIC_iBITsr : InstrItinClass; 169*0b57cec5SDimitry Andricdef IIC_iUNAr : InstrItinClass; 170*0b57cec5SDimitry Andricdef IIC_iUNAsi : InstrItinClass; 171*0b57cec5SDimitry Andricdef IIC_iEXTr : InstrItinClass; 172*0b57cec5SDimitry Andricdef IIC_iEXTAr : InstrItinClass; 173*0b57cec5SDimitry Andricdef IIC_iEXTAsr : InstrItinClass; 174*0b57cec5SDimitry Andricdef IIC_iCMPi : InstrItinClass; 175*0b57cec5SDimitry Andricdef IIC_iCMPr : InstrItinClass; 176*0b57cec5SDimitry Andricdef IIC_iCMPsi : InstrItinClass; 177*0b57cec5SDimitry Andricdef IIC_iCMPsr : InstrItinClass; 178*0b57cec5SDimitry Andricdef IIC_iTSTi : InstrItinClass; 179*0b57cec5SDimitry Andricdef IIC_iTSTr : InstrItinClass; 180*0b57cec5SDimitry Andricdef IIC_iTSTsi : InstrItinClass; 181*0b57cec5SDimitry Andricdef IIC_iTSTsr : InstrItinClass; 182*0b57cec5SDimitry Andricdef IIC_iMOVi : InstrItinClass; 183*0b57cec5SDimitry Andricdef IIC_iMOVr : InstrItinClass; 184*0b57cec5SDimitry Andricdef IIC_iMOVsi : InstrItinClass; 185*0b57cec5SDimitry Andricdef IIC_iMOVsr : InstrItinClass; 186*0b57cec5SDimitry Andricdef IIC_iMOVix2 : InstrItinClass; 187*0b57cec5SDimitry Andricdef IIC_iMOVix2addpc : InstrItinClass; 188*0b57cec5SDimitry Andricdef IIC_iMOVix2ld : InstrItinClass; 189*0b57cec5SDimitry Andricdef IIC_iMVNi : InstrItinClass; 190*0b57cec5SDimitry Andricdef IIC_iMVNr : InstrItinClass; 191*0b57cec5SDimitry Andricdef IIC_iMVNsi : InstrItinClass; 192*0b57cec5SDimitry Andricdef IIC_iMVNsr : InstrItinClass; 193*0b57cec5SDimitry Andricdef IIC_iCMOVi : InstrItinClass; 194*0b57cec5SDimitry Andricdef IIC_iCMOVr : InstrItinClass; 195*0b57cec5SDimitry Andricdef IIC_iCMOVsi : InstrItinClass; 196*0b57cec5SDimitry Andricdef IIC_iCMOVsr : InstrItinClass; 197*0b57cec5SDimitry Andricdef IIC_iCMOVix2 : InstrItinClass; 198*0b57cec5SDimitry Andricdef IIC_iMUL16 : InstrItinClass; 199*0b57cec5SDimitry Andricdef IIC_iMAC16 : InstrItinClass; 200*0b57cec5SDimitry Andricdef IIC_iMUL32 : InstrItinClass; 201*0b57cec5SDimitry Andricdef IIC_iMAC32 : InstrItinClass; 202*0b57cec5SDimitry Andricdef IIC_iMUL64 : InstrItinClass; 203*0b57cec5SDimitry Andricdef IIC_iMAC64 : InstrItinClass; 204*0b57cec5SDimitry Andricdef IIC_iDIV : InstrItinClass; 205*0b57cec5SDimitry Andricdef IIC_iLoad_i : InstrItinClass; 206*0b57cec5SDimitry Andricdef IIC_iLoad_r : InstrItinClass; 207*0b57cec5SDimitry Andricdef IIC_iLoad_si : InstrItinClass; 208*0b57cec5SDimitry Andricdef IIC_iLoad_iu : InstrItinClass; 209*0b57cec5SDimitry Andricdef IIC_iLoad_ru : InstrItinClass; 210*0b57cec5SDimitry Andricdef IIC_iLoad_siu : InstrItinClass; 211*0b57cec5SDimitry Andricdef IIC_iLoad_bh_i : InstrItinClass; 212*0b57cec5SDimitry Andricdef IIC_iLoad_bh_r : InstrItinClass; 213*0b57cec5SDimitry Andricdef IIC_iLoad_bh_si : InstrItinClass; 214*0b57cec5SDimitry Andricdef IIC_iLoad_bh_iu : InstrItinClass; 215*0b57cec5SDimitry Andricdef IIC_iLoad_bh_ru : InstrItinClass; 216*0b57cec5SDimitry Andricdef IIC_iLoad_bh_siu : InstrItinClass; 217*0b57cec5SDimitry Andricdef IIC_iLoad_d_i : InstrItinClass; 218*0b57cec5SDimitry Andricdef IIC_iLoad_d_r : InstrItinClass; 219*0b57cec5SDimitry Andricdef IIC_iLoad_d_ru : InstrItinClass; 220*0b57cec5SDimitry Andricdef IIC_iLoad_m : InstrItinClass; 221*0b57cec5SDimitry Andricdef IIC_iLoad_mu : InstrItinClass; 222*0b57cec5SDimitry Andricdef IIC_iLoad_mBr : InstrItinClass; 223*0b57cec5SDimitry Andricdef IIC_iPop : InstrItinClass; 224*0b57cec5SDimitry Andricdef IIC_iPop_Br : InstrItinClass; 225*0b57cec5SDimitry Andricdef IIC_iLoadiALU : InstrItinClass; 226*0b57cec5SDimitry Andricdef IIC_iStore_i : InstrItinClass; 227*0b57cec5SDimitry Andricdef IIC_iStore_r : InstrItinClass; 228*0b57cec5SDimitry Andricdef IIC_iStore_si : InstrItinClass; 229*0b57cec5SDimitry Andricdef IIC_iStore_iu : InstrItinClass; 230*0b57cec5SDimitry Andricdef IIC_iStore_ru : InstrItinClass; 231*0b57cec5SDimitry Andricdef IIC_iStore_siu : InstrItinClass; 232*0b57cec5SDimitry Andricdef IIC_iStore_bh_i : InstrItinClass; 233*0b57cec5SDimitry Andricdef IIC_iStore_bh_r : InstrItinClass; 234*0b57cec5SDimitry Andricdef IIC_iStore_bh_si : InstrItinClass; 235*0b57cec5SDimitry Andricdef IIC_iStore_bh_iu : InstrItinClass; 236*0b57cec5SDimitry Andricdef IIC_iStore_bh_ru : InstrItinClass; 237*0b57cec5SDimitry Andricdef IIC_iStore_bh_siu : InstrItinClass; 238*0b57cec5SDimitry Andricdef IIC_iStore_d_i : InstrItinClass; 239*0b57cec5SDimitry Andricdef IIC_iStore_d_r : InstrItinClass; 240*0b57cec5SDimitry Andricdef IIC_iStore_d_ru : InstrItinClass; 241*0b57cec5SDimitry Andricdef IIC_iStore_m : InstrItinClass; 242*0b57cec5SDimitry Andricdef IIC_iStore_mu : InstrItinClass; 243*0b57cec5SDimitry Andricdef IIC_Preload : InstrItinClass; 244*0b57cec5SDimitry Andricdef IIC_Br : InstrItinClass; 245*0b57cec5SDimitry Andricdef IIC_fpSTAT : InstrItinClass; 246*0b57cec5SDimitry Andricdef IIC_fpUNA16 : InstrItinClass; 247*0b57cec5SDimitry Andricdef IIC_fpUNA32 : InstrItinClass; 248*0b57cec5SDimitry Andricdef IIC_fpUNA64 : InstrItinClass; 249*0b57cec5SDimitry Andricdef IIC_fpCMP16 : InstrItinClass; 250*0b57cec5SDimitry Andricdef IIC_fpCMP32 : InstrItinClass; 251*0b57cec5SDimitry Andricdef IIC_fpCMP64 : InstrItinClass; 252*0b57cec5SDimitry Andricdef IIC_fpCVTSD : InstrItinClass; 253*0b57cec5SDimitry Andricdef IIC_fpCVTDS : InstrItinClass; 254*0b57cec5SDimitry Andricdef IIC_fpCVTSH : InstrItinClass; 255*0b57cec5SDimitry Andricdef IIC_fpCVTHS : InstrItinClass; 256*0b57cec5SDimitry Andricdef IIC_fpCVTIH : InstrItinClass; 257*0b57cec5SDimitry Andricdef IIC_fpCVTIS : InstrItinClass; 258*0b57cec5SDimitry Andricdef IIC_fpCVTID : InstrItinClass; 259*0b57cec5SDimitry Andricdef IIC_fpCVTHI : InstrItinClass; 260*0b57cec5SDimitry Andricdef IIC_fpCVTSI : InstrItinClass; 261*0b57cec5SDimitry Andricdef IIC_fpCVTDI : InstrItinClass; 262*0b57cec5SDimitry Andricdef IIC_fpMOVIS : InstrItinClass; 263*0b57cec5SDimitry Andricdef IIC_fpMOVID : InstrItinClass; 264*0b57cec5SDimitry Andricdef IIC_fpMOVSI : InstrItinClass; 265*0b57cec5SDimitry Andricdef IIC_fpMOVDI : InstrItinClass; 266*0b57cec5SDimitry Andricdef IIC_fpALU16 : InstrItinClass; 267*0b57cec5SDimitry Andricdef IIC_fpALU32 : InstrItinClass; 268*0b57cec5SDimitry Andricdef IIC_fpALU64 : InstrItinClass; 269*0b57cec5SDimitry Andricdef IIC_fpMUL16 : InstrItinClass; 270*0b57cec5SDimitry Andricdef IIC_fpMUL32 : InstrItinClass; 271*0b57cec5SDimitry Andricdef IIC_fpMUL64 : InstrItinClass; 272*0b57cec5SDimitry Andricdef IIC_fpMAC16 : InstrItinClass; 273*0b57cec5SDimitry Andricdef IIC_fpMAC32 : InstrItinClass; 274*0b57cec5SDimitry Andricdef IIC_fpMAC64 : InstrItinClass; 275*0b57cec5SDimitry Andricdef IIC_fpFMAC16 : InstrItinClass; 276*0b57cec5SDimitry Andricdef IIC_fpFMAC32 : InstrItinClass; 277*0b57cec5SDimitry Andricdef IIC_fpFMAC64 : InstrItinClass; 278*0b57cec5SDimitry Andricdef IIC_fpDIV16 : InstrItinClass; 279*0b57cec5SDimitry Andricdef IIC_fpDIV32 : InstrItinClass; 280*0b57cec5SDimitry Andricdef IIC_fpDIV64 : InstrItinClass; 281*0b57cec5SDimitry Andricdef IIC_fpSQRT16 : InstrItinClass; 282*0b57cec5SDimitry Andricdef IIC_fpSQRT32 : InstrItinClass; 283*0b57cec5SDimitry Andricdef IIC_fpSQRT64 : InstrItinClass; 284*0b57cec5SDimitry Andricdef IIC_fpLoad16 : InstrItinClass; 285*0b57cec5SDimitry Andricdef IIC_fpLoad32 : InstrItinClass; 286*0b57cec5SDimitry Andricdef IIC_fpLoad64 : InstrItinClass; 287*0b57cec5SDimitry Andricdef IIC_fpLoad_m : InstrItinClass; 288*0b57cec5SDimitry Andricdef IIC_fpLoad_mu : InstrItinClass; 289*0b57cec5SDimitry Andricdef IIC_fpStore16 : InstrItinClass; 290*0b57cec5SDimitry Andricdef IIC_fpStore32 : InstrItinClass; 291*0b57cec5SDimitry Andricdef IIC_fpStore64 : InstrItinClass; 292*0b57cec5SDimitry Andricdef IIC_fpStore_m : InstrItinClass; 293*0b57cec5SDimitry Andricdef IIC_fpStore_mu : InstrItinClass; 294*0b57cec5SDimitry Andricdef IIC_VLD1 : InstrItinClass; 295*0b57cec5SDimitry Andricdef IIC_VLD1x2 : InstrItinClass; 296*0b57cec5SDimitry Andricdef IIC_VLD1x3 : InstrItinClass; 297*0b57cec5SDimitry Andricdef IIC_VLD1x4 : InstrItinClass; 298*0b57cec5SDimitry Andricdef IIC_VLD1u : InstrItinClass; 299*0b57cec5SDimitry Andricdef IIC_VLD1x2u : InstrItinClass; 300*0b57cec5SDimitry Andricdef IIC_VLD1x3u : InstrItinClass; 301*0b57cec5SDimitry Andricdef IIC_VLD1x4u : InstrItinClass; 302*0b57cec5SDimitry Andricdef IIC_VLD1ln : InstrItinClass; 303*0b57cec5SDimitry Andricdef IIC_VLD1lnu : InstrItinClass; 304*0b57cec5SDimitry Andricdef IIC_VLD1dup : InstrItinClass; 305*0b57cec5SDimitry Andricdef IIC_VLD1dupu : InstrItinClass; 306*0b57cec5SDimitry Andricdef IIC_VLD2 : InstrItinClass; 307*0b57cec5SDimitry Andricdef IIC_VLD2x2 : InstrItinClass; 308*0b57cec5SDimitry Andricdef IIC_VLD2u : InstrItinClass; 309*0b57cec5SDimitry Andricdef IIC_VLD2x2u : InstrItinClass; 310*0b57cec5SDimitry Andricdef IIC_VLD2ln : InstrItinClass; 311*0b57cec5SDimitry Andricdef IIC_VLD2lnu : InstrItinClass; 312*0b57cec5SDimitry Andricdef IIC_VLD2dup : InstrItinClass; 313*0b57cec5SDimitry Andricdef IIC_VLD2dupu : InstrItinClass; 314*0b57cec5SDimitry Andricdef IIC_VLD3 : InstrItinClass; 315*0b57cec5SDimitry Andricdef IIC_VLD3ln : InstrItinClass; 316*0b57cec5SDimitry Andricdef IIC_VLD3u : InstrItinClass; 317*0b57cec5SDimitry Andricdef IIC_VLD3lnu : InstrItinClass; 318*0b57cec5SDimitry Andricdef IIC_VLD3dup : InstrItinClass; 319*0b57cec5SDimitry Andricdef IIC_VLD3dupu : InstrItinClass; 320*0b57cec5SDimitry Andricdef IIC_VLD4 : InstrItinClass; 321*0b57cec5SDimitry Andricdef IIC_VLD4ln : InstrItinClass; 322*0b57cec5SDimitry Andricdef IIC_VLD4u : InstrItinClass; 323*0b57cec5SDimitry Andricdef IIC_VLD4lnu : InstrItinClass; 324*0b57cec5SDimitry Andricdef IIC_VLD4dup : InstrItinClass; 325*0b57cec5SDimitry Andricdef IIC_VLD4dupu : InstrItinClass; 326*0b57cec5SDimitry Andricdef IIC_VST1 : InstrItinClass; 327*0b57cec5SDimitry Andricdef IIC_VST1x2 : InstrItinClass; 328*0b57cec5SDimitry Andricdef IIC_VST1x3 : InstrItinClass; 329*0b57cec5SDimitry Andricdef IIC_VST1x4 : InstrItinClass; 330*0b57cec5SDimitry Andricdef IIC_VST1u : InstrItinClass; 331*0b57cec5SDimitry Andricdef IIC_VST1x2u : InstrItinClass; 332*0b57cec5SDimitry Andricdef IIC_VST1x3u : InstrItinClass; 333*0b57cec5SDimitry Andricdef IIC_VST1x4u : InstrItinClass; 334*0b57cec5SDimitry Andricdef IIC_VST1ln : InstrItinClass; 335*0b57cec5SDimitry Andricdef IIC_VST1lnu : InstrItinClass; 336*0b57cec5SDimitry Andricdef IIC_VST2 : InstrItinClass; 337*0b57cec5SDimitry Andricdef IIC_VST2x2 : InstrItinClass; 338*0b57cec5SDimitry Andricdef IIC_VST2u : InstrItinClass; 339*0b57cec5SDimitry Andricdef IIC_VST2x2u : InstrItinClass; 340*0b57cec5SDimitry Andricdef IIC_VST2ln : InstrItinClass; 341*0b57cec5SDimitry Andricdef IIC_VST2lnu : InstrItinClass; 342*0b57cec5SDimitry Andricdef IIC_VST3 : InstrItinClass; 343*0b57cec5SDimitry Andricdef IIC_VST3u : InstrItinClass; 344*0b57cec5SDimitry Andricdef IIC_VST3ln : InstrItinClass; 345*0b57cec5SDimitry Andricdef IIC_VST3lnu : InstrItinClass; 346*0b57cec5SDimitry Andricdef IIC_VST4 : InstrItinClass; 347*0b57cec5SDimitry Andricdef IIC_VST4u : InstrItinClass; 348*0b57cec5SDimitry Andricdef IIC_VST4ln : InstrItinClass; 349*0b57cec5SDimitry Andricdef IIC_VST4lnu : InstrItinClass; 350*0b57cec5SDimitry Andricdef IIC_VUNAD : InstrItinClass; 351*0b57cec5SDimitry Andricdef IIC_VUNAQ : InstrItinClass; 352*0b57cec5SDimitry Andricdef IIC_VBIND : InstrItinClass; 353*0b57cec5SDimitry Andricdef IIC_VBINQ : InstrItinClass; 354*0b57cec5SDimitry Andricdef IIC_VPBIND : InstrItinClass; 355*0b57cec5SDimitry Andricdef IIC_VFMULD : InstrItinClass; 356*0b57cec5SDimitry Andricdef IIC_VFMULQ : InstrItinClass; 357*0b57cec5SDimitry Andricdef IIC_VMOV : InstrItinClass; 358*0b57cec5SDimitry Andricdef IIC_VMOVImm : InstrItinClass; 359*0b57cec5SDimitry Andricdef IIC_VMOVD : InstrItinClass; 360*0b57cec5SDimitry Andricdef IIC_VMOVQ : InstrItinClass; 361*0b57cec5SDimitry Andricdef IIC_VMOVIS : InstrItinClass; 362*0b57cec5SDimitry Andricdef IIC_VMOVID : InstrItinClass; 363*0b57cec5SDimitry Andricdef IIC_VMOVISL : InstrItinClass; 364*0b57cec5SDimitry Andricdef IIC_VMOVSI : InstrItinClass; 365*0b57cec5SDimitry Andricdef IIC_VMOVDI : InstrItinClass; 366*0b57cec5SDimitry Andricdef IIC_VMOVN : InstrItinClass; 367*0b57cec5SDimitry Andricdef IIC_VPERMD : InstrItinClass; 368*0b57cec5SDimitry Andricdef IIC_VPERMQ : InstrItinClass; 369*0b57cec5SDimitry Andricdef IIC_VPERMQ3 : InstrItinClass; 370*0b57cec5SDimitry Andricdef IIC_VMACD : InstrItinClass; 371*0b57cec5SDimitry Andricdef IIC_VMACQ : InstrItinClass; 372*0b57cec5SDimitry Andricdef IIC_VFMACD : InstrItinClass; 373*0b57cec5SDimitry Andricdef IIC_VFMACQ : InstrItinClass; 374*0b57cec5SDimitry Andricdef IIC_VRECSD : InstrItinClass; 375*0b57cec5SDimitry Andricdef IIC_VRECSQ : InstrItinClass; 376*0b57cec5SDimitry Andricdef IIC_VCNTiD : InstrItinClass; 377*0b57cec5SDimitry Andricdef IIC_VCNTiQ : InstrItinClass; 378*0b57cec5SDimitry Andricdef IIC_VUNAiD : InstrItinClass; 379*0b57cec5SDimitry Andricdef IIC_VUNAiQ : InstrItinClass; 380*0b57cec5SDimitry Andricdef IIC_VQUNAiD : InstrItinClass; 381*0b57cec5SDimitry Andricdef IIC_VQUNAiQ : InstrItinClass; 382*0b57cec5SDimitry Andricdef IIC_VBINiD : InstrItinClass; 383*0b57cec5SDimitry Andricdef IIC_VBINiQ : InstrItinClass; 384*0b57cec5SDimitry Andricdef IIC_VSUBiD : InstrItinClass; 385*0b57cec5SDimitry Andricdef IIC_VSUBiQ : InstrItinClass; 386*0b57cec5SDimitry Andricdef IIC_VBINi4D : InstrItinClass; 387*0b57cec5SDimitry Andricdef IIC_VBINi4Q : InstrItinClass; 388*0b57cec5SDimitry Andricdef IIC_VSUBi4D : InstrItinClass; 389*0b57cec5SDimitry Andricdef IIC_VSUBi4Q : InstrItinClass; 390*0b57cec5SDimitry Andricdef IIC_VABAD : InstrItinClass; 391*0b57cec5SDimitry Andricdef IIC_VABAQ : InstrItinClass; 392*0b57cec5SDimitry Andricdef IIC_VSHLiD : InstrItinClass; 393*0b57cec5SDimitry Andricdef IIC_VSHLiQ : InstrItinClass; 394*0b57cec5SDimitry Andricdef IIC_VSHLi4D : InstrItinClass; 395*0b57cec5SDimitry Andricdef IIC_VSHLi4Q : InstrItinClass; 396*0b57cec5SDimitry Andricdef IIC_VPALiD : InstrItinClass; 397*0b57cec5SDimitry Andricdef IIC_VPALiQ : InstrItinClass; 398*0b57cec5SDimitry Andricdef IIC_VMULi16D : InstrItinClass; 399*0b57cec5SDimitry Andricdef IIC_VMULi32D : InstrItinClass; 400*0b57cec5SDimitry Andricdef IIC_VMULi16Q : InstrItinClass; 401*0b57cec5SDimitry Andricdef IIC_VMULi32Q : InstrItinClass; 402*0b57cec5SDimitry Andricdef IIC_VMACi16D : InstrItinClass; 403*0b57cec5SDimitry Andricdef IIC_VMACi32D : InstrItinClass; 404*0b57cec5SDimitry Andricdef IIC_VMACi16Q : InstrItinClass; 405*0b57cec5SDimitry Andricdef IIC_VMACi32Q : InstrItinClass; 406*0b57cec5SDimitry Andricdef IIC_VEXTD : InstrItinClass; 407*0b57cec5SDimitry Andricdef IIC_VEXTQ : InstrItinClass; 408*0b57cec5SDimitry Andricdef IIC_VTB1 : InstrItinClass; 409*0b57cec5SDimitry Andricdef IIC_VTB2 : InstrItinClass; 410*0b57cec5SDimitry Andricdef IIC_VTB3 : InstrItinClass; 411*0b57cec5SDimitry Andricdef IIC_VTB4 : InstrItinClass; 412*0b57cec5SDimitry Andricdef IIC_VTBX1 : InstrItinClass; 413*0b57cec5SDimitry Andricdef IIC_VTBX2 : InstrItinClass; 414*0b57cec5SDimitry Andricdef IIC_VTBX3 : InstrItinClass; 415*0b57cec5SDimitry Andricdef IIC_VTBX4 : InstrItinClass; 416*0b57cec5SDimitry Andricdef IIC_VDOTPROD : InstrItinClass; 417*0b57cec5SDimitry Andric 418*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 419*0b57cec5SDimitry Andric// Processor instruction itineraries. 420*0b57cec5SDimitry Andric 421*0b57cec5SDimitry Andricinclude "ARMScheduleV6.td" 422*0b57cec5SDimitry Andricinclude "ARMScheduleA8.td" 423*0b57cec5SDimitry Andricinclude "ARMScheduleA9.td" 424*0b57cec5SDimitry Andricinclude "ARMScheduleSwift.td" 425*0b57cec5SDimitry Andricinclude "ARMScheduleR52.td" 426*0b57cec5SDimitry Andricinclude "ARMScheduleA57.td" 427*0b57cec5SDimitry Andricinclude "ARMScheduleM4.td" 428