1 //===-- MipsSchedule.td - Mips Scheduling Definitions ------*- tablegen -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 //===----------------------------------------------------------------------===//
11 // Functional units across Mips chips sets. Based on GCC/Mips backend files.
12 //===----------------------------------------------------------------------===//
14 def IMULDIV : FuncUnit;
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;
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]>]>