Home | History | Annotate | Download | only in Mips
      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