xref: /aosp_15_r20/external/llvm/lib/Target/PowerPC/PPCScheduleE5500.td (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker//===-- PPCScheduleE500mc.td - e5500 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 e5500 64-bit
11*9880d681SAndroid Build Coastguard Worker// Power processor.
12*9880d681SAndroid Build Coastguard Worker//
13*9880d681SAndroid Build Coastguard Worker// All information is derived from the "e5500 Core Reference Manual",
14*9880d681SAndroid Build Coastguard Worker// Freescale Document Number e5500RM, 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 e5500 core
18*9880d681SAndroid Build Coastguard Worker// (These are the same as for the e500mc)
19*9880d681SAndroid Build Coastguard Worker//
20*9880d681SAndroid Build Coastguard Worker//  * Decode & Dispatch
21*9880d681SAndroid Build Coastguard Worker//    Can dispatch up to 2 instructions per clock cycle to either the GPR Issue
22*9880d681SAndroid Build Coastguard Worker//    queues (GIQx), FP Issue Queue (FIQ), or Branch issue queue (BIQ).
23*9880d681SAndroid Build Coastguard Workerdef E5500_DIS0 : FuncUnit;
24*9880d681SAndroid Build Coastguard Workerdef E5500_DIS1 : FuncUnit;
25*9880d681SAndroid Build Coastguard Worker
26*9880d681SAndroid Build Coastguard Worker//  * Execute
27*9880d681SAndroid Build Coastguard Worker//    6 pipelined execution units: SFX0, SFX1, BU, FPU, LSU, CFX.
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 being executed.
30*9880d681SAndroid Build Coastguard Workerdef E5500_SFX0  : FuncUnit; // Simple unit 0
31*9880d681SAndroid Build Coastguard Workerdef E5500_SFX1  : FuncUnit; // Simple unit 1
32*9880d681SAndroid Build Coastguard Workerdef E5500_BU    : FuncUnit; // Branch unit
33*9880d681SAndroid Build Coastguard Workerdef E5500_CFX_DivBypass
34*9880d681SAndroid Build Coastguard Worker                : FuncUnit; // CFX divide bypass path
35*9880d681SAndroid Build Coastguard Workerdef E5500_CFX_0 : FuncUnit; // CFX pipeline stage 0
36*9880d681SAndroid Build Coastguard Worker
37*9880d681SAndroid Build Coastguard Workerdef E5500_CFX_1 : FuncUnit; // CFX pipeline stage 1
38*9880d681SAndroid Build Coastguard Worker
39*9880d681SAndroid Build Coastguard Workerdef E5500_LSU_0 : FuncUnit; // LSU pipeline
40*9880d681SAndroid Build Coastguard Workerdef E5500_FPU_0 : FuncUnit; // FPU pipeline
41*9880d681SAndroid Build Coastguard Worker
42*9880d681SAndroid Build Coastguard Workerdef E5500_GPR_Bypass : Bypass;
43*9880d681SAndroid Build Coastguard Workerdef E5500_FPR_Bypass : Bypass;
44*9880d681SAndroid Build Coastguard Workerdef E5500_CR_Bypass  : Bypass;
45*9880d681SAndroid Build Coastguard Worker
46*9880d681SAndroid Build Coastguard Workerdef PPCE5500Itineraries : ProcessorItineraries<
47*9880d681SAndroid Build Coastguard Worker  [E5500_DIS0, E5500_DIS1, E5500_SFX0, E5500_SFX1, E5500_BU,
48*9880d681SAndroid Build Coastguard Worker   E5500_CFX_DivBypass, E5500_CFX_0, E5500_CFX_1,
49*9880d681SAndroid Build Coastguard Worker   E5500_LSU_0, E5500_FPU_0],
50*9880d681SAndroid Build Coastguard Worker  [E5500_CR_Bypass, E5500_GPR_Bypass, E5500_FPR_Bypass], [
51*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_IntSimple,   [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
52*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E5500_SFX0, E5500_SFX1]>],
53*9880d681SAndroid Build Coastguard Worker                                 [5, 2, 2], // Latency = 1
54*9880d681SAndroid Build Coastguard Worker                                 [E5500_GPR_Bypass,
55*9880d681SAndroid Build Coastguard Worker                                  E5500_GPR_Bypass, E5500_GPR_Bypass]>,
56*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_IntGeneral,  [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
57*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E5500_SFX0, E5500_SFX1]>],
58*9880d681SAndroid Build Coastguard Worker                                 [5, 2, 2], // Latency = 1
59*9880d681SAndroid Build Coastguard Worker                                 [E5500_GPR_Bypass,
60*9880d681SAndroid Build Coastguard Worker                                  E5500_GPR_Bypass, E5500_GPR_Bypass]>,
61*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_IntISEL,     [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
62*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E5500_SFX0, E5500_SFX1]>],
63*9880d681SAndroid Build Coastguard Worker                                 [5, 2, 2, 2], // Latency = 1
64*9880d681SAndroid Build Coastguard Worker                                 [E5500_GPR_Bypass,
65*9880d681SAndroid Build Coastguard Worker                                  E5500_GPR_Bypass, E5500_GPR_Bypass,
66*9880d681SAndroid Build Coastguard Worker                                  E5500_CR_Bypass]>,
67*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_IntCompare,  [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
68*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E5500_SFX0, E5500_SFX1]>],
69*9880d681SAndroid Build Coastguard Worker                                 [6, 2, 2], // Latency = 1 or 2
70*9880d681SAndroid Build Coastguard Worker                                 [E5500_CR_Bypass,
71*9880d681SAndroid Build Coastguard Worker                                  E5500_GPR_Bypass, E5500_GPR_Bypass]>,
72*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_IntDivD,     [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
73*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E5500_CFX_0], 0>,
74*9880d681SAndroid Build Coastguard Worker                                  InstrStage<26, [E5500_CFX_DivBypass]>],
75*9880d681SAndroid Build Coastguard Worker                                 [30, 2, 2], // Latency= 4..26, Repeat rate= 4..26
76*9880d681SAndroid Build Coastguard Worker                                 [E5500_GPR_Bypass,
77*9880d681SAndroid Build Coastguard Worker                                  E5500_GPR_Bypass, E5500_GPR_Bypass]>,
78*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_IntDivW,     [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
79*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E5500_CFX_0], 0>,
80*9880d681SAndroid Build Coastguard Worker                                  InstrStage<16, [E5500_CFX_DivBypass]>],
81*9880d681SAndroid Build Coastguard Worker                                 [20, 2, 2], // Latency= 4..16, Repeat rate= 4..16
82*9880d681SAndroid Build Coastguard Worker                                 [E5500_GPR_Bypass,
83*9880d681SAndroid Build Coastguard Worker                                  E5500_GPR_Bypass, E5500_GPR_Bypass]>,
84*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_IntMFFS,     [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
85*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E5500_FPU_0]>],
86*9880d681SAndroid Build Coastguard Worker                                 [11], // Latency = 7, Repeat rate = 1
87*9880d681SAndroid Build Coastguard Worker                                 [E5500_FPR_Bypass]>,
88*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_IntMTFSB0,   [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
89*9880d681SAndroid Build Coastguard Worker                                  InstrStage<7, [E5500_FPU_0]>],
90*9880d681SAndroid Build Coastguard Worker                                 [11, 2, 2], // Latency = 7, Repeat rate = 7
91*9880d681SAndroid Build Coastguard Worker                                 [NoBypass, NoBypass, NoBypass]>,
92*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_IntMulHD,    [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
93*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E5500_CFX_0], 0>,
94*9880d681SAndroid Build Coastguard Worker                                  InstrStage<2, [E5500_CFX_1]>],
95*9880d681SAndroid Build Coastguard Worker                                 [9, 2, 2], // Latency = 4..7, Repeat rate = 2..4
96*9880d681SAndroid Build Coastguard Worker                                 [E5500_GPR_Bypass,
97*9880d681SAndroid Build Coastguard Worker                                  E5500_GPR_Bypass, E5500_GPR_Bypass]>,
98*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_IntMulHW,    [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
99*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E5500_CFX_0], 0>,
100*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E5500_CFX_1]>],
101*9880d681SAndroid Build Coastguard Worker                                 [8, 2, 2], // Latency = 4, Repeat rate = 1
102*9880d681SAndroid Build Coastguard Worker                                 [E5500_GPR_Bypass,
103*9880d681SAndroid Build Coastguard Worker                                  E5500_GPR_Bypass, E5500_GPR_Bypass]>,
104*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_IntMulHWU,   [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
105*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E5500_CFX_0], 0>,
106*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E5500_CFX_1]>],
107*9880d681SAndroid Build Coastguard Worker                                 [8, 2, 2], // Latency = 4, Repeat rate = 1
108*9880d681SAndroid Build Coastguard Worker                                 [E5500_GPR_Bypass,
109*9880d681SAndroid Build Coastguard Worker                                  E5500_GPR_Bypass, E5500_GPR_Bypass]>,
110*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_IntMulLI,    [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
111*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E5500_CFX_0], 0>,
112*9880d681SAndroid Build Coastguard Worker                                  InstrStage<2, [E5500_CFX_1]>],
113*9880d681SAndroid Build Coastguard Worker                                 [8, 2, 2], // Latency = 4 or 5, Repeat = 2
114*9880d681SAndroid Build Coastguard Worker                                 [E5500_GPR_Bypass,
115*9880d681SAndroid Build Coastguard Worker                                  E5500_GPR_Bypass, E5500_GPR_Bypass]>,
116*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_IntRotate,   [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
117*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E5500_SFX0, E5500_SFX1]>],
118*9880d681SAndroid Build Coastguard Worker                                 [5, 2, 2], // Latency = 1
119*9880d681SAndroid Build Coastguard Worker                                 [E5500_GPR_Bypass,
120*9880d681SAndroid Build Coastguard Worker                                  E5500_GPR_Bypass, E5500_GPR_Bypass]>,
121*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_IntRotateD,  [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
122*9880d681SAndroid Build Coastguard Worker                                  InstrStage<2, [E5500_SFX0, E5500_SFX1]>],
123*9880d681SAndroid Build Coastguard Worker                                 [6, 2, 2], // Latency = 2, Repeat rate = 2
124*9880d681SAndroid Build Coastguard Worker                                 [E5500_GPR_Bypass,
125*9880d681SAndroid Build Coastguard Worker                                  E5500_GPR_Bypass, E5500_GPR_Bypass]>,
126*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_IntRotateDI, [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
127*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E5500_SFX0, E5500_SFX1]>],
128*9880d681SAndroid Build Coastguard Worker                                 [5, 2, 2], // Latency = 1, Repeat rate = 1
129*9880d681SAndroid Build Coastguard Worker                                 [E5500_GPR_Bypass,
130*9880d681SAndroid Build Coastguard Worker                                  E5500_GPR_Bypass, E5500_GPR_Bypass]>,
131*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_IntShift,    [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
132*9880d681SAndroid Build Coastguard Worker                                  InstrStage<2, [E5500_SFX0, E5500_SFX1]>],
133*9880d681SAndroid Build Coastguard Worker                                 [6, 2, 2], // Latency = 2, Repeat rate = 2
134*9880d681SAndroid Build Coastguard Worker                                 [E5500_GPR_Bypass,
135*9880d681SAndroid Build Coastguard Worker                                  E5500_GPR_Bypass, E5500_GPR_Bypass]>,
136*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_IntTrapW,    [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
137*9880d681SAndroid Build Coastguard Worker                                  InstrStage<2, [E5500_SFX0]>],
138*9880d681SAndroid Build Coastguard Worker                                 [6, 2], // Latency = 2, Repeat rate = 2
139*9880d681SAndroid Build Coastguard Worker                                 [E5500_GPR_Bypass, E5500_GPR_Bypass]>,
140*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_BrB,         [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
141*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E5500_BU]>],
142*9880d681SAndroid Build Coastguard Worker                                 [5, 2], // Latency = 1
143*9880d681SAndroid Build Coastguard Worker                                 [NoBypass, E5500_GPR_Bypass]>,
144*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_BrCR,        [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
145*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E5500_BU]>],
146*9880d681SAndroid Build Coastguard Worker                                 [5, 2, 2], // Latency = 1
147*9880d681SAndroid Build Coastguard Worker                                 [E5500_CR_Bypass,
148*9880d681SAndroid Build Coastguard Worker                                  E5500_CR_Bypass, E5500_CR_Bypass]>,
149*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_BrMCR,       [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
150*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E5500_BU]>],
151*9880d681SAndroid Build Coastguard Worker                                 [5, 2], // Latency = 1
152*9880d681SAndroid Build Coastguard Worker                                 [E5500_CR_Bypass, E5500_CR_Bypass]>,
153*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_BrMCRX,      [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
154*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E5500_CFX_0]>],
155*9880d681SAndroid Build Coastguard Worker                                 [5, 2, 2], // Latency = 1
156*9880d681SAndroid Build Coastguard Worker                                 [E5500_CR_Bypass, E5500_GPR_Bypass]>,
157*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_LdStDCBA,    [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
158*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E5500_LSU_0]>],
159*9880d681SAndroid Build Coastguard Worker                                 [7, 2], // Latency = 3, Repeat rate = 1
160*9880d681SAndroid Build Coastguard Worker                                 [E5500_GPR_Bypass, E5500_GPR_Bypass]>,
161*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_LdStDCBF,    [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
162*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E5500_LSU_0]>],
163*9880d681SAndroid Build Coastguard Worker                                 [7, 2], // Latency = 3, Repeat rate = 1
164*9880d681SAndroid Build Coastguard Worker                                 [E5500_GPR_Bypass, E5500_GPR_Bypass]>,
165*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_LdStDCBI,    [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
166*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E5500_LSU_0]>],
167*9880d681SAndroid Build Coastguard Worker                                 [7, 2], // Latency = 3, Repeat rate = 1
168*9880d681SAndroid Build Coastguard Worker                                 [E5500_GPR_Bypass, E5500_GPR_Bypass]>,
169*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_LdStLoad,    [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
170*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E5500_LSU_0]>],
171*9880d681SAndroid Build Coastguard Worker                                 [7, 2], // Latency = 3
172*9880d681SAndroid Build Coastguard Worker                                 [E5500_GPR_Bypass, E5500_GPR_Bypass]>,
173*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_LdStLoadUpd, [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
174*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E5500_SFX0, E5500_SFX1], 0>,
175*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E5500_LSU_0]>],
176*9880d681SAndroid Build Coastguard Worker                                 [7, 2], // Latency = 3, Repeat rate = 1
177*9880d681SAndroid Build Coastguard Worker                                 [E5500_GPR_Bypass, E5500_GPR_Bypass],
178*9880d681SAndroid Build Coastguard Worker                                 2>, // 2 micro-ops
179*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_LdStLoadUpdX,[InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
180*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E5500_SFX0, E5500_SFX1], 0>,
181*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E5500_LSU_0]>],
182*9880d681SAndroid Build Coastguard Worker                                 [7, 2], // Latency = 3, Repeat rate = 1
183*9880d681SAndroid Build Coastguard Worker                                 [E5500_GPR_Bypass, E5500_GPR_Bypass],
184*9880d681SAndroid Build Coastguard Worker                                 2>, // 2 micro-ops
185*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_LdStLD,      [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
186*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E5500_LSU_0]>],
187*9880d681SAndroid Build Coastguard Worker                                 [7, 2], // Latency = 3, Repeat rate = 1
188*9880d681SAndroid Build Coastguard Worker                                 [E5500_GPR_Bypass, E5500_GPR_Bypass]>,
189*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_LdStLDARX,   [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
190*9880d681SAndroid Build Coastguard Worker                                  InstrStage<3, [E5500_LSU_0]>],
191*9880d681SAndroid Build Coastguard Worker                                 [7, 2], // Latency = 3, Repeat rate = 3
192*9880d681SAndroid Build Coastguard Worker                                 [E5500_GPR_Bypass, E5500_GPR_Bypass]>,
193*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_LdStLDU,     [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
194*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E5500_SFX0, E5500_SFX1], 0>,
195*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E5500_LSU_0]>],
196*9880d681SAndroid Build Coastguard Worker                                 [7, 2], // Latency = 3, Repeat rate = 1
197*9880d681SAndroid Build Coastguard Worker                                 [E5500_GPR_Bypass, E5500_GPR_Bypass],
198*9880d681SAndroid Build Coastguard Worker                                 2>, // 2 micro-ops
199*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_LdStLDUX,    [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
200*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E5500_SFX0, E5500_SFX1], 0>,
201*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E5500_LSU_0]>],
202*9880d681SAndroid Build Coastguard Worker                                 [7, 2], // Latency = 3, Repeat rate = 1
203*9880d681SAndroid Build Coastguard Worker                                 [E5500_GPR_Bypass, E5500_GPR_Bypass],
204*9880d681SAndroid Build Coastguard Worker                                 2>, // 2 micro-ops
205*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_LdStStore,   [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
206*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E5500_LSU_0]>],
207*9880d681SAndroid Build Coastguard Worker                                 [7, 2], // Latency = 3, Repeat rate = 1
208*9880d681SAndroid Build Coastguard Worker                                 [NoBypass, E5500_GPR_Bypass]>,
209*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_LdStStoreUpd,[InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
210*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E5500_SFX0, E5500_SFX1], 0>,
211*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E5500_LSU_0]>],
212*9880d681SAndroid Build Coastguard Worker                                 [7, 2], // Latency = 3, Repeat rate = 1
213*9880d681SAndroid Build Coastguard Worker                                 [NoBypass, E5500_GPR_Bypass],
214*9880d681SAndroid Build Coastguard Worker                                 2>, // 2 micro-ops
215*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_LdStICBI,    [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
216*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E5500_LSU_0]>],
217*9880d681SAndroid Build Coastguard Worker                                 [7, 2], // Latency = 3, Repeat rate = 1
218*9880d681SAndroid Build Coastguard Worker                                 [NoBypass, E5500_GPR_Bypass]>,
219*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_LdStSTFD,    [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
220*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E5500_LSU_0]>],
221*9880d681SAndroid Build Coastguard Worker                                 [7, 2, 2], // Latency = 3, Repeat rate = 1
222*9880d681SAndroid Build Coastguard Worker                                 [E5500_GPR_Bypass,
223*9880d681SAndroid Build Coastguard Worker                                  E5500_GPR_Bypass, E5500_GPR_Bypass]>,
224*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_LdStSTFDU,   [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
225*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E5500_SFX0, E5500_SFX1], 0>,
226*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E5500_LSU_0]>],
227*9880d681SAndroid Build Coastguard Worker                                 [7, 2, 2], // Latency = 3, Repeat rate = 1
228*9880d681SAndroid Build Coastguard Worker                                 [E5500_GPR_Bypass,
229*9880d681SAndroid Build Coastguard Worker                                  E5500_GPR_Bypass, E5500_GPR_Bypass],
230*9880d681SAndroid Build Coastguard Worker                                 2>, // 2 micro-ops
231*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_LdStLFD,     [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
232*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E5500_LSU_0]>],
233*9880d681SAndroid Build Coastguard Worker                                 [8, 2, 2], // Latency = 4, Repeat rate = 1
234*9880d681SAndroid Build Coastguard Worker                                 [E5500_FPR_Bypass,
235*9880d681SAndroid Build Coastguard Worker                                  E5500_GPR_Bypass, E5500_GPR_Bypass],
236*9880d681SAndroid Build Coastguard Worker                                 2>, // 2 micro-ops
237*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_LdStLFDU,    [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
238*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E5500_SFX0, E5500_SFX1], 0>,
239*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E5500_LSU_0]>],
240*9880d681SAndroid Build Coastguard Worker                                 [8, 2, 2], // Latency = 4, Repeat rate = 1
241*9880d681SAndroid Build Coastguard Worker                                 [E5500_FPR_Bypass,
242*9880d681SAndroid Build Coastguard Worker                                  E5500_GPR_Bypass, E5500_GPR_Bypass],
243*9880d681SAndroid Build Coastguard Worker                                 2>, // 2 micro-ops
244*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_LdStLFDUX,   [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
245*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E5500_SFX0, E5500_SFX1], 0>,
246*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E5500_LSU_0]>],
247*9880d681SAndroid Build Coastguard Worker                                 [8, 2, 2], // Latency = 4, Repeat rate = 1
248*9880d681SAndroid Build Coastguard Worker                                 [E5500_FPR_Bypass,
249*9880d681SAndroid Build Coastguard Worker                                  E5500_GPR_Bypass, E5500_GPR_Bypass],
250*9880d681SAndroid Build Coastguard Worker                                 2>, // 2 micro-ops
251*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_LdStLHA,     [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
252*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E5500_LSU_0]>],
253*9880d681SAndroid Build Coastguard Worker                                 [7, 2], // Latency = 3
254*9880d681SAndroid Build Coastguard Worker                                 [E5500_GPR_Bypass, E5500_GPR_Bypass]>,
255*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_LdStLHAU,    [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
256*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E5500_SFX0, E5500_SFX1], 0>,
257*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E5500_LSU_0]>],
258*9880d681SAndroid Build Coastguard Worker                                 [7, 2], // Latency = 3, Repeat rate = 1
259*9880d681SAndroid Build Coastguard Worker                                 [E5500_GPR_Bypass, E5500_GPR_Bypass],
260*9880d681SAndroid Build Coastguard Worker                                 2>, // 2 micro-ops
261*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_LdStLHAUX,   [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
262*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E5500_SFX0, E5500_SFX1], 0>,
263*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E5500_LSU_0]>],
264*9880d681SAndroid Build Coastguard Worker                                 [7, 2], // Latency = 3, Repeat rate = 1
265*9880d681SAndroid Build Coastguard Worker                                 [E5500_GPR_Bypass, E5500_GPR_Bypass],
266*9880d681SAndroid Build Coastguard Worker                                 2>, // 2 micro-ops
267*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_LdStLMW,     [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
268*9880d681SAndroid Build Coastguard Worker                                  InstrStage<4, [E5500_LSU_0]>],
269*9880d681SAndroid Build Coastguard Worker                                 [8, 2], // Latency = r+3, Repeat rate = r+3
270*9880d681SAndroid Build Coastguard Worker                                 [NoBypass, E5500_GPR_Bypass]>,
271*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_LdStLWARX,   [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
272*9880d681SAndroid Build Coastguard Worker                                  InstrStage<3, [E5500_LSU_0]>],
273*9880d681SAndroid Build Coastguard Worker                                 [7, 2, 2], // Latency = 3, Repeat rate = 3
274*9880d681SAndroid Build Coastguard Worker                                 [E5500_GPR_Bypass,
275*9880d681SAndroid Build Coastguard Worker                                  E5500_GPR_Bypass, E5500_GPR_Bypass]>,
276*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_LdStSTD,     [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
277*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E5500_LSU_0]>],
278*9880d681SAndroid Build Coastguard Worker                                 [7, 2], // Latency = 3, Repeat rate = 1
279*9880d681SAndroid Build Coastguard Worker                                 [NoBypass, E5500_GPR_Bypass]>,
280*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_LdStSTDCX,   [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
281*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E5500_LSU_0]>],
282*9880d681SAndroid Build Coastguard Worker                                 [7, 2], // Latency = 3, Repeat rate = 1
283*9880d681SAndroid Build Coastguard Worker                                 [NoBypass, E5500_GPR_Bypass]>,
284*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_LdStSTDU,    [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
285*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E5500_SFX0, E5500_SFX1], 0>,
286*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E5500_LSU_0]>],
287*9880d681SAndroid Build Coastguard Worker                                 [7, 2], // Latency = 3, Repeat rate = 1
288*9880d681SAndroid Build Coastguard Worker                                 [NoBypass, E5500_GPR_Bypass],
289*9880d681SAndroid Build Coastguard Worker                                 2>, // 2 micro-ops
290*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_LdStSTDUX,   [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
291*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E5500_SFX0, E5500_SFX1], 0>,
292*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E5500_LSU_0]>],
293*9880d681SAndroid Build Coastguard Worker                                 [7, 2], // Latency = 3, Repeat rate = 1
294*9880d681SAndroid Build Coastguard Worker                                 [NoBypass, E5500_GPR_Bypass],
295*9880d681SAndroid Build Coastguard Worker                                 2>, // 2 micro-ops
296*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_LdStSTWCX,   [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
297*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E5500_LSU_0]>],
298*9880d681SAndroid Build Coastguard Worker                                 [7, 2], // Latency = 3, Repeat rate = 1
299*9880d681SAndroid Build Coastguard Worker                                 [NoBypass, E5500_GPR_Bypass]>,
300*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_LdStSync,    [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
301*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E5500_LSU_0]>]>,
302*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_SprMTMSR,    [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
303*9880d681SAndroid Build Coastguard Worker                                  InstrStage<2, [E5500_CFX_0]>],
304*9880d681SAndroid Build Coastguard Worker                                 [6, 2], // Latency = 2, Repeat rate = 4
305*9880d681SAndroid Build Coastguard Worker                                 [E5500_GPR_Bypass, E5500_GPR_Bypass]>,
306*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_SprTLBSYNC,  [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
307*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E5500_LSU_0], 0>]>,
308*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_SprMFCR,     [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
309*9880d681SAndroid Build Coastguard Worker                                  InstrStage<5, [E5500_CFX_0]>],
310*9880d681SAndroid Build Coastguard Worker                                 [9, 2], // Latency = 5, Repeat rate = 5
311*9880d681SAndroid Build Coastguard Worker                                 [E5500_GPR_Bypass, E5500_CR_Bypass]>,
312*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_SprMFCRF,    [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
313*9880d681SAndroid Build Coastguard Worker                                  InstrStage<5, [E5500_CFX_0]>],
314*9880d681SAndroid Build Coastguard Worker                                 [9, 2], // Latency = 5, Repeat rate = 5
315*9880d681SAndroid Build Coastguard Worker                                 [E5500_GPR_Bypass, E5500_CR_Bypass]>,
316*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_SprMFMSR,    [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
317*9880d681SAndroid Build Coastguard Worker                                  InstrStage<4, [E5500_SFX0]>],
318*9880d681SAndroid Build Coastguard Worker                                 [8, 2], // Latency = 4, Repeat rate = 4
319*9880d681SAndroid Build Coastguard Worker                                 [E5500_GPR_Bypass, E5500_GPR_Bypass]>,
320*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_SprMFSPR,    [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
321*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E5500_CFX_0]>],
322*9880d681SAndroid Build Coastguard Worker                                 [5], // Latency = 1, Repeat rate = 1
323*9880d681SAndroid Build Coastguard Worker                                 [E5500_GPR_Bypass]>,
324*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_SprMFTB,     [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
325*9880d681SAndroid Build Coastguard Worker                                  InstrStage<4, [E5500_CFX_0]>],
326*9880d681SAndroid Build Coastguard Worker                                 [8, 2], // Latency = 4, Repeat rate = 4
327*9880d681SAndroid Build Coastguard Worker                                 [NoBypass, E5500_GPR_Bypass]>,
328*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_SprMTSPR,    [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
329*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E5500_SFX0, E5500_SFX1]>],
330*9880d681SAndroid Build Coastguard Worker                                 [5], // Latency = 1, Repeat rate = 1
331*9880d681SAndroid Build Coastguard Worker                                 [E5500_GPR_Bypass]>,
332*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_FPGeneral,   [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
333*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E5500_FPU_0]>],
334*9880d681SAndroid Build Coastguard Worker                                 [11, 2, 2], // Latency = 7, Repeat rate = 1
335*9880d681SAndroid Build Coastguard Worker                                 [E5500_FPR_Bypass,
336*9880d681SAndroid Build Coastguard Worker                                  E5500_FPR_Bypass, E5500_FPR_Bypass]>,
337*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_FPAddSub,    [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
338*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E5500_FPU_0]>],
339*9880d681SAndroid Build Coastguard Worker                                 [11, 2, 2], // Latency = 7, Repeat rate = 1
340*9880d681SAndroid Build Coastguard Worker                                 [E5500_FPR_Bypass,
341*9880d681SAndroid Build Coastguard Worker                                  E5500_FPR_Bypass, E5500_FPR_Bypass]>,
342*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_FPCompare,   [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
343*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E5500_FPU_0]>],
344*9880d681SAndroid Build Coastguard Worker                                 [11, 2, 2], // Latency = 7, Repeat rate = 1
345*9880d681SAndroid Build Coastguard Worker                                 [E5500_CR_Bypass,
346*9880d681SAndroid Build Coastguard Worker                                  E5500_FPR_Bypass, E5500_FPR_Bypass]>,
347*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_FPDivD,      [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
348*9880d681SAndroid Build Coastguard Worker                                  InstrStage<31, [E5500_FPU_0]>],
349*9880d681SAndroid Build Coastguard Worker                                 [39, 2, 2], // Latency = 35, Repeat rate = 31
350*9880d681SAndroid Build Coastguard Worker                                 [E5500_FPR_Bypass,
351*9880d681SAndroid Build Coastguard Worker                                  E5500_FPR_Bypass, E5500_FPR_Bypass]>,
352*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_FPDivS,      [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
353*9880d681SAndroid Build Coastguard Worker                                  InstrStage<16, [E5500_FPU_0]>],
354*9880d681SAndroid Build Coastguard Worker                                 [24, 2, 2], // Latency = 20, Repeat rate = 16
355*9880d681SAndroid Build Coastguard Worker                                 [E5500_FPR_Bypass,
356*9880d681SAndroid Build Coastguard Worker                                  E5500_FPR_Bypass, E5500_FPR_Bypass]>,
357*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_FPFused,     [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
358*9880d681SAndroid Build Coastguard Worker                                  InstrStage<1, [E5500_FPU_0]>],
359*9880d681SAndroid Build Coastguard Worker                                 [11, 2, 2, 2], // Latency = 7, Repeat rate = 1
360*9880d681SAndroid Build Coastguard Worker                                 [E5500_FPR_Bypass,
361*9880d681SAndroid Build Coastguard Worker                                  E5500_FPR_Bypass, E5500_FPR_Bypass,
362*9880d681SAndroid Build Coastguard Worker                                  E5500_FPR_Bypass]>,
363*9880d681SAndroid Build Coastguard Worker  InstrItinData<IIC_FPRes,       [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
364*9880d681SAndroid Build Coastguard Worker                                  InstrStage<2, [E5500_FPU_0]>],
365*9880d681SAndroid Build Coastguard Worker                                 [12, 2], // Latency = 8, Repeat rate = 2
366*9880d681SAndroid Build Coastguard Worker                                 [E5500_FPR_Bypass, E5500_FPR_Bypass]>
367*9880d681SAndroid Build Coastguard Worker]>;
368*9880d681SAndroid Build Coastguard Worker
369*9880d681SAndroid Build Coastguard Worker// ===---------------------------------------------------------------------===//
370*9880d681SAndroid Build Coastguard Worker// e5500 machine model for scheduling and other instruction cost heuristics.
371*9880d681SAndroid Build Coastguard Worker
372*9880d681SAndroid Build Coastguard Workerdef PPCE5500Model : SchedMachineModel {
373*9880d681SAndroid Build Coastguard Worker  let IssueWidth = 2;  // 2 micro-ops are dispatched per cycle.
374*9880d681SAndroid Build Coastguard Worker  let LoadLatency = 6; // Optimistic load latency assuming bypass.
375*9880d681SAndroid Build Coastguard Worker                       // This is overriden by OperandCycles if the
376*9880d681SAndroid Build Coastguard Worker                       // Itineraries are queried instead.
377*9880d681SAndroid Build Coastguard Worker
378*9880d681SAndroid Build Coastguard Worker  let CompleteModel = 0;
379*9880d681SAndroid Build Coastguard Worker
380*9880d681SAndroid Build Coastguard Worker  let Itineraries = PPCE5500Itineraries;
381*9880d681SAndroid Build Coastguard Worker}
382