xref: /freebsd-src/contrib/llvm-project/llvm/lib/Target/PowerPC/PPCSchedule440.td (revision 0b57cec536236d46e3dba9bd041533462f33dbb7)
1*0b57cec5SDimitry Andric//===-- PPCSchedule440.td - PPC 440 Scheduling Definitions -*- tablegen -*-===//
2*0b57cec5SDimitry Andric//
3*0b57cec5SDimitry Andric// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*0b57cec5SDimitry Andric// See https://llvm.org/LICENSE.txt for license information.
5*0b57cec5SDimitry Andric// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*0b57cec5SDimitry Andric//
7*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
8*0b57cec5SDimitry Andric
9*0b57cec5SDimitry Andric// Primary reference:
10*0b57cec5SDimitry Andric// PowerPC 440x6 Embedded Processor Core User's Manual.
11*0b57cec5SDimitry Andric// IBM (as updated in) 2010.
12*0b57cec5SDimitry Andric
13*0b57cec5SDimitry Andric// The basic PPC 440 does not include a floating-point unit; the pipeline
14*0b57cec5SDimitry Andric// timings here are constructed to match the FP2 unit shipped with the
15*0b57cec5SDimitry Andric// PPC-440- and PPC-450-based Blue Gene (L and P) supercomputers.
16*0b57cec5SDimitry Andric// References:
17*0b57cec5SDimitry Andric// S. Chatterjee, et al. Design and exploitation of a high-performance
18*0b57cec5SDimitry Andric// SIMD floating-point unit for Blue Gene/L.
19*0b57cec5SDimitry Andric// IBM J. Res. & Dev. 49 (2/3) March/May 2005.
20*0b57cec5SDimitry Andric// also:
21*0b57cec5SDimitry Andric// Carlos Sosa and Brant Knudson. IBM System Blue Gene Solution:
22*0b57cec5SDimitry Andric// Blue Gene/P Application Development.
23*0b57cec5SDimitry Andric// IBM (as updated in) 2009.
24*0b57cec5SDimitry Andric
25*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
26*0b57cec5SDimitry Andric// Functional units on the PowerPC 440/450 chip sets
27*0b57cec5SDimitry Andric//
28*0b57cec5SDimitry Andricdef P440_DISS1  : FuncUnit; // Issue unit 1
29*0b57cec5SDimitry Andricdef P440_DISS2  : FuncUnit; // Issue unit 2
30*0b57cec5SDimitry Andricdef P440_LRACC  : FuncUnit; // Register access and dispatch for
31*0b57cec5SDimitry Andric                            // the simple integer (J-pipe) and
32*0b57cec5SDimitry Andric                            // load/store (L-pipe) pipelines
33*0b57cec5SDimitry Andricdef P440_IRACC  : FuncUnit; // Register access and dispatch for
34*0b57cec5SDimitry Andric                            // the complex integer (I-pipe) pipeline
35*0b57cec5SDimitry Andricdef P440_FRACC  : FuncUnit; // Register access and dispatch for
36*0b57cec5SDimitry Andric                            // the floating-point execution (F-pipe) pipeline
37*0b57cec5SDimitry Andricdef P440_IEXE1  : FuncUnit; // Execution stage 1 for the I pipeline
38*0b57cec5SDimitry Andricdef P440_IEXE2  : FuncUnit; // Execution stage 2 for the I pipeline
39*0b57cec5SDimitry Andricdef P440_IWB    : FuncUnit; // Write-back unit for the I pipeline
40*0b57cec5SDimitry Andricdef P440_JEXE1  : FuncUnit; // Execution stage 1 for the J pipeline
41*0b57cec5SDimitry Andricdef P440_JEXE2  : FuncUnit; // Execution stage 2 for the J pipeline
42*0b57cec5SDimitry Andricdef P440_JWB    : FuncUnit; // Write-back unit for the J pipeline
43*0b57cec5SDimitry Andricdef P440_AGEN   : FuncUnit; // Address generation for the L pipeline
44*0b57cec5SDimitry Andricdef P440_CRD    : FuncUnit; // D-cache access for the L pipeline
45*0b57cec5SDimitry Andricdef P440_LWB    : FuncUnit; // Write-back unit for the L pipeline
46*0b57cec5SDimitry Andricdef P440_FEXE1  : FuncUnit; // Execution stage 1 for the F pipeline
47*0b57cec5SDimitry Andricdef P440_FEXE2  : FuncUnit; // Execution stage 2 for the F pipeline
48*0b57cec5SDimitry Andricdef P440_FEXE3  : FuncUnit; // Execution stage 3 for the F pipeline
49*0b57cec5SDimitry Andricdef P440_FEXE4  : FuncUnit; // Execution stage 4 for the F pipeline
50*0b57cec5SDimitry Andricdef P440_FEXE5  : FuncUnit; // Execution stage 5 for the F pipeline
51*0b57cec5SDimitry Andricdef P440_FEXE6  : FuncUnit; // Execution stage 6 for the F pipeline
52*0b57cec5SDimitry Andricdef P440_FWB    : FuncUnit; // Write-back unit for the F pipeline
53*0b57cec5SDimitry Andric
54*0b57cec5SDimitry Andricdef P440_LWARX_Hold : FuncUnit; // This is a pseudo-unit which is used
55*0b57cec5SDimitry Andric                                // to make sure that no lwarx/stwcx.
56*0b57cec5SDimitry Andric                                // instructions are issued while another
57*0b57cec5SDimitry Andric                                // lwarx/stwcx. is in the L pipe.
58*0b57cec5SDimitry Andric
59*0b57cec5SDimitry Andricdef P440_GPR_Bypass : Bypass; // The bypass for general-purpose regs.
60*0b57cec5SDimitry Andricdef P440_FPR_Bypass : Bypass; // The bypass for floating-point regs.
61*0b57cec5SDimitry Andric
62*0b57cec5SDimitry Andric// Notes:
63*0b57cec5SDimitry Andric// Instructions are held in the FRACC, LRACC and IRACC pipeline
64*0b57cec5SDimitry Andric// stages until their source operands become ready. Exceptions:
65*0b57cec5SDimitry Andric//  - Store instructions will hold in the AGEN stage
66*0b57cec5SDimitry Andric//  - The integer multiply-accumulate instruction will hold in
67*0b57cec5SDimitry Andric//    the IEXE1 stage
68*0b57cec5SDimitry Andric//
69*0b57cec5SDimitry Andric// For most I-pipe operations, the result is available at the end of
70*0b57cec5SDimitry Andric// the IEXE1 stage. Operations such as multiply and divide must
71*0b57cec5SDimitry Andric// continue to execute in IEXE2 and IWB. Divide resides in IWB for
72*0b57cec5SDimitry Andric// 33 cycles (multiply also calculates its result in IWB). For all
73*0b57cec5SDimitry Andric// J-pipe instructions, the result is available
74*0b57cec5SDimitry Andric// at the end of the JEXE1 stage. Loads have a 3-cycle latency
75*0b57cec5SDimitry Andric// (data is not available until after the LWB stage).
76*0b57cec5SDimitry Andric//
77*0b57cec5SDimitry Andric// The L1 cache hit latency is four cycles for floating point loads
78*0b57cec5SDimitry Andric// and three cycles for integer loads.
79*0b57cec5SDimitry Andric//
80*0b57cec5SDimitry Andric// The stwcx. instruction requires both the LRACC and the IRACC
81*0b57cec5SDimitry Andric// dispatch stages. It must be issued from DISS0.
82*0b57cec5SDimitry Andric//
83*0b57cec5SDimitry Andric// All lwarx/stwcx. instructions hold in LRACC if another
84*0b57cec5SDimitry Andric// uncommitted lwarx/stwcx. is in AGEN, CRD, or LWB.
85*0b57cec5SDimitry Andric//
86*0b57cec5SDimitry Andric// msync (a.k.a. sync) and mbar will hold in LWB until all load/store
87*0b57cec5SDimitry Andric// resources are empty. AGEN and CRD are held empty until the msync/mbar
88*0b57cec5SDimitry Andric// commits.
89*0b57cec5SDimitry Andric//
90*0b57cec5SDimitry Andric// Most floating-point instructions, computational and move,
91*0b57cec5SDimitry Andric// have a 5-cycle latency. Divide takes longer (30 cycles). Instructions that
92*0b57cec5SDimitry Andric// update the CR take 2 cycles. Stores take 3 cycles and, as mentioned above,
93*0b57cec5SDimitry Andric// loads take 4 cycles (for L1 hit).
94*0b57cec5SDimitry Andric
95*0b57cec5SDimitry Andric//
96*0b57cec5SDimitry Andric// This file defines the itinerary class data for the PPC 440 processor.
97*0b57cec5SDimitry Andric//
98*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
99*0b57cec5SDimitry Andric
100*0b57cec5SDimitry Andric
101*0b57cec5SDimitry Andricdef PPC440Itineraries : ProcessorItineraries<
102*0b57cec5SDimitry Andric  [P440_DISS1, P440_DISS2, P440_FRACC, P440_IRACC, P440_IEXE1, P440_IEXE2,
103*0b57cec5SDimitry Andric   P440_IWB, P440_LRACC, P440_JEXE1, P440_JEXE2, P440_JWB, P440_AGEN, P440_CRD,
104*0b57cec5SDimitry Andric   P440_LWB, P440_FEXE1, P440_FEXE2, P440_FEXE3, P440_FEXE4, P440_FEXE5,
105*0b57cec5SDimitry Andric   P440_FEXE6, P440_FWB, P440_LWARX_Hold],
106*0b57cec5SDimitry Andric  [P440_GPR_Bypass, P440_FPR_Bypass], [
107*0b57cec5SDimitry Andric  InstrItinData<IIC_IntSimple,  [InstrStage<1, [P440_DISS1, P440_DISS2]>,
108*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IRACC, P440_LRACC]>,
109*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IEXE1, P440_JEXE1]>,
110*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IEXE2, P440_JEXE2]>,
111*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IWB, P440_JWB]>],
112*0b57cec5SDimitry Andric                                [2, 0, 0],
113*0b57cec5SDimitry Andric                                [P440_GPR_Bypass,
114*0b57cec5SDimitry Andric                                 P440_GPR_Bypass, P440_GPR_Bypass]>,
115*0b57cec5SDimitry Andric  InstrItinData<IIC_IntGeneral, [InstrStage<1, [P440_DISS1, P440_DISS2]>,
116*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IRACC, P440_LRACC]>,
117*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IEXE1, P440_JEXE1]>,
118*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IEXE2, P440_JEXE2]>,
119*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IWB, P440_JWB]>],
120*0b57cec5SDimitry Andric                                [2, 0, 0],
121*0b57cec5SDimitry Andric                                [P440_GPR_Bypass,
122*0b57cec5SDimitry Andric                                 P440_GPR_Bypass, P440_GPR_Bypass]>,
123*0b57cec5SDimitry Andric  InstrItinData<IIC_IntISEL,    [InstrStage<1, [P440_DISS1, P440_DISS2]>,
124*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IRACC, P440_LRACC]>,
125*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IEXE1, P440_JEXE1]>,
126*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IEXE2, P440_JEXE2]>,
127*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IWB, P440_JWB]>],
128*0b57cec5SDimitry Andric                                [2, 0, 0, 0],
129*0b57cec5SDimitry Andric                                [P440_GPR_Bypass,
130*0b57cec5SDimitry Andric                                 P440_GPR_Bypass, P440_GPR_Bypass, NoBypass]>,
131*0b57cec5SDimitry Andric  InstrItinData<IIC_IntCompare, [InstrStage<1, [P440_DISS1, P440_DISS2]>,
132*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IRACC, P440_LRACC]>,
133*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IEXE1, P440_JEXE1]>,
134*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IEXE2, P440_JEXE2]>,
135*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IWB, P440_JWB]>],
136*0b57cec5SDimitry Andric                                [2, 0, 0],
137*0b57cec5SDimitry Andric                                [NoBypass, P440_GPR_Bypass, P440_GPR_Bypass]>,
138*0b57cec5SDimitry Andric  InstrItinData<IIC_IntDivW,    [InstrStage<1, [P440_DISS1, P440_DISS2]>,
139*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IRACC]>,
140*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IEXE1]>,
141*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IEXE2]>,
142*0b57cec5SDimitry Andric                                 InstrStage<33, [P440_IWB]>],
143*0b57cec5SDimitry Andric                                [36, 0, 0],
144*0b57cec5SDimitry Andric                                [NoBypass, P440_GPR_Bypass, P440_GPR_Bypass]>,
145*0b57cec5SDimitry Andric  InstrItinData<IIC_IntMFFS,    [InstrStage<1, [P440_DISS1, P440_DISS2]>,
146*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IRACC]>,
147*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IEXE1]>,
148*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IEXE2]>,
149*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IWB]>],
150*0b57cec5SDimitry Andric                                [3, 0, 0],
151*0b57cec5SDimitry Andric                                [P440_GPR_Bypass,
152*0b57cec5SDimitry Andric                                 P440_GPR_Bypass, P440_GPR_Bypass]>,
153*0b57cec5SDimitry Andric  InstrItinData<IIC_IntMTFSB0,  [InstrStage<1, [P440_DISS1, P440_DISS2]>,
154*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IRACC]>,
155*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IEXE1]>,
156*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IEXE2]>,
157*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IWB]>],
158*0b57cec5SDimitry Andric                                [3, 0, 0],
159*0b57cec5SDimitry Andric                                [P440_GPR_Bypass,
160*0b57cec5SDimitry Andric                                 P440_GPR_Bypass, P440_GPR_Bypass]>,
161*0b57cec5SDimitry Andric  InstrItinData<IIC_IntMulHW,   [InstrStage<1, [P440_DISS1, P440_DISS2]>,
162*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IRACC]>,
163*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IEXE1]>,
164*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IEXE2]>,
165*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IWB]>],
166*0b57cec5SDimitry Andric                                [4, 0, 0],
167*0b57cec5SDimitry Andric                                [NoBypass, P440_GPR_Bypass, P440_GPR_Bypass]>,
168*0b57cec5SDimitry Andric  InstrItinData<IIC_IntMulHWU,  [InstrStage<1, [P440_DISS1, P440_DISS2]>,
169*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IRACC]>,
170*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IEXE1]>,
171*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IEXE2]>,
172*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IWB]>],
173*0b57cec5SDimitry Andric                                [4, 0, 0],
174*0b57cec5SDimitry Andric                                [NoBypass, P440_GPR_Bypass, P440_GPR_Bypass]>,
175*0b57cec5SDimitry Andric  InstrItinData<IIC_IntMulLI,   [InstrStage<1, [P440_DISS1, P440_DISS2]>,
176*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IRACC]>,
177*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IEXE1]>,
178*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IEXE2]>,
179*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IWB]>],
180*0b57cec5SDimitry Andric                                [4, 0, 0],
181*0b57cec5SDimitry Andric                                [NoBypass, P440_GPR_Bypass, P440_GPR_Bypass]>,
182*0b57cec5SDimitry Andric  InstrItinData<IIC_IntRotate,  [InstrStage<1, [P440_DISS1, P440_DISS2]>,
183*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IRACC, P440_LRACC]>,
184*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IEXE1, P440_JEXE1]>,
185*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IEXE2, P440_JEXE2]>,
186*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IWB, P440_JWB]>],
187*0b57cec5SDimitry Andric                                [2, 0, 0],
188*0b57cec5SDimitry Andric                                [P440_GPR_Bypass,
189*0b57cec5SDimitry Andric                                 P440_GPR_Bypass, P440_GPR_Bypass]>,
190*0b57cec5SDimitry Andric  InstrItinData<IIC_IntShift,   [InstrStage<1, [P440_DISS1, P440_DISS2]>,
191*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IRACC, P440_LRACC]>,
192*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IEXE1, P440_JEXE1]>,
193*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IEXE2, P440_JEXE2]>,
194*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IWB, P440_JWB]>],
195*0b57cec5SDimitry Andric                                [2, 0, 0],
196*0b57cec5SDimitry Andric                                [P440_GPR_Bypass,
197*0b57cec5SDimitry Andric                                 P440_GPR_Bypass, P440_GPR_Bypass]>,
198*0b57cec5SDimitry Andric  InstrItinData<IIC_IntTrapW,   [InstrStage<1, [P440_DISS1, P440_DISS2]>,
199*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IRACC]>,
200*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IEXE1]>,
201*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IEXE2]>,
202*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IWB]>],
203*0b57cec5SDimitry Andric                                [2, 0],
204*0b57cec5SDimitry Andric                                [P440_GPR_Bypass, P440_GPR_Bypass]>,
205*0b57cec5SDimitry Andric  InstrItinData<IIC_BrB,        [InstrStage<1, [P440_DISS1, P440_DISS2]>,
206*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IRACC]>,
207*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IEXE1]>,
208*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IEXE2]>,
209*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IWB]>],
210*0b57cec5SDimitry Andric                                [4, 0],
211*0b57cec5SDimitry Andric                                [NoBypass, P440_GPR_Bypass]>,
212*0b57cec5SDimitry Andric  InstrItinData<IIC_BrCR,       [InstrStage<1, [P440_DISS1, P440_DISS2]>,
213*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IRACC]>,
214*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IEXE1]>,
215*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IEXE2]>,
216*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IWB]>],
217*0b57cec5SDimitry Andric                                [4, 0, 0],
218*0b57cec5SDimitry Andric                                [NoBypass, P440_GPR_Bypass, P440_GPR_Bypass]>,
219*0b57cec5SDimitry Andric  InstrItinData<IIC_BrMCR,      [InstrStage<1, [P440_DISS1, P440_DISS2]>,
220*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IRACC]>,
221*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IEXE1]>,
222*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IEXE2]>,
223*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IWB]>],
224*0b57cec5SDimitry Andric                                [4, 0, 0],
225*0b57cec5SDimitry Andric                                [NoBypass, P440_GPR_Bypass, P440_GPR_Bypass]>,
226*0b57cec5SDimitry Andric  InstrItinData<IIC_BrMCRX,     [InstrStage<1, [P440_DISS1, P440_DISS2]>,
227*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IRACC]>,
228*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IEXE1]>,
229*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IEXE2]>,
230*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IWB]>],
231*0b57cec5SDimitry Andric                                [4, 0, 0],
232*0b57cec5SDimitry Andric                                [NoBypass, P440_GPR_Bypass, P440_GPR_Bypass]>,
233*0b57cec5SDimitry Andric  InstrItinData<IIC_LdStDCBA,   [InstrStage<1, [P440_DISS1, P440_DISS2]>,
234*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_LRACC]>,
235*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_AGEN]>,
236*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_CRD]>,
237*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_LWB]>],
238*0b57cec5SDimitry Andric                                [1, 1],
239*0b57cec5SDimitry Andric                                [NoBypass, P440_GPR_Bypass]>,
240*0b57cec5SDimitry Andric  InstrItinData<IIC_LdStDCBF,   [InstrStage<1, [P440_DISS1, P440_DISS2]>,
241*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_LRACC]>,
242*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_AGEN]>,
243*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_CRD]>,
244*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_LWB]>],
245*0b57cec5SDimitry Andric                                [1, 1],
246*0b57cec5SDimitry Andric                                [NoBypass, P440_GPR_Bypass]>,
247*0b57cec5SDimitry Andric  InstrItinData<IIC_LdStDCBI,   [InstrStage<1, [P440_DISS1, P440_DISS2]>,
248*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_LRACC]>,
249*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_AGEN]>,
250*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_CRD]>,
251*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_LWB]>],
252*0b57cec5SDimitry Andric                                [1, 1],
253*0b57cec5SDimitry Andric                                [NoBypass, P440_GPR_Bypass]>,
254*0b57cec5SDimitry Andric  InstrItinData<IIC_LdStLoad,   [InstrStage<1, [P440_DISS1, P440_DISS2]>,
255*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_LRACC]>,
256*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_AGEN]>,
257*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_CRD]>,
258*0b57cec5SDimitry Andric                                 InstrStage<2, [P440_LWB]>],
259*0b57cec5SDimitry Andric                                [5, 1, 1],
260*0b57cec5SDimitry Andric                                [P440_GPR_Bypass, P440_GPR_Bypass]>,
261*0b57cec5SDimitry Andric  InstrItinData<IIC_LdStLoadUpd,[InstrStage<1, [P440_DISS1, P440_DISS2]>,
262*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_LRACC]>,
263*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_AGEN]>,
264*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_CRD]>,
265*0b57cec5SDimitry Andric                                 InstrStage<2, [P440_LWB]>],
266*0b57cec5SDimitry Andric                                [5, 2, 1, 1],
267*0b57cec5SDimitry Andric                                [P440_GPR_Bypass, P440_GPR_Bypass]>,
268*0b57cec5SDimitry Andric  InstrItinData<IIC_LdStLoadUpdX,[InstrStage<1, [P440_DISS1, P440_DISS2]>,
269*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_LRACC]>,
270*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_AGEN]>,
271*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_CRD]>,
272*0b57cec5SDimitry Andric                                 InstrStage<2, [P440_LWB]>],
273*0b57cec5SDimitry Andric                                [5, 2, 1, 1],
274*0b57cec5SDimitry Andric                                [P440_GPR_Bypass, P440_GPR_Bypass]>,
275*0b57cec5SDimitry Andric  InstrItinData<IIC_LdStStore,  [InstrStage<1, [P440_DISS1, P440_DISS2]>,
276*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_LRACC]>,
277*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_AGEN]>,
278*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_CRD]>,
279*0b57cec5SDimitry Andric                                 InstrStage<2, [P440_LWB]>],
280*0b57cec5SDimitry Andric                                [1, 1, 1],
281*0b57cec5SDimitry Andric                                [NoBypass, P440_GPR_Bypass]>,
282*0b57cec5SDimitry Andric  InstrItinData<IIC_LdStICBI,   [InstrStage<1, [P440_DISS1, P440_DISS2]>,
283*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_LRACC]>,
284*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_AGEN]>,
285*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_CRD]>,
286*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_LWB]>],
287*0b57cec5SDimitry Andric                                [4, 1, 1],
288*0b57cec5SDimitry Andric                                [NoBypass, P440_GPR_Bypass]>,
289*0b57cec5SDimitry Andric  InstrItinData<IIC_LdStSTFD,   [InstrStage<1, [P440_DISS1, P440_DISS2]>,
290*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_LRACC]>,
291*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_AGEN]>,
292*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_CRD]>,
293*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_LWB]>],
294*0b57cec5SDimitry Andric                                [1, 1, 1],
295*0b57cec5SDimitry Andric                                [NoBypass, P440_GPR_Bypass, P440_GPR_Bypass]>,
296*0b57cec5SDimitry Andric  InstrItinData<IIC_LdStSTFDU,  [InstrStage<1, [P440_DISS1, P440_DISS2]>,
297*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_LRACC]>,
298*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_AGEN]>,
299*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_CRD]>,
300*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_LWB]>],
301*0b57cec5SDimitry Andric                                [2, 1, 1, 1],
302*0b57cec5SDimitry Andric                                [NoBypass, P440_GPR_Bypass, P440_GPR_Bypass]>,
303*0b57cec5SDimitry Andric  InstrItinData<IIC_LdStLFD,    [InstrStage<1, [P440_DISS1, P440_DISS2]>,
304*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_LRACC]>,
305*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_AGEN]>,
306*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_CRD]>,
307*0b57cec5SDimitry Andric                                 InstrStage<2, [P440_LWB]>],
308*0b57cec5SDimitry Andric                                [5, 1, 1],
309*0b57cec5SDimitry Andric                                [NoBypass, P440_GPR_Bypass, P440_GPR_Bypass]>,
310*0b57cec5SDimitry Andric  InstrItinData<IIC_LdStLFDU,   [InstrStage<1, [P440_DISS1, P440_DISS2]>,
311*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_LRACC]>,
312*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_AGEN]>,
313*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_CRD]>,
314*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_LWB]>],
315*0b57cec5SDimitry Andric                                [5, 2, 1, 1],
316*0b57cec5SDimitry Andric                                [NoBypass, P440_GPR_Bypass, P440_GPR_Bypass]>,
317*0b57cec5SDimitry Andric  InstrItinData<IIC_LdStLFDUX,  [InstrStage<1, [P440_DISS1, P440_DISS2]>,
318*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_LRACC]>,
319*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_AGEN]>,
320*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_CRD]>,
321*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_LWB]>],
322*0b57cec5SDimitry Andric                                [5, 2, 1, 1],
323*0b57cec5SDimitry Andric                                [NoBypass, P440_GPR_Bypass, P440_GPR_Bypass]>,
324*0b57cec5SDimitry Andric  InstrItinData<IIC_LdStLHA,    [InstrStage<1, [P440_DISS1, P440_DISS2]>,
325*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_LRACC]>,
326*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_AGEN]>,
327*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_CRD]>,
328*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_LWB]>],
329*0b57cec5SDimitry Andric                                [4, 1, 1],
330*0b57cec5SDimitry Andric                                [NoBypass, P440_GPR_Bypass]>,
331*0b57cec5SDimitry Andric  InstrItinData<IIC_LdStLHAU,   [InstrStage<1, [P440_DISS1, P440_DISS2]>,
332*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_LRACC]>,
333*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_AGEN]>,
334*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_CRD]>,
335*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_LWB]>],
336*0b57cec5SDimitry Andric                                [4, 1, 1],
337*0b57cec5SDimitry Andric                                [NoBypass, P440_GPR_Bypass]>,
338*0b57cec5SDimitry Andric  InstrItinData<IIC_LdStLHAUX,  [InstrStage<1, [P440_DISS1, P440_DISS2]>,
339*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_LRACC]>,
340*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_AGEN]>,
341*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_CRD]>,
342*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_LWB]>],
343*0b57cec5SDimitry Andric                                [4, 1, 1],
344*0b57cec5SDimitry Andric                                [NoBypass, P440_GPR_Bypass]>,
345*0b57cec5SDimitry Andric  InstrItinData<IIC_LdStLMW,    [InstrStage<1, [P440_DISS1, P440_DISS2]>,
346*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_LRACC]>,
347*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_AGEN]>,
348*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_CRD]>,
349*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_LWB]>],
350*0b57cec5SDimitry Andric                                [4, 1, 1],
351*0b57cec5SDimitry Andric                                [NoBypass, P440_GPR_Bypass]>,
352*0b57cec5SDimitry Andric  InstrItinData<IIC_LdStLWARX,  [InstrStage<1, [P440_DISS1]>,
353*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IRACC], 0>,
354*0b57cec5SDimitry Andric                                 InstrStage<4, [P440_LWARX_Hold], 0>,
355*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_LRACC]>,
356*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_AGEN]>,
357*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_CRD]>,
358*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_LWB]>],
359*0b57cec5SDimitry Andric                                [4, 1, 1],
360*0b57cec5SDimitry Andric                                [NoBypass, P440_GPR_Bypass]>,
361*0b57cec5SDimitry Andric  InstrItinData<IIC_LdStSTD,    [InstrStage<1, [P440_DISS1, P440_DISS2]>,
362*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_LRACC]>,
363*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_AGEN]>,
364*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_CRD]>,
365*0b57cec5SDimitry Andric                                 InstrStage<2, [P440_LWB]>],
366*0b57cec5SDimitry Andric                                [4, 1, 1],
367*0b57cec5SDimitry Andric                                [NoBypass, P440_GPR_Bypass]>,
368*0b57cec5SDimitry Andric  InstrItinData<IIC_LdStSTU,    [InstrStage<1, [P440_DISS1, P440_DISS2]>,
369*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_LRACC]>,
370*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_AGEN]>,
371*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_CRD]>,
372*0b57cec5SDimitry Andric                                 InstrStage<2, [P440_LWB]>],
373*0b57cec5SDimitry Andric                                [2, 1, 1, 1],
374*0b57cec5SDimitry Andric                                [NoBypass, P440_GPR_Bypass]>,
375*0b57cec5SDimitry Andric  InstrItinData<IIC_LdStSTUX,   [InstrStage<1, [P440_DISS1, P440_DISS2]>,
376*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_LRACC]>,
377*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_AGEN]>,
378*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_CRD]>,
379*0b57cec5SDimitry Andric                                 InstrStage<2, [P440_LWB]>],
380*0b57cec5SDimitry Andric                                [2, 1, 1, 1],
381*0b57cec5SDimitry Andric                                [NoBypass, P440_GPR_Bypass]>,
382*0b57cec5SDimitry Andric  InstrItinData<IIC_LdStSTDCX,  [InstrStage<1, [P440_DISS1]>,
383*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IRACC], 0>,
384*0b57cec5SDimitry Andric                                 InstrStage<4, [P440_LWARX_Hold], 0>,
385*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_LRACC]>,
386*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_AGEN]>,
387*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_CRD]>,
388*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_LWB]>],
389*0b57cec5SDimitry Andric                                [4, 1, 1],
390*0b57cec5SDimitry Andric                                [NoBypass, P440_GPR_Bypass]>,
391*0b57cec5SDimitry Andric  InstrItinData<IIC_LdStSTWCX,  [InstrStage<1, [P440_DISS1]>,
392*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IRACC], 0>,
393*0b57cec5SDimitry Andric                                 InstrStage<4, [P440_LWARX_Hold], 0>,
394*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_LRACC]>,
395*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_AGEN]>,
396*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_CRD]>,
397*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_LWB]>],
398*0b57cec5SDimitry Andric                                [4, 1, 1],
399*0b57cec5SDimitry Andric                                [NoBypass, P440_GPR_Bypass]>,
400*0b57cec5SDimitry Andric  InstrItinData<IIC_LdStSync,   [InstrStage<1, [P440_DISS1, P440_DISS2]>,
401*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_LRACC]>,
402*0b57cec5SDimitry Andric                                 InstrStage<3, [P440_AGEN], 1>,
403*0b57cec5SDimitry Andric                                 InstrStage<2, [P440_CRD],  1>,
404*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_LWB]>]>,
405*0b57cec5SDimitry Andric  InstrItinData<IIC_SprISYNC,   [InstrStage<1, [P440_DISS1, P440_DISS2]>,
406*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_FRACC], 0>,
407*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_LRACC], 0>,
408*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IRACC]>,
409*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_FEXE1], 0>,
410*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_AGEN],  0>,
411*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_JEXE1], 0>,
412*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IEXE1]>,
413*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_FEXE2], 0>,
414*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_CRD],   0>,
415*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_JEXE2], 0>,
416*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IEXE2]>,
417*0b57cec5SDimitry Andric                                 InstrStage<6, [P440_FEXE3], 0>,
418*0b57cec5SDimitry Andric                                 InstrStage<6, [P440_LWB],   0>,
419*0b57cec5SDimitry Andric                                 InstrStage<6, [P440_JWB],   0>,
420*0b57cec5SDimitry Andric                                 InstrStage<6, [P440_IWB]>]>,
421*0b57cec5SDimitry Andric  InstrItinData<IIC_SprMFSR,    [InstrStage<1, [P440_DISS1, P440_DISS2]>,
422*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IRACC]>,
423*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IEXE1]>,
424*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IEXE2]>,
425*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IWB]>],
426*0b57cec5SDimitry Andric                                [2, 0],
427*0b57cec5SDimitry Andric                                [P440_GPR_Bypass, P440_GPR_Bypass]>,
428*0b57cec5SDimitry Andric  InstrItinData<IIC_SprMTMSR,   [InstrStage<1, [P440_DISS1, P440_DISS2]>,
429*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IRACC]>,
430*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IEXE1]>,
431*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IEXE2]>,
432*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IWB]>],
433*0b57cec5SDimitry Andric                                [2, 0],
434*0b57cec5SDimitry Andric                                [P440_GPR_Bypass, P440_GPR_Bypass]>,
435*0b57cec5SDimitry Andric  InstrItinData<IIC_SprMTSR,    [InstrStage<1, [P440_DISS1, P440_DISS2]>,
436*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IRACC]>,
437*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IEXE1]>,
438*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IEXE2]>,
439*0b57cec5SDimitry Andric                                 InstrStage<3, [P440_IWB]>],
440*0b57cec5SDimitry Andric                                [5, 0],
441*0b57cec5SDimitry Andric                                [NoBypass, P440_GPR_Bypass]>,
442*0b57cec5SDimitry Andric  InstrItinData<IIC_SprTLBSYNC, [InstrStage<1, [P440_DISS1, P440_DISS2]>,
443*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IRACC]>,
444*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IEXE1]>,
445*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IEXE2]>,
446*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IWB]>]>,
447*0b57cec5SDimitry Andric  InstrItinData<IIC_SprMFCR,    [InstrStage<1, [P440_DISS1, P440_DISS2]>,
448*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IRACC]>,
449*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IEXE1]>,
450*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IEXE2]>,
451*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IWB]>],
452*0b57cec5SDimitry Andric                                [4, 0],
453*0b57cec5SDimitry Andric                                [NoBypass, P440_GPR_Bypass]>,
454*0b57cec5SDimitry Andric  InstrItinData<IIC_SprMFMSR,   [InstrStage<1, [P440_DISS1, P440_DISS2]>,
455*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IRACC]>,
456*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IEXE1]>,
457*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IEXE2]>,
458*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IWB]>],
459*0b57cec5SDimitry Andric                                [3, 0],
460*0b57cec5SDimitry Andric                                [P440_GPR_Bypass, P440_GPR_Bypass]>,
461*0b57cec5SDimitry Andric  InstrItinData<IIC_SprMFSPR,   [InstrStage<1, [P440_DISS1, P440_DISS2]>,
462*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IRACC]>,
463*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IEXE1]>,
464*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IEXE2]>,
465*0b57cec5SDimitry Andric                                 InstrStage<3, [P440_IWB]>],
466*0b57cec5SDimitry Andric                                [6, 0],
467*0b57cec5SDimitry Andric                                [NoBypass, P440_GPR_Bypass]>,
468*0b57cec5SDimitry Andric  InstrItinData<IIC_SprMFTB,    [InstrStage<1, [P440_DISS1, P440_DISS2]>,
469*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IRACC]>,
470*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IEXE1]>,
471*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IEXE2]>,
472*0b57cec5SDimitry Andric                                 InstrStage<3, [P440_IWB]>],
473*0b57cec5SDimitry Andric                                [6, 0],
474*0b57cec5SDimitry Andric                                [NoBypass, P440_GPR_Bypass]>,
475*0b57cec5SDimitry Andric  InstrItinData<IIC_SprMTSPR,   [InstrStage<1, [P440_DISS1, P440_DISS2]>,
476*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IRACC]>,
477*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IEXE1]>,
478*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IEXE2]>,
479*0b57cec5SDimitry Andric                                 InstrStage<3, [P440_IWB]>],
480*0b57cec5SDimitry Andric                                [6, 0],
481*0b57cec5SDimitry Andric                                [NoBypass, P440_GPR_Bypass]>,
482*0b57cec5SDimitry Andric  InstrItinData<IIC_SprMTSRIN,  [InstrStage<1, [P440_DISS1, P440_DISS2]>,
483*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IRACC]>,
484*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IEXE1]>,
485*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IEXE2]>,
486*0b57cec5SDimitry Andric                                 InstrStage<3, [P440_IWB]>],
487*0b57cec5SDimitry Andric                                [6, 0],
488*0b57cec5SDimitry Andric                                [NoBypass, P440_GPR_Bypass]>,
489*0b57cec5SDimitry Andric  InstrItinData<IIC_SprRFI,     [InstrStage<1, [P440_DISS1, P440_DISS2]>,
490*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IRACC]>,
491*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IEXE1]>,
492*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IEXE2]>,
493*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IWB]>],
494*0b57cec5SDimitry Andric                                [4, 0],
495*0b57cec5SDimitry Andric                                [NoBypass, P440_GPR_Bypass]>,
496*0b57cec5SDimitry Andric  InstrItinData<IIC_SprSC,      [InstrStage<1, [P440_DISS1, P440_DISS2]>,
497*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IRACC]>,
498*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IEXE1]>,
499*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IEXE2]>,
500*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_IWB]>],
501*0b57cec5SDimitry Andric                                [4, 0],
502*0b57cec5SDimitry Andric                                [NoBypass, P440_GPR_Bypass]>,
503*0b57cec5SDimitry Andric  InstrItinData<IIC_FPGeneral,  [InstrStage<1, [P440_DISS1, P440_DISS2]>,
504*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_FRACC]>,
505*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_FEXE1]>,
506*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_FEXE2]>,
507*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_FEXE3]>,
508*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_FEXE4]>,
509*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_FEXE5]>,
510*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_FEXE6]>,
511*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_FWB]>],
512*0b57cec5SDimitry Andric                                [6, 0, 0],
513*0b57cec5SDimitry Andric                                [P440_FPR_Bypass,
514*0b57cec5SDimitry Andric                                 P440_FPR_Bypass, P440_FPR_Bypass]>,
515*0b57cec5SDimitry Andric  InstrItinData<IIC_FPAddSub,   [InstrStage<1, [P440_DISS1, P440_DISS2]>,
516*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_FRACC]>,
517*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_FEXE1]>,
518*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_FEXE2]>,
519*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_FEXE3]>,
520*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_FEXE4]>,
521*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_FEXE5]>,
522*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_FEXE6]>,
523*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_FWB]>],
524*0b57cec5SDimitry Andric                                [6, 0, 0],
525*0b57cec5SDimitry Andric                                [P440_FPR_Bypass,
526*0b57cec5SDimitry Andric                                 P440_FPR_Bypass, P440_FPR_Bypass]>,
527*0b57cec5SDimitry Andric  InstrItinData<IIC_FPCompare,  [InstrStage<1, [P440_DISS1, P440_DISS2]>,
528*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_FRACC]>,
529*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_FEXE1]>,
530*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_FEXE2]>,
531*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_FEXE3]>,
532*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_FEXE4]>,
533*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_FEXE5]>,
534*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_FEXE6]>,
535*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_FWB]>],
536*0b57cec5SDimitry Andric                                [6, 0, 0],
537*0b57cec5SDimitry Andric                                [P440_FPR_Bypass, P440_FPR_Bypass,
538*0b57cec5SDimitry Andric                                 P440_FPR_Bypass]>,
539*0b57cec5SDimitry Andric  InstrItinData<IIC_FPDivD,     [InstrStage<1, [P440_DISS1, P440_DISS2]>,
540*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_FRACC]>,
541*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_FEXE1]>,
542*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_FEXE2]>,
543*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_FEXE3]>,
544*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_FEXE4]>,
545*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_FEXE5]>,
546*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_FEXE6]>,
547*0b57cec5SDimitry Andric                                 InstrStage<25, [P440_FWB]>],
548*0b57cec5SDimitry Andric                                [31, 0, 0],
549*0b57cec5SDimitry Andric                                [NoBypass, P440_FPR_Bypass, P440_FPR_Bypass]>,
550*0b57cec5SDimitry Andric  InstrItinData<IIC_FPDivS,     [InstrStage<1, [P440_DISS1, P440_DISS2]>,
551*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_FRACC]>,
552*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_FEXE1]>,
553*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_FEXE2]>,
554*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_FEXE3]>,
555*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_FEXE4]>,
556*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_FEXE5]>,
557*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_FEXE6]>,
558*0b57cec5SDimitry Andric                                 InstrStage<13, [P440_FWB]>],
559*0b57cec5SDimitry Andric                                [19, 0, 0],
560*0b57cec5SDimitry Andric                                [NoBypass, P440_FPR_Bypass, P440_FPR_Bypass]>,
561*0b57cec5SDimitry Andric  InstrItinData<IIC_FPFused,    [InstrStage<1, [P440_DISS1, P440_DISS2]>,
562*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_FRACC]>,
563*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_FEXE1]>,
564*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_FEXE2]>,
565*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_FEXE3]>,
566*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_FEXE4]>,
567*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_FEXE5]>,
568*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_FEXE6]>,
569*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_FWB]>],
570*0b57cec5SDimitry Andric                                [6, 0, 0, 0],
571*0b57cec5SDimitry Andric                                [P440_FPR_Bypass,
572*0b57cec5SDimitry Andric                                 P440_FPR_Bypass, P440_FPR_Bypass,
573*0b57cec5SDimitry Andric                                 P440_FPR_Bypass]>,
574*0b57cec5SDimitry Andric  InstrItinData<IIC_FPRes,      [InstrStage<1, [P440_DISS1, P440_DISS2]>,
575*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_FRACC]>,
576*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_FEXE1]>,
577*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_FEXE2]>,
578*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_FEXE3]>,
579*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_FEXE4]>,
580*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_FEXE5]>,
581*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_FEXE6]>,
582*0b57cec5SDimitry Andric                                 InstrStage<1, [P440_FWB]>],
583*0b57cec5SDimitry Andric                                [6, 0],
584*0b57cec5SDimitry Andric                                [P440_FPR_Bypass, P440_FPR_Bypass]>
585*0b57cec5SDimitry Andric]>;
586*0b57cec5SDimitry Andric
587*0b57cec5SDimitry Andric// ===---------------------------------------------------------------------===//
588*0b57cec5SDimitry Andric// PPC440 machine model for scheduling and other instruction cost heuristics.
589*0b57cec5SDimitry Andric
590*0b57cec5SDimitry Andricdef PPC440Model : SchedMachineModel {
591*0b57cec5SDimitry Andric  let IssueWidth = 2;  // 2 instructions are dispatched per cycle.
592*0b57cec5SDimitry Andric  let LoadLatency = 5; // Optimistic load latency assuming bypass.
593*0b57cec5SDimitry Andric                       // This is overriden by OperandCycles if the
594*0b57cec5SDimitry Andric                       // Itineraries are queried instead.
595*0b57cec5SDimitry Andric
596*0b57cec5SDimitry Andric  let CompleteModel = 0;
597*0b57cec5SDimitry Andric
598*0b57cec5SDimitry Andric  let Itineraries = PPC440Itineraries;
599*0b57cec5SDimitry Andric}
600*0b57cec5SDimitry Andric
601