//===- X86ScheduleSLM.td - X86 Atom Scheduling Definitions -*- tablegen -*-==// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // This file defines the itinerary class data for the Intel Atom // (Silvermont) processor. // //===----------------------------------------------------------------------===// def IEC_RSV0 : FuncUnit; def IEC_RSV1 : FuncUnit; def FPC_RSV0 : FuncUnit; def FPC_RSV1 : FuncUnit; def MEC_RSV : FuncUnit; def SLMItineraries : ProcessorItineraries< [ IEC_RSV0, IEC_RSV1, FPC_RSV0, FPC_RSV1, MEC_RSV ], [], [ // [InstrStage] // [InstrStage, InstrStage] // [InstrStage] // [InstrStage,InstrStage] // // Default is 1 cycle, IEC_RSV0 or IEC_RSV1 //InstrItinData] >, InstrItinData, InstrStage<1, [MEC_RSV]>] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, // mul InstrItinData] >, InstrItinData, InstrStage<4, [MEC_RSV]>] >, InstrItinData] >, InstrItinData, InstrStage<3, [MEC_RSV]>] >, InstrItinData] >, InstrItinData] >, // imul by al, ax, eax, rax InstrItinData] >, InstrItinData, InstrStage<6, [MEC_RSV]>] >, InstrItinData] >, InstrItinData, InstrStage<6, [MEC_RSV]>] >, InstrItinData] >, InstrItinData] >, // imul reg by reg|mem InstrItinData, InstrStage<4, [MEC_RSV]>] >, InstrItinData] >, InstrItinData, InstrStage<3, [MEC_RSV]>] >, InstrItinData] >, InstrItinData, InstrStage<4, [MEC_RSV]>] >, InstrItinData] >, // imul reg = reg/mem * imm InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData, InstrStage<4, [MEC_RSV]>] >, InstrItinData, InstrStage<3, [MEC_RSV]>] >, InstrItinData, InstrStage<4, [MEC_RSV]>] >, // idiv - min latency InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, // div - min latency InstrItinData] >, InstrItinData, InstrStage<25, [MEC_RSV]>] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, // neg/not/inc/dec InstrItinData] >, InstrItinData, InstrStage<1, [MEC_RSV]>] >, // add/sub/and/or/xor/adc/sbc/cmp/test InstrItinData] >, InstrItinData, InstrStage<1, [MEC_RSV]>] >, // adc/sbb InstrItinData] >, InstrItinData, InstrStage<2, [MEC_RSV]>] >, // shift/rotate InstrItinData, InstrStage<1, [MEC_RSV]>] >, // shift double InstrItinData] >, InstrItinData] >, InstrItinData, InstrStage<2, [MEC_RSV]>] >, InstrItinData, InstrStage<4, [MEC_RSV]>] >, InstrItinData] >, InstrItinData] >, InstrItinData, InstrStage<2, [MEC_RSV]>] >, InstrItinData, InstrStage<4, [MEC_RSV]>] >, InstrItinData] >, InstrItinData] >, InstrItinData, InstrStage<2, [MEC_RSV]>] >, InstrItinData, InstrStage<4, [MEC_RSV]>] >, // cmov InstrItinData, InstrStage<2, [MEC_RSV]>] >, InstrItinData] >, InstrItinData, InstrStage<2, [MEC_RSV]>] >, InstrItinData] >, InstrItinData, InstrStage<2, [MEC_RSV]>] >, InstrItinData] >, // set InstrItinData, InstrStage<1, [MEC_RSV]>] >, InstrItinData] >, // jcc InstrItinData] >, // jcxz/jecxz/jrcxz InstrItinData] >, // jmp rel InstrItinData] >, // jmp indirect InstrItinData] >, InstrItinData, InstrStage<1, [MEC_RSV]>] >, // jmp far InstrItinData, InstrStage<1, [MEC_RSV]>] >, InstrItinData] >, // loop/loope/loopne InstrItinData] >, InstrItinData] >, InstrItinData] >, // call - all but reg/imm InstrItinData] >, InstrItinData, InstrStage<1, [MEC_RSV]>] >, InstrItinData, InstrStage<1, [MEC_RSV]>] >, InstrItinData] >, //ret InstrItinData] >, InstrItinData] >, //sign extension movs InstrItinData] >, InstrItinData] >, InstrItinData, InstrStage<1, [MEC_RSV]>] >, InstrItinData] >, InstrItinData] >, //zero extension movs InstrItinData] >, InstrItinData] >, InstrItinData, InstrStage<1, [MEC_RSV]>] >, InstrItinData] >, InstrItinData] >, // SSE binary operations // arithmetic fp scalar InstrItinData] >, InstrItinData, InstrStage<3, [MEC_RSV]>] >, InstrItinData] >, InstrItinData, InstrStage<3, [MEC_RSV]>] >, InstrItinData] >, InstrItinData, InstrStage<1, [MEC_RSV]>] >, InstrItinData] >, InstrItinData, InstrStage<2, [MEC_RSV]>] >, InstrItinData] >, InstrItinData, InstrStage<13, [MEC_RSV]>] >, InstrItinData] >, InstrItinData, InstrStage<13, [MEC_RSV]>] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData, InstrStage<6, [MEC_RSV]>] >, // arithmetic fp parallel InstrItinData] >, InstrItinData, InstrStage<3, [MEC_RSV]>] >, InstrItinData] >, InstrItinData, InstrStage<4, [MEC_RSV]>] >, InstrItinData] >, InstrItinData, InstrStage<2, [MEC_RSV]>] >, InstrItinData] >, InstrItinData, InstrStage<4, [MEC_RSV]>] >, InstrItinData] >, InstrItinData, InstrStage<27, [MEC_RSV]>] >, InstrItinData] >, InstrItinData, InstrStage<27, [MEC_RSV]>] >, // bitwise parallel InstrItinData] >, InstrItinData, InstrStage<1, [MEC_RSV]>] >, // arithmetic int parallel InstrItinData] >, InstrItinData, InstrStage<1, [MEC_RSV]>] >, InstrItinData] >, InstrItinData, InstrStage<4, [MEC_RSV]>] >, // multiply int parallel InstrItinData] >, InstrItinData, InstrStage<5, [MEC_RSV]>] >, // shift parallel InstrItinData] >, InstrItinData, InstrStage<2, [MEC_RSV]>] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData, InstrStage<1, [MEC_RSV]>] >, InstrItinData] >, InstrItinData] >, InstrItinData, InstrStage<26, [MEC_RSV]>] >, InstrItinData] >, InstrItinData, InstrStage<13, [MEC_RSV]>] >, InstrItinData] >, InstrItinData, InstrStage<26, [MEC_RSV]>] >, InstrItinData] >, InstrItinData, InstrStage<13, [MEC_RSV]>] >, InstrItinData] >, InstrItinData, InstrStage<9, [MEC_RSV]>] >, InstrItinData] >, InstrItinData, InstrStage<4, [MEC_RSV]>] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData, InstrStage<1, [MEC_RSV]>] >, InstrItinData] >, InstrItinData, InstrStage<1, [MEC_RSV]>] >, InstrItinData, InstrStage<1, [MEC_RSV]>] >, InstrItinData] >, InstrItinData, InstrStage<1, [MEC_RSV]>] >, InstrItinData, InstrStage<1, [MEC_RSV]>] >, InstrItinData] >, InstrItinData, InstrStage<1, [MEC_RSV]>] >, InstrItinData, InstrStage<1, [MEC_RSV]>] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData, InstrStage<1, [FPC_RSV0, FPC_RSV1]>] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData, InstrStage<6, [MEC_RSV]>] >, InstrItinData] >, InstrItinData, InstrStage<9, [MEC_RSV]>] >, InstrItinData, InstrStage<9, [MEC_RSV]>] >, InstrItinData, InstrStage<9, [MEC_RSV]>] >, InstrItinData] >, InstrItinData, InstrStage<5, [MEC_RSV]>] >, InstrItinData] >, InstrItinData, InstrStage<1, [MEC_RSV]>] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData, InstrStage<1, [MEC_RSV]>] >, InstrItinData] >, InstrItinData] >, // conversions // to/from PD ... InstrItinData] >, InstrItinData, InstrStage<5, [MEC_RSV]>] >, // to/from PS except to/from PD and PS2PI InstrItinData] >, InstrItinData, InstrStage<4, [MEC_RSV]>] >, InstrItinData] >, InstrItinData, InstrStage<1, [MEC_RSV]>] >, InstrItinData] >, InstrItinData, InstrStage<4, [MEC_RSV]>] >, InstrItinData] >, InstrItinData, InstrStage<4, [MEC_RSV]>] >, InstrItinData] >, InstrItinData, InstrStage<4, [MEC_RSV]>] >, // MMX MOVs InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, // other MMX InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, // conversions // from/to PD InstrItinData] >, InstrItinData] >, // from/to PI InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, // System instructions InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, // worst case for mov REG_CRx InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, // LAR InstrItinData] >, InstrItinData] >, // LSL InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, // push control register, segment registers InstrItinData] >, InstrItinData] >, // pop control register, segment registers InstrItinData] >, InstrItinData] >, // VERR, VERW InstrItinData] >, InstrItinData] >, InstrItinData] >, // WRMSR, RDMSR InstrItinData] >, InstrItinData] >, InstrItinData] >, // SMSW, LMSW InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData, InstrStage<10, [MEC_RSV]>] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData, InstrStage<1, [MEC_RSV]>] >, InstrItinData] >, InstrItinData, InstrStage<1, [MEC_RSV]>] >, InstrItinData, InstrStage<1, [MEC_RSV]>] >, InstrItinData] >, InstrItinData] >, InstrItinData, InstrStage<1, [MEC_RSV]>] >, InstrItinData, InstrStage<1, [MEC_RSV]>] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData, InstrStage<5, [MEC_RSV]>] >, InstrItinData] >, InstrItinData, InstrStage<5, [MEC_RSV]>] >, InstrItinData] >, InstrItinData] >, InstrItinData, InstrStage<6, [MEC_RSV]>] >, InstrItinData, InstrStage<6, [MEC_RSV]>] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData, InstrStage<1, [MEC_RSV]>] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData, InstrStage<4, [MEC_RSV]>] >, InstrItinData, InstrStage<10, [MEC_RSV]>] >, InstrItinData] >, InstrItinData] >, InstrItinData] >, InstrItinData, InstrStage<3, [MEC_RSV]>] >, InstrItinData] >, InstrItinData, InstrStage<12, [MEC_RSV]>] >, InstrItinData] >, InstrItinData, InstrStage<15, [MEC_RSV]>] >, InstrItinData] >, InstrItinData] >, InstrItinData, InstrStage<4, [MEC_RSV]>] >, InstrItinData] >, InstrItinData, InstrStage<1, [MEC_RSV]>] >, InstrItinData] >, InstrItinData, InstrStage<1, [MEC_RSV]>] >, InstrItinData] >, InstrItinData, InstrStage<11, [MEC_RSV]>] >, InstrItinData] >, InstrItinData, InstrStage<5, [MEC_RSV]>] >, InstrItinData] >, InstrItinData, InstrStage<4, [MEC_RSV]>] >, InstrItinData] >, InstrItinData, InstrStage<4, [MEC_RSV]>] >, InstrItinData] >, InstrItinData, InstrStage<10, [MEC_RSV]>] >, InstrItinData] > ]>; // Silvermont machine model. def SLMModel : SchedMachineModel { let IssueWidth = 2; // Allows 2 instructions per scheduling group. let MinLatency = 1; // InstrStage cycles overrides MinLatency. // OperandCycles may be used for expected latency. let LoadLatency = 3; // Expected cycles, may be overriden by OperandCycles. let HighLatency = 30;// Expected, may be overriden by OperandCycles. let Itineraries = SLMItineraries; }