xref: /aosp_15_r20/external/llvm/lib/Target/PowerPC/PPCScheduleE500mc.td (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker//===-- PPCScheduleE500mc.td - e500mc Scheduling Defs ------*- tablegen -*-===//
2*9880d681SAndroid Build Coastguard Worker//
3*9880d681SAndroid Build Coastguard Worker//                     The LLVM Compiler Infrastructure
4*9880d681SAndroid Build Coastguard Worker//
5*9880d681SAndroid Build Coastguard Worker// This file is distributed under the University of Illinois Open Source
6*9880d681SAndroid Build Coastguard Worker// License. See LICENSE.TXT for details.
7*9880d681SAndroid Build Coastguard Worker//
8*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
9*9880d681SAndroid Build Coastguard Worker//
10*9880d681SAndroid Build Coastguard Worker// This file defines the itinerary class data for the Freescale e500mc 32-bit
11*9880d681SAndroid Build Coastguard Worker// Power processor.
12*9880d681SAndroid Build Coastguard Worker//
13*9880d681SAndroid Build Coastguard Worker// All information is derived from the "e500mc Core Reference Manual",
14*9880d681SAndroid Build Coastguard Worker// Freescale Document Number E500MCRM, Rev. 1, 03/2012.
15*9880d681SAndroid Build Coastguard Worker//
16*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
17*9880d681SAndroid Build Coastguard Worker// Relevant functional units in the Freescale e500mc core:
18*9880d681SAndroid Build Coastguard Worker//
19*9880d681SAndroid Build Coastguard Worker//  * Decode & Dispatch
20*9880d681SAndroid Build Coastguard Worker//    Can dispatch up to 2 instructions per clock cycle to either the GPR Issue
21*9880d681SAndroid Build Coastguard Worker//    queues (GIQx), FP Issue Queue (FIQ), or Branch issue queue (BIQ).
22*9880d681SAndroid Build Coastguard Workerdef E500_DIS0 : FuncUnit; // Dispatch stage - insn 1
23*9880d681SAndroid Build Coastguard Workerdef E500_DIS1 : FuncUnit; // Dispatch stage - insn 2
24*9880d681SAndroid Build Coastguard Worker
25*9880d681SAndroid Build Coastguard Worker//  * Execute
26*9880d681SAndroid Build Coastguard Worker//    6 pipelined execution units: SFX0, SFX1, BU, FPU, LSU, CFX.
27*9880d681SAndroid Build Coastguard Worker//    Some instructions can only execute in SFX0 but not SFX1.
28*9880d681SAndroid Build Coastguard Worker//    The CFX has a bypass path, allowing non-divide instructions to execute
29*9880d681SAndroid Build Coastguard Worker//    while a divide instruction is executed.
30*9880d681SAndroid Build Coastguard Workerdef E500_SFX0  : FuncUnit; // Simple unit 0
31*9880d681SAndroid Build Coastguard Workerdef E500_SFX1  : FuncUnit; // Simple unit 1
32*9880d681SAndroid Build Coastguard Workerdef E500_BU    : FuncUnit; // Branch unit
33*9880d681SAndroid Build Coastguard Workerdef E500_CFX_DivBypass
34*9880d681SAndroid Build Coastguard Worker               : FuncUnit; // CFX divide bypass path
35*9880d681SAndroid Build Coastguard Workerdef E500_CFX_0 : FuncUnit; // CFX pipeline
36*9880d681SAndroid Build Coastguard Workerdef E500_LSU_0 : FuncUnit; // LSU pipeline
37*9880d681SAndroid Build Coastguard Workerdef E500_FPU_0 : FuncUnit; // FPU pipeline
38*9880d681SAndroid Build Coastguard Worker
39*9880d681SAndroid Build Coastguard Workerdef E500_GPR_Bypass : Bypass;
40*9880d681SAndroid Build Coastguard Workerdef E500_FPR_Bypass : Bypass;
41*9880d681SAndroid Build Coastguard Workerdef E500_CR_Bypass  : Bypass;
42*9880d681SAndroid Build Coastguard Worker
43*9880d681SAndroid Build Coastguard Workerdef PPCE500mcItineraries : ProcessorItineraries<
44*9880d681SAndroid Build Coastguard Worker  [E500_DIS0, E500_DIS1, E500_SFX0, E500_SFX1, E500_BU, E500_CFX_DivBypass,
45*9880d681SAndroid Build Coastguard Worker   E500_CFX_0, E500_LSU_0, E500_FPU_0],
46*9880d681SAndroid Build Coastguard Worker  [E500_CR_Bypass, E500_GPR_Bypass, E500_FPR_Bypass], [
47*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_IntSimple,   [InstrStage<1, [E500_DIS0, E500_DIS1], 0>,
48*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E500_SFX0, E500_SFX1]>],
49*9880d681SAndroid Build Coastguard Worker                                 [4, 1, 1], // Latency = 1
50*9880d681SAndroid Build Coastguard Worker                                 [E500_GPR_Bypass,
51*9880d681SAndroid Build Coastguard Worker                                  E500_GPR_Bypass, E500_GPR_Bypass]>,
52*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_IntGeneral,  [InstrStage<1, [E500_DIS0, E500_DIS1], 0>,
53*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E500_SFX0, E500_SFX1]>],
54*9880d681SAndroid Build Coastguard Worker                                 [4, 1, 1], // Latency = 1
55*9880d681SAndroid Build Coastguard Worker                                 [E500_GPR_Bypass,
56*9880d681SAndroid Build Coastguard Worker                                  E500_GPR_Bypass, E500_GPR_Bypass]>,
57*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_IntISEL,     [InstrStage<1, [E500_DIS0, E500_DIS1], 0>,
58*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E500_SFX0, E500_SFX1]>],
59*9880d681SAndroid Build Coastguard Worker                                 [4, 1, 1, 1], // Latency = 1
60*9880d681SAndroid Build Coastguard Worker                                 [E500_GPR_Bypass,
61*9880d681SAndroid Build Coastguard Worker                                  E500_GPR_Bypass, E500_GPR_Bypass,
62*9880d681SAndroid Build Coastguard Worker                                  E500_CR_Bypass]>,
63*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_IntCompare,  [InstrStage<1, [E500_DIS0, E500_DIS1], 0>,
64*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E500_SFX0, E500_SFX1]>],
65*9880d681SAndroid Build Coastguard Worker                                 [5, 1, 1], // Latency = 1 or 2
66*9880d681SAndroid Build Coastguard Worker                                 [E500_CR_Bypass,
67*9880d681SAndroid Build Coastguard Worker                                  E500_GPR_Bypass, E500_GPR_Bypass]>,
68*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_IntDivW,     [InstrStage<1, [E500_DIS0, E500_DIS1], 0>,
69*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E500_CFX_0], 0>,
70*9880d681SAndroid Build Coastguard Worker                                  InstrStage<14, [E500_CFX_DivBypass]>],
71*9880d681SAndroid Build Coastguard Worker                                 [17, 1, 1], // Latency=4..35, Repeat= 4..35
72*9880d681SAndroid Build Coastguard Worker                                 [E500_GPR_Bypass,
73*9880d681SAndroid Build Coastguard Worker                                  E500_GPR_Bypass, E500_GPR_Bypass]>,
74*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_IntMFFS,     [InstrStage<1, [E500_DIS0, E500_DIS1], 0>,
75*9880d681SAndroid Build Coastguard Worker                                  InstrStage<8, [E500_FPU_0]>],
76*9880d681SAndroid Build Coastguard Worker                                 [11], // Latency = 8
77*9880d681SAndroid Build Coastguard Worker                                 [E500_FPR_Bypass]>,
78*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_IntMTFSB0,   [InstrStage<1, [E500_DIS0, E500_DIS1], 0>,
79*9880d681SAndroid Build Coastguard Worker                                  InstrStage<8, [E500_FPU_0]>],
80*9880d681SAndroid Build Coastguard Worker                                 [11, 1, 1], // Latency = 8
81*9880d681SAndroid Build Coastguard Worker                                 [NoBypass, NoBypass, NoBypass]>,
82*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_IntMulHW,    [InstrStage<1, [E500_DIS0, E500_DIS1], 0>,
83*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E500_CFX_0]>],
84*9880d681SAndroid Build Coastguard Worker                                 [7, 1, 1], // Latency = 4, Repeat rate = 1
85*9880d681SAndroid Build Coastguard Worker                                 [E500_GPR_Bypass,
86*9880d681SAndroid Build Coastguard Worker                                  E500_GPR_Bypass, E500_GPR_Bypass]>,
87*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_IntMulHWU,   [InstrStage<1, [E500_DIS0, E500_DIS1], 0>,
88*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E500_CFX_0]>],
89*9880d681SAndroid Build Coastguard Worker                                 [7, 1, 1], // Latency = 4, Repeat rate = 1
90*9880d681SAndroid Build Coastguard Worker                                 [E500_GPR_Bypass,
91*9880d681SAndroid Build Coastguard Worker                                  E500_GPR_Bypass, E500_GPR_Bypass]>,
92*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_IntMulLI,    [InstrStage<1, [E500_DIS0, E500_DIS1], 0>,
93*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E500_CFX_0]>],
94*9880d681SAndroid Build Coastguard Worker                                 [7, 1, 1], // Latency = 4, Repeat rate = 1
95*9880d681SAndroid Build Coastguard Worker                                 [E500_GPR_Bypass,
96*9880d681SAndroid Build Coastguard Worker                                  E500_GPR_Bypass, E500_GPR_Bypass]>,
97*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_IntRotate,   [InstrStage<1, [E500_DIS0, E500_DIS1], 0>,
98*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E500_SFX0, E500_SFX1]>],
99*9880d681SAndroid Build Coastguard Worker                                 [4, 1, 1], // Latency = 1
100*9880d681SAndroid Build Coastguard Worker                                 [E500_GPR_Bypass,
101*9880d681SAndroid Build Coastguard Worker                                  E500_GPR_Bypass, E500_GPR_Bypass]>,
102*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_IntShift,    [InstrStage<1, [E500_DIS0, E500_DIS1], 0>,
103*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E500_SFX0, E500_SFX1]>],
104*9880d681SAndroid Build Coastguard Worker                                 [4, 1, 1], // Latency = 1
105*9880d681SAndroid Build Coastguard Worker                                 [E500_GPR_Bypass,
106*9880d681SAndroid Build Coastguard Worker                                  E500_GPR_Bypass, E500_GPR_Bypass]>,
107*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_IntTrapW,    [InstrStage<1, [E500_DIS0, E500_DIS1], 0>,
108*9880d681SAndroid Build Coastguard Worker                                  InstrStage<2, [E500_SFX0]>],
109*9880d681SAndroid Build Coastguard Worker                                 [5, 1], // Latency = 2, Repeat rate = 2
110*9880d681SAndroid Build Coastguard Worker                                 [E500_GPR_Bypass, E500_GPR_Bypass]>,
111*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_BrB,         [InstrStage<1, [E500_DIS0, E500_DIS1], 0>,
112*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E500_BU]>],
113*9880d681SAndroid Build Coastguard Worker                                 [4, 1], // Latency = 1
114*9880d681SAndroid Build Coastguard Worker                                 [NoBypass, E500_GPR_Bypass]>,
115*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_BrCR,        [InstrStage<1, [E500_DIS0, E500_DIS1], 0>,
116*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E500_BU]>],
117*9880d681SAndroid Build Coastguard Worker                                 [4, 1, 1], // Latency = 1
118*9880d681SAndroid Build Coastguard Worker                                 [E500_CR_Bypass,
119*9880d681SAndroid Build Coastguard Worker                                  E500_CR_Bypass, E500_CR_Bypass]>,
120*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_BrMCR,       [InstrStage<1, [E500_DIS0, E500_DIS1], 0>,
121*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E500_BU]>],
122*9880d681SAndroid Build Coastguard Worker                                 [4, 1], // Latency = 1
123*9880d681SAndroid Build Coastguard Worker                                 [E500_CR_Bypass, E500_CR_Bypass]>,
124*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_BrMCRX,      [InstrStage<1, [E500_DIS0, E500_DIS1], 0>,
125*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E500_SFX0, E500_SFX1]>],
126*9880d681SAndroid Build Coastguard Worker                                 [4, 1, 1], // Latency = 1
127*9880d681SAndroid Build Coastguard Worker                                 [E500_CR_Bypass, E500_GPR_Bypass]>,
128*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_LdStDCBA,    [InstrStage<1, [E500_DIS0, E500_DIS1], 0>,
129*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E500_LSU_0]>],
130*9880d681SAndroid Build Coastguard Worker                                 [6, 1], // Latency = 3, Repeat rate = 1
131*9880d681SAndroid Build Coastguard Worker                                 [E500_GPR_Bypass, E500_GPR_Bypass]>,
132*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_LdStDCBF,    [InstrStage<1, [E500_DIS0, E500_DIS1], 0>,
133*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E500_LSU_0]>],
134*9880d681SAndroid Build Coastguard Worker                                 [6, 1], // Latency = 3
135*9880d681SAndroid Build Coastguard Worker                                 [E500_GPR_Bypass, E500_GPR_Bypass]>,
136*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_LdStDCBI,    [InstrStage<1, [E500_DIS0, E500_DIS1], 0>,
137*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E500_LSU_0]>],
138*9880d681SAndroid Build Coastguard Worker                                 [6, 1], // Latency = 3
139*9880d681SAndroid Build Coastguard Worker                                 [E500_GPR_Bypass, E500_GPR_Bypass]>,
140*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_LdStLoad,    [InstrStage<1, [E500_DIS0, E500_DIS1], 0>,
141*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E500_LSU_0]>],
142*9880d681SAndroid Build Coastguard Worker                                 [6, 1], // Latency = 3
143*9880d681SAndroid Build Coastguard Worker                                 [E500_GPR_Bypass, E500_GPR_Bypass]>,
144*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_LdStLoadUpd, [InstrStage<1, [E500_DIS0, E500_DIS1], 0>,
145*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E500_SFX0, E500_SFX1], 0>,
146*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E500_LSU_0]>],
147*9880d681SAndroid Build Coastguard Worker                                 [6, 1], // Latency = 3
148*9880d681SAndroid Build Coastguard Worker                                 [E500_GPR_Bypass, E500_GPR_Bypass],
149*9880d681SAndroid Build Coastguard Worker                                 2>, // 2 micro-ops
150*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_LdStLoadUpdX,[InstrStage<1, [E500_DIS0, E500_DIS1], 0>,
151*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E500_SFX0, E500_SFX1], 0>,
152*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E500_LSU_0]>],
153*9880d681SAndroid Build Coastguard Worker                                 [6, 1], // Latency = 3
154*9880d681SAndroid Build Coastguard Worker                                 [E500_GPR_Bypass, E500_GPR_Bypass],
155*9880d681SAndroid Build Coastguard Worker                                 2>, // 2 micro-ops
156*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_LdStStore,   [InstrStage<1, [E500_DIS0, E500_DIS1], 0>,
157*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E500_LSU_0]>],
158*9880d681SAndroid Build Coastguard Worker                                 [6, 1], // Latency = 3
159*9880d681SAndroid Build Coastguard Worker                                 [NoBypass, E500_GPR_Bypass]>,
160*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_LdStStoreUpd,[InstrStage<1, [E500_DIS0, E500_DIS1], 0>,
161*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E500_SFX0, E500_SFX1], 0>,
162*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E500_LSU_0]>],
163*9880d681SAndroid Build Coastguard Worker                                 [6, 1], // Latency = 3
164*9880d681SAndroid Build Coastguard Worker                                 [NoBypass, E500_GPR_Bypass],
165*9880d681SAndroid Build Coastguard Worker                                 2>, // 2 micro-ops
166*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_LdStICBI,    [InstrStage<1, [E500_DIS0, E500_DIS1], 0>,
167*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E500_LSU_0]>],
168*9880d681SAndroid Build Coastguard Worker                                 [6, 1], // Latency = 3
169*9880d681SAndroid Build Coastguard Worker                                 [NoBypass, E500_GPR_Bypass]>,
170*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_LdStSTFD,    [InstrStage<1, [E500_DIS0, E500_DIS1], 0>,
171*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E500_LSU_0]>],
172*9880d681SAndroid Build Coastguard Worker                                 [6, 1, 1], // Latency = 3
173*9880d681SAndroid Build Coastguard Worker                                 [E500_GPR_Bypass,
174*9880d681SAndroid Build Coastguard Worker                                  E500_GPR_Bypass, E500_GPR_Bypass]>,
175*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_LdStSTFDU,   [InstrStage<1, [E500_DIS0, E500_DIS1], 0>,
176*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E500_SFX0, E500_SFX1], 0>,
177*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E500_LSU_0]>],
178*9880d681SAndroid Build Coastguard Worker                                 [6, 1, 1], // Latency = 3
179*9880d681SAndroid Build Coastguard Worker                                 [E500_GPR_Bypass,
180*9880d681SAndroid Build Coastguard Worker                                  E500_GPR_Bypass, E500_GPR_Bypass],
181*9880d681SAndroid Build Coastguard Worker                                 2>, // 2 micro-ops
182*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_LdStLFD,     [InstrStage<1, [E500_DIS0, E500_DIS1], 0>,
183*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E500_LSU_0]>],
184*9880d681SAndroid Build Coastguard Worker                                 [7, 1, 1], // Latency = 4
185*9880d681SAndroid Build Coastguard Worker                                 [E500_FPR_Bypass,
186*9880d681SAndroid Build Coastguard Worker                                  E500_GPR_Bypass, E500_GPR_Bypass]>,
187*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_LdStLFDU,    [InstrStage<1, [E500_DIS0, E500_DIS1], 0>,
188*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E500_SFX0, E500_SFX1], 0>,
189*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E500_LSU_0]>],
190*9880d681SAndroid Build Coastguard Worker                                 [7, 1, 1], // Latency = 4
191*9880d681SAndroid Build Coastguard Worker                                 [E500_FPR_Bypass,
192*9880d681SAndroid Build Coastguard Worker                                  E500_GPR_Bypass, E500_GPR_Bypass],
193*9880d681SAndroid Build Coastguard Worker                                 2>, // 2 micro-ops
194*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_LdStLFDUX,   [InstrStage<1, [E500_DIS0, E500_DIS1], 0>,
195*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E500_SFX0, E500_SFX1], 0>,
196*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E500_LSU_0]>],
197*9880d681SAndroid Build Coastguard Worker                                 [7, 1, 1], // Latency = 4
198*9880d681SAndroid Build Coastguard Worker                                 [E500_FPR_Bypass,
199*9880d681SAndroid Build Coastguard Worker                                  E500_GPR_Bypass, E500_GPR_Bypass],
200*9880d681SAndroid Build Coastguard Worker                                 2>, // 2 micro-ops
201*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_LdStLHA,     [InstrStage<1, [E500_DIS0, E500_DIS1], 0>,
202*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E500_LSU_0]>],
203*9880d681SAndroid Build Coastguard Worker                                 [6, 1], // Latency = 3
204*9880d681SAndroid Build Coastguard Worker                                 [E500_GPR_Bypass, E500_GPR_Bypass]>,
205*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_LdStLHAU,    [InstrStage<1, [E500_DIS0, E500_DIS1], 0>,
206*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E500_SFX0, E500_SFX1], 0>,
207*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E500_LSU_0]>],
208*9880d681SAndroid Build Coastguard Worker                                 [6, 1], // Latency = 3
209*9880d681SAndroid Build Coastguard Worker                                 [E500_GPR_Bypass, E500_GPR_Bypass]>,
210*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_LdStLHAUX,   [InstrStage<1, [E500_DIS0, E500_DIS1], 0>,
211*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E500_SFX0, E500_SFX1], 0>,
212*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E500_LSU_0]>],
213*9880d681SAndroid Build Coastguard Worker                                 [6, 1], // Latency = 3
214*9880d681SAndroid Build Coastguard Worker                                 [E500_GPR_Bypass, E500_GPR_Bypass]>,
215*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_LdStLMW,     [InstrStage<1, [E500_DIS0, E500_DIS1], 0>,
216*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E500_LSU_0]>],
217*9880d681SAndroid Build Coastguard Worker                                 [7, 1], // Latency = r+3
218*9880d681SAndroid Build Coastguard Worker                                 [NoBypass, E500_GPR_Bypass]>,
219*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_LdStLWARX,   [InstrStage<1, [E500_DIS0, E500_DIS1], 0>,
220*9880d681SAndroid Build Coastguard Worker                                  InstrStage<3, [E500_LSU_0]>],
221*9880d681SAndroid Build Coastguard Worker                                 [6, 1, 1], // Latency = 3, Repeat rate = 3
222*9880d681SAndroid Build Coastguard Worker                                 [E500_GPR_Bypass,
223*9880d681SAndroid Build Coastguard Worker                                  E500_GPR_Bypass, E500_GPR_Bypass]>,
224*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_LdStSTWCX,   [InstrStage<1, [E500_DIS0, E500_DIS1], 0>,
225*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E500_LSU_0]>],
226*9880d681SAndroid Build Coastguard Worker                                 [6, 1], // Latency = 3
227*9880d681SAndroid Build Coastguard Worker                                 [NoBypass, E500_GPR_Bypass]>,
228*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_LdStSync,    [InstrStage<1, [E500_DIS0, E500_DIS1], 0>,
229*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E500_LSU_0]>]>,
230*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_SprMFSR,     [InstrStage<1, [E500_DIS0, E500_DIS1], 0>,
231*9880d681SAndroid Build Coastguard Worker                                  InstrStage<4, [E500_SFX0]>],
232*9880d681SAndroid Build Coastguard Worker                                 [7, 1],
233*9880d681SAndroid Build Coastguard Worker                                 [E500_GPR_Bypass, E500_GPR_Bypass]>,
234*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_SprMTMSR,    [InstrStage<1, [E500_DIS0, E500_DIS1], 0>,
235*9880d681SAndroid Build Coastguard Worker                                  InstrStage<2, [E500_SFX0, E500_SFX1]>],
236*9880d681SAndroid Build Coastguard Worker                                 [5, 1], // Latency = 2, Repeat rate = 4
237*9880d681SAndroid Build Coastguard Worker                                 [E500_GPR_Bypass, E500_GPR_Bypass]>,
238*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_SprMTSR,     [InstrStage<1, [E500_DIS0, E500_DIS1], 0>,
239*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E500_SFX0]>],
240*9880d681SAndroid Build Coastguard Worker                                 [5, 1],
241*9880d681SAndroid Build Coastguard Worker                                 [NoBypass, E500_GPR_Bypass]>,
242*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_SprTLBSYNC,  [InstrStage<1, [E500_DIS0, E500_DIS1], 0>,
243*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E500_LSU_0], 0>]>,
244*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_SprMFCR,     [InstrStage<1, [E500_DIS0, E500_DIS1], 0>,
245*9880d681SAndroid Build Coastguard Worker                                  InstrStage<5, [E500_SFX0]>],
246*9880d681SAndroid Build Coastguard Worker                                 [8, 1],
247*9880d681SAndroid Build Coastguard Worker                                 [E500_GPR_Bypass, E500_CR_Bypass]>,
248*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_SprMFCRF,    [InstrStage<1, [E500_DIS0, E500_DIS1], 0>,
249*9880d681SAndroid Build Coastguard Worker                                  InstrStage<5, [E500_SFX0]>],
250*9880d681SAndroid Build Coastguard Worker                                 [8, 1],
251*9880d681SAndroid Build Coastguard Worker                                 [E500_GPR_Bypass, E500_CR_Bypass]>,
252*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_SprMFMSR,    [InstrStage<1, [E500_DIS0, E500_DIS1], 0>,
253*9880d681SAndroid Build Coastguard Worker                                  InstrStage<4, [E500_SFX0]>],
254*9880d681SAndroid Build Coastguard Worker                                 [7, 1], // Latency = 4, Repeat rate = 4
255*9880d681SAndroid Build Coastguard Worker                                 [E500_GPR_Bypass, E500_GPR_Bypass]>,
256*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_SprMFSPR,    [InstrStage<1, [E500_DIS0, E500_DIS1], 0>,
257*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E500_SFX0, E500_SFX1]>],
258*9880d681SAndroid Build Coastguard Worker                                 [4, 1], // Latency = 1, Repeat rate = 1
259*9880d681SAndroid Build Coastguard Worker                                 [E500_GPR_Bypass, E500_CR_Bypass]>,
260*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_SprMFTB,     [InstrStage<1, [E500_DIS0, E500_DIS1], 0>,
261*9880d681SAndroid Build Coastguard Worker                                  InstrStage<4, [E500_SFX0]>],
262*9880d681SAndroid Build Coastguard Worker                                 [7, 1], // Latency = 4, Repeat rate = 4
263*9880d681SAndroid Build Coastguard Worker                                 [NoBypass, E500_GPR_Bypass]>,
264*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_SprMTSPR,    [InstrStage<1, [E500_DIS0, E500_DIS1], 0>,
265*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E500_SFX0, E500_SFX1]>],
266*9880d681SAndroid Build Coastguard Worker                                 [4, 1], // Latency = 1, Repeat rate = 1
267*9880d681SAndroid Build Coastguard Worker                                 [E500_CR_Bypass, E500_GPR_Bypass]>,
268*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_SprMTSRIN,   [InstrStage<1, [E500_DIS0, E500_DIS1], 0>,
269*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E500_SFX0]>],
270*9880d681SAndroid Build Coastguard Worker                                 [4, 1],
271*9880d681SAndroid Build Coastguard Worker                                 [NoBypass, E500_GPR_Bypass]>,
272*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_FPGeneral,   [InstrStage<1, [E500_DIS0, E500_DIS1], 0>,
273*9880d681SAndroid Build Coastguard Worker                                  InstrStage<2, [E500_FPU_0]>],
274*9880d681SAndroid Build Coastguard Worker                                 [11, 1, 1], // Latency = 8, Repeat rate = 2
275*9880d681SAndroid Build Coastguard Worker                                 [E500_FPR_Bypass,
276*9880d681SAndroid Build Coastguard Worker                                  E500_FPR_Bypass, E500_FPR_Bypass]>,
277*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_FPAddSub,    [InstrStage<1, [E500_DIS0, E500_DIS1], 0>,
278*9880d681SAndroid Build Coastguard Worker                                  InstrStage<4, [E500_FPU_0]>],
279*9880d681SAndroid Build Coastguard Worker                                 [13, 1, 1], // Latency = 10, Repeat rate = 4
280*9880d681SAndroid Build Coastguard Worker                                 [E500_FPR_Bypass,
281*9880d681SAndroid Build Coastguard Worker                                  E500_FPR_Bypass, E500_FPR_Bypass]>,
282*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_FPCompare,   [InstrStage<1, [E500_DIS0, E500_DIS1], 0>,
283*9880d681SAndroid Build Coastguard Worker                                  InstrStage<2, [E500_FPU_0]>],
284*9880d681SAndroid Build Coastguard Worker                                 [11, 1, 1], // Latency = 8, Repeat rate = 2
285*9880d681SAndroid Build Coastguard Worker                                 [E500_CR_Bypass,
286*9880d681SAndroid Build Coastguard Worker                                  E500_FPR_Bypass, E500_FPR_Bypass]>,
287*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_FPDivD,      [InstrStage<1, [E500_DIS0, E500_DIS1], 0>,
288*9880d681SAndroid Build Coastguard Worker                                  InstrStage<68, [E500_FPU_0]>],
289*9880d681SAndroid Build Coastguard Worker                                 [71, 1, 1], // Latency = 68, Repeat rate = 68
290*9880d681SAndroid Build Coastguard Worker                                 [E500_FPR_Bypass,
291*9880d681SAndroid Build Coastguard Worker                                  E500_FPR_Bypass, E500_FPR_Bypass]>,
292*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_FPDivS,      [InstrStage<1, [E500_DIS0, E500_DIS1], 0>,
293*9880d681SAndroid Build Coastguard Worker                                  InstrStage<38, [E500_FPU_0]>],
294*9880d681SAndroid Build Coastguard Worker                                 [41, 1, 1], // Latency = 38, Repeat rate = 38
295*9880d681SAndroid Build Coastguard Worker                                 [E500_FPR_Bypass,
296*9880d681SAndroid Build Coastguard Worker                                  E500_FPR_Bypass, E500_FPR_Bypass]>,
297*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_FPFused,     [InstrStage<1, [E500_DIS0, E500_DIS1], 0>,
298*9880d681SAndroid Build Coastguard Worker                                  InstrStage<4, [E500_FPU_0]>],
299*9880d681SAndroid Build Coastguard Worker                                 [13, 1, 1, 1], // Latency = 10, Repeat rate = 4
300*9880d681SAndroid Build Coastguard Worker                                 [E500_FPR_Bypass,
301*9880d681SAndroid Build Coastguard Worker                                  E500_FPR_Bypass, E500_FPR_Bypass,
302*9880d681SAndroid Build Coastguard Worker                                  E500_FPR_Bypass]>,
303*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_FPRes,       [InstrStage<1, [E500_DIS0, E500_DIS1], 0>,
304*9880d681SAndroid Build Coastguard Worker                                  InstrStage<38, [E500_FPU_0]>],
305*9880d681SAndroid Build Coastguard Worker                                 [41, 1], // Latency = 38, Repeat rate = 38
306*9880d681SAndroid Build Coastguard Worker                                 [E500_FPR_Bypass, E500_FPR_Bypass]>
307*9880d681SAndroid Build Coastguard Worker]>;
308*9880d681SAndroid Build Coastguard Worker
309*9880d681SAndroid Build Coastguard Worker// ===---------------------------------------------------------------------===//
310*9880d681SAndroid Build Coastguard Worker// e500mc machine model for scheduling and other instruction cost heuristics.
311*9880d681SAndroid Build Coastguard Worker
312*9880d681SAndroid Build Coastguard Workerdef PPCE500mcModel : SchedMachineModel {
313*9880d681SAndroid Build Coastguard Worker  let IssueWidth = 2;  // 2 micro-ops are dispatched per cycle.
314*9880d681SAndroid Build Coastguard Worker  let LoadLatency = 5; // Optimistic load latency assuming bypass.
315*9880d681SAndroid Build Coastguard Worker                       // This is overriden by OperandCycles if the
316*9880d681SAndroid Build Coastguard Worker                       // Itineraries are queried instead.
317*9880d681SAndroid Build Coastguard Worker
318*9880d681SAndroid Build Coastguard Worker  let CompleteModel = 0;
319*9880d681SAndroid Build Coastguard Worker
320*9880d681SAndroid Build Coastguard Worker  let Itineraries = PPCE500mcItineraries;
321*9880d681SAndroid Build Coastguard Worker}
322