1 //===-- MipsSchedule.td - Mips 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 Mips chips sets. Based on GCC/Mips backend files. 12 //===----------------------------------------------------------------------===// 13 def ALU : FuncUnit; 14 def IMULDIV : FuncUnit; 15 16 //===----------------------------------------------------------------------===// 17 // Instruction Itinerary classes used for Mips 18 //===----------------------------------------------------------------------===// 19 def IIAlu : InstrItinClass; 20 def IIArith : InstrItinClass; 21 def IILogic : InstrItinClass; 22 def IILoad : InstrItinClass; 23 def IIStore : InstrItinClass; 24 def IIXfer : InstrItinClass; 25 def IIBranch : InstrItinClass; 26 def IIHiLo : InstrItinClass; 27 def IIImul : InstrItinClass; 28 def IIImult : InstrItinClass; 29 def IIIdiv : InstrItinClass; 30 def IIseb : InstrItinClass; 31 def IIslt : InstrItinClass; 32 def IIFcvt : InstrItinClass; 33 def IIFmove : InstrItinClass; 34 def IIFcmp : InstrItinClass; 35 def IIFadd : InstrItinClass; 36 def IIFmulSingle : InstrItinClass; 37 def IIFmulDouble : InstrItinClass; 38 def IIFdivSingle : InstrItinClass; 39 def IIFdivDouble : InstrItinClass; 40 def IIFsqrtSingle : InstrItinClass; 41 def IIFsqrtDouble : InstrItinClass; 42 def IIFrecipFsqrtStep : InstrItinClass; 43 def IIFLoad : InstrItinClass; 44 def IIFStore : InstrItinClass; 45 def IIFmoveC1 : InstrItinClass; 46 def IIPseudo : InstrItinClass; 47 48 //===----------------------------------------------------------------------===// 49 // Mips Generic instruction itineraries. 50 //===----------------------------------------------------------------------===// 51 def MipsGenericItineraries : ProcessorItineraries<[ALU, IMULDIV], [], [ 52 InstrItinData<IIAlu , [InstrStage<1, [ALU]>]>, 53 InstrItinData<IIArith , [InstrStage<1, [ALU]>]>, 54 InstrItinData<IILogic , [InstrStage<1, [ALU]>]>, 55 InstrItinData<IILoad , [InstrStage<3, [ALU]>]>, 56 InstrItinData<IIStore , [InstrStage<1, [ALU]>]>, 57 InstrItinData<IIXfer , [InstrStage<2, [ALU]>]>, 58 InstrItinData<IIBranch , [InstrStage<1, [ALU]>]>, 59 InstrItinData<IIHiLo , [InstrStage<1, [IMULDIV]>]>, 60 InstrItinData<IIImul , [InstrStage<17, [IMULDIV]>]>, 61 InstrItinData<IIIdiv , [InstrStage<38, [IMULDIV]>]>, 62 InstrItinData<IIFcvt , [InstrStage<1, [ALU]>]>, 63 InstrItinData<IIFmove , [InstrStage<2, [ALU]>]>, 64 InstrItinData<IIFcmp , [InstrStage<3, [ALU]>]>, 65 InstrItinData<IIFadd , [InstrStage<4, [ALU]>]>, 66 InstrItinData<IIFmulSingle , [InstrStage<7, [ALU]>]>, 67 InstrItinData<IIFmulDouble , [InstrStage<8, [ALU]>]>, 68 InstrItinData<IIFdivSingle , [InstrStage<23, [ALU]>]>, 69 InstrItinData<IIFdivDouble , [InstrStage<36, [ALU]>]>, 70 InstrItinData<IIFsqrtSingle , [InstrStage<54, [ALU]>]>, 71 InstrItinData<IIFsqrtDouble , [InstrStage<12, [ALU]>]>, 72 InstrItinData<IIFrecipFsqrtStep , [InstrStage<5, [ALU]>]>, 73 InstrItinData<IIFLoad , [InstrStage<3, [ALU]>]>, 74 InstrItinData<IIFStore , [InstrStage<1, [ALU]>]>, 75 InstrItinData<IIFmoveC1 , [InstrStage<2, [ALU]>]> 76 ]>; 77