xref: /llvm-project/llvm/lib/Target/PowerPC/PPCScheduleE5500.td (revision 2946cd701067404b99c39fb29dc9c74bd7193eb3)
1742b535eSHal Finkel//===-- PPCScheduleE500mc.td - e5500 Scheduling Defs -------*- tablegen -*-===//
2742b535eSHal Finkel//
3*2946cd70SChandler Carruth// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*2946cd70SChandler Carruth// See https://llvm.org/LICENSE.txt for license information.
5*2946cd70SChandler Carruth// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6742b535eSHal Finkel//
7742b535eSHal Finkel//===----------------------------------------------------------------------===//
8742b535eSHal Finkel//
9742b535eSHal Finkel// This file defines the itinerary class data for the Freescale e5500 64-bit
10742b535eSHal Finkel// Power processor.
11742b535eSHal Finkel//
12742b535eSHal Finkel// All information is derived from the "e5500 Core Reference Manual",
13742b535eSHal Finkel// Freescale Document Number e5500RM, Rev. 1, 03/2012.
14742b535eSHal Finkel//
15742b535eSHal Finkel//===----------------------------------------------------------------------===//
16742b535eSHal Finkel// Relevant functional units in the Freescale e5500 core
17742b535eSHal Finkel// (These are the same as for the e500mc)
18742b535eSHal Finkel//
19742b535eSHal Finkel//  * Decode & Dispatch
20742b535eSHal Finkel//    Can dispatch up to 2 instructions per clock cycle to either the GPR Issue
21742b535eSHal Finkel//    queues (GIQx), FP Issue Queue (FIQ), or Branch issue queue (BIQ).
2292720ab1SHal Finkeldef E5500_DIS0 : FuncUnit;
2392720ab1SHal Finkeldef E5500_DIS1 : FuncUnit;
24742b535eSHal Finkel
25742b535eSHal Finkel//  * Execute
26742b535eSHal Finkel//    6 pipelined execution units: SFX0, SFX1, BU, FPU, LSU, CFX.
27742b535eSHal Finkel//    The CFX has a bypass path, allowing non-divide instructions to execute
28742b535eSHal Finkel//    while a divide instruction is being executed.
2992720ab1SHal Finkeldef E5500_SFX0  : FuncUnit; // Simple unit 0
3092720ab1SHal Finkeldef E5500_SFX1  : FuncUnit; // Simple unit 1
3192720ab1SHal Finkeldef E5500_BU    : FuncUnit; // Branch unit
3292720ab1SHal Finkeldef E5500_CFX_DivBypass
3392720ab1SHal Finkel                : FuncUnit; // CFX divide bypass path
3492720ab1SHal Finkeldef E5500_CFX_0 : FuncUnit; // CFX pipeline stage 0
35742b535eSHal Finkel
3692720ab1SHal Finkeldef E5500_CFX_1 : FuncUnit; // CFX pipeline stage 1
37742b535eSHal Finkel
3892720ab1SHal Finkeldef E5500_LSU_0 : FuncUnit; // LSU pipeline
3992720ab1SHal Finkeldef E5500_FPU_0 : FuncUnit; // FPU pipeline
40742b535eSHal Finkel
4192720ab1SHal Finkeldef E5500_GPR_Bypass : Bypass;
4292720ab1SHal Finkeldef E5500_FPR_Bypass : Bypass;
4392720ab1SHal Finkeldef E5500_CR_Bypass  : Bypass;
44742b535eSHal Finkel
45742b535eSHal Finkeldef PPCE5500Itineraries : ProcessorItineraries<
4692720ab1SHal Finkel  [E5500_DIS0, E5500_DIS1, E5500_SFX0, E5500_SFX1, E5500_BU,
4792720ab1SHal Finkel   E5500_CFX_DivBypass, E5500_CFX_0, E5500_CFX_1,
4892720ab1SHal Finkel   E5500_LSU_0, E5500_FPU_0],
4992720ab1SHal Finkel  [E5500_CR_Bypass, E5500_GPR_Bypass, E5500_FPR_Bypass], [
5092720ab1SHal Finkel  InstrItinData<IIC_IntSimple,   [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
5192720ab1SHal Finkel                                  InstrStage<1, [E5500_SFX0, E5500_SFX1]>],
52742b535eSHal Finkel                                 [5, 2, 2], // Latency = 1
5392720ab1SHal Finkel                                 [E5500_GPR_Bypass,
5492720ab1SHal Finkel                                  E5500_GPR_Bypass, E5500_GPR_Bypass]>,
5592720ab1SHal Finkel  InstrItinData<IIC_IntGeneral,  [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
5692720ab1SHal Finkel                                  InstrStage<1, [E5500_SFX0, E5500_SFX1]>],
57742b535eSHal Finkel                                 [5, 2, 2], // Latency = 1
5892720ab1SHal Finkel                                 [E5500_GPR_Bypass,
5992720ab1SHal Finkel                                  E5500_GPR_Bypass, E5500_GPR_Bypass]>,
6011d3c561SHal Finkel  InstrItinData<IIC_IntISEL,     [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
6111d3c561SHal Finkel                                  InstrStage<1, [E5500_SFX0, E5500_SFX1]>],
6211d3c561SHal Finkel                                 [5, 2, 2, 2], // Latency = 1
6311d3c561SHal Finkel                                 [E5500_GPR_Bypass,
6411d3c561SHal Finkel                                  E5500_GPR_Bypass, E5500_GPR_Bypass,
6511d3c561SHal Finkel                                  E5500_CR_Bypass]>,
6692720ab1SHal Finkel  InstrItinData<IIC_IntCompare,  [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
6792720ab1SHal Finkel                                  InstrStage<1, [E5500_SFX0, E5500_SFX1]>],
68742b535eSHal Finkel                                 [6, 2, 2], // Latency = 1 or 2
6992720ab1SHal Finkel                                 [E5500_CR_Bypass,
7092720ab1SHal Finkel                                  E5500_GPR_Bypass, E5500_GPR_Bypass]>,
7192720ab1SHal Finkel  InstrItinData<IIC_IntDivD,     [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
7292720ab1SHal Finkel                                  InstrStage<1, [E5500_CFX_0], 0>,
7392720ab1SHal Finkel                                  InstrStage<26, [E5500_CFX_DivBypass]>],
74742b535eSHal Finkel                                 [30, 2, 2], // Latency= 4..26, Repeat rate= 4..26
7592720ab1SHal Finkel                                 [E5500_GPR_Bypass,
7692720ab1SHal Finkel                                  E5500_GPR_Bypass, E5500_GPR_Bypass]>,
7792720ab1SHal Finkel  InstrItinData<IIC_IntDivW,     [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
7892720ab1SHal Finkel                                  InstrStage<1, [E5500_CFX_0], 0>,
7992720ab1SHal Finkel                                  InstrStage<16, [E5500_CFX_DivBypass]>],
80742b535eSHal Finkel                                 [20, 2, 2], // Latency= 4..16, Repeat rate= 4..16
8192720ab1SHal Finkel                                 [E5500_GPR_Bypass,
8292720ab1SHal Finkel                                  E5500_GPR_Bypass, E5500_GPR_Bypass]>,
8392720ab1SHal Finkel  InstrItinData<IIC_IntMFFS,     [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
8492720ab1SHal Finkel                                  InstrStage<1, [E5500_FPU_0]>],
85742b535eSHal Finkel                                 [11], // Latency = 7, Repeat rate = 1
8692720ab1SHal Finkel                                 [E5500_FPR_Bypass]>,
8792720ab1SHal Finkel  InstrItinData<IIC_IntMTFSB0,   [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
8892720ab1SHal Finkel                                  InstrStage<7, [E5500_FPU_0]>],
89742b535eSHal Finkel                                 [11, 2, 2], // Latency = 7, Repeat rate = 7
90742b535eSHal Finkel                                 [NoBypass, NoBypass, NoBypass]>,
9192720ab1SHal Finkel  InstrItinData<IIC_IntMulHD,    [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
9292720ab1SHal Finkel                                  InstrStage<1, [E5500_CFX_0], 0>,
9392720ab1SHal Finkel                                  InstrStage<2, [E5500_CFX_1]>],
94742b535eSHal Finkel                                 [9, 2, 2], // Latency = 4..7, Repeat rate = 2..4
9592720ab1SHal Finkel                                 [E5500_GPR_Bypass,
9692720ab1SHal Finkel                                  E5500_GPR_Bypass, E5500_GPR_Bypass]>,
9792720ab1SHal Finkel  InstrItinData<IIC_IntMulHW,    [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
9892720ab1SHal Finkel                                  InstrStage<1, [E5500_CFX_0], 0>,
9992720ab1SHal Finkel                                  InstrStage<1, [E5500_CFX_1]>],
100742b535eSHal Finkel                                 [8, 2, 2], // Latency = 4, Repeat rate = 1
10192720ab1SHal Finkel                                 [E5500_GPR_Bypass,
10292720ab1SHal Finkel                                  E5500_GPR_Bypass, E5500_GPR_Bypass]>,
10392720ab1SHal Finkel  InstrItinData<IIC_IntMulHWU,   [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
10492720ab1SHal Finkel                                  InstrStage<1, [E5500_CFX_0], 0>,
10592720ab1SHal Finkel                                  InstrStage<1, [E5500_CFX_1]>],
106742b535eSHal Finkel                                 [8, 2, 2], // Latency = 4, Repeat rate = 1
10792720ab1SHal Finkel                                 [E5500_GPR_Bypass,
10892720ab1SHal Finkel                                  E5500_GPR_Bypass, E5500_GPR_Bypass]>,
10992720ab1SHal Finkel  InstrItinData<IIC_IntMulLI,    [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
11092720ab1SHal Finkel                                  InstrStage<1, [E5500_CFX_0], 0>,
11192720ab1SHal Finkel                                  InstrStage<2, [E5500_CFX_1]>],
112742b535eSHal Finkel                                 [8, 2, 2], // Latency = 4 or 5, Repeat = 2
11392720ab1SHal Finkel                                 [E5500_GPR_Bypass,
11492720ab1SHal Finkel                                  E5500_GPR_Bypass, E5500_GPR_Bypass]>,
11592720ab1SHal Finkel  InstrItinData<IIC_IntRotate,   [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
11692720ab1SHal Finkel                                  InstrStage<1, [E5500_SFX0, E5500_SFX1]>],
117742b535eSHal Finkel                                 [5, 2, 2], // Latency = 1
11892720ab1SHal Finkel                                 [E5500_GPR_Bypass,
11992720ab1SHal Finkel                                  E5500_GPR_Bypass, E5500_GPR_Bypass]>,
12092720ab1SHal Finkel  InstrItinData<IIC_IntRotateD,  [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
12192720ab1SHal Finkel                                  InstrStage<2, [E5500_SFX0, E5500_SFX1]>],
122742b535eSHal Finkel                                 [6, 2, 2], // Latency = 2, Repeat rate = 2
12392720ab1SHal Finkel                                 [E5500_GPR_Bypass,
12492720ab1SHal Finkel                                  E5500_GPR_Bypass, E5500_GPR_Bypass]>,
12592720ab1SHal Finkel  InstrItinData<IIC_IntRotateDI, [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
12692720ab1SHal Finkel                                  InstrStage<1, [E5500_SFX0, E5500_SFX1]>],
127742b535eSHal Finkel                                 [5, 2, 2], // Latency = 1, Repeat rate = 1
12892720ab1SHal Finkel                                 [E5500_GPR_Bypass,
12992720ab1SHal Finkel                                  E5500_GPR_Bypass, E5500_GPR_Bypass]>,
13092720ab1SHal Finkel  InstrItinData<IIC_IntShift,    [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
13192720ab1SHal Finkel                                  InstrStage<2, [E5500_SFX0, E5500_SFX1]>],
132742b535eSHal Finkel                                 [6, 2, 2], // Latency = 2, Repeat rate = 2
13392720ab1SHal Finkel                                 [E5500_GPR_Bypass,
13492720ab1SHal Finkel                                  E5500_GPR_Bypass, E5500_GPR_Bypass]>,
13592720ab1SHal Finkel  InstrItinData<IIC_IntTrapW,    [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
13692720ab1SHal Finkel                                  InstrStage<2, [E5500_SFX0]>],
137742b535eSHal Finkel                                 [6, 2], // Latency = 2, Repeat rate = 2
13892720ab1SHal Finkel                                 [E5500_GPR_Bypass, E5500_GPR_Bypass]>,
13992720ab1SHal Finkel  InstrItinData<IIC_BrB,         [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
14092720ab1SHal Finkel                                  InstrStage<1, [E5500_BU]>],
141742b535eSHal Finkel                                 [5, 2], // Latency = 1
14292720ab1SHal Finkel                                 [NoBypass, E5500_GPR_Bypass]>,
14392720ab1SHal Finkel  InstrItinData<IIC_BrCR,        [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
14492720ab1SHal Finkel                                  InstrStage<1, [E5500_BU]>],
145742b535eSHal Finkel                                 [5, 2, 2], // Latency = 1
14692720ab1SHal Finkel                                 [E5500_CR_Bypass,
14792720ab1SHal Finkel                                  E5500_CR_Bypass, E5500_CR_Bypass]>,
14892720ab1SHal Finkel  InstrItinData<IIC_BrMCR,       [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
14992720ab1SHal Finkel                                  InstrStage<1, [E5500_BU]>],
150742b535eSHal Finkel                                 [5, 2], // Latency = 1
15192720ab1SHal Finkel                                 [E5500_CR_Bypass, E5500_CR_Bypass]>,
15292720ab1SHal Finkel  InstrItinData<IIC_BrMCRX,      [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
15392720ab1SHal Finkel                                  InstrStage<1, [E5500_CFX_0]>],
154742b535eSHal Finkel                                 [5, 2, 2], // Latency = 1
15592720ab1SHal Finkel                                 [E5500_CR_Bypass, E5500_GPR_Bypass]>,
15692720ab1SHal Finkel  InstrItinData<IIC_LdStDCBA,    [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
15792720ab1SHal Finkel                                  InstrStage<1, [E5500_LSU_0]>],
158742b535eSHal Finkel                                 [7, 2], // Latency = 3, Repeat rate = 1
15992720ab1SHal Finkel                                 [E5500_GPR_Bypass, E5500_GPR_Bypass]>,
16092720ab1SHal Finkel  InstrItinData<IIC_LdStDCBF,    [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
16192720ab1SHal Finkel                                  InstrStage<1, [E5500_LSU_0]>],
162742b535eSHal Finkel                                 [7, 2], // Latency = 3, Repeat rate = 1
16392720ab1SHal Finkel                                 [E5500_GPR_Bypass, E5500_GPR_Bypass]>,
16492720ab1SHal Finkel  InstrItinData<IIC_LdStDCBI,    [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
16592720ab1SHal Finkel                                  InstrStage<1, [E5500_LSU_0]>],
166742b535eSHal Finkel                                 [7, 2], // Latency = 3, Repeat rate = 1
16792720ab1SHal Finkel                                 [E5500_GPR_Bypass, E5500_GPR_Bypass]>,
16892720ab1SHal Finkel  InstrItinData<IIC_LdStLoad,    [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
16992720ab1SHal Finkel                                  InstrStage<1, [E5500_LSU_0]>],
170742b535eSHal Finkel                                 [7, 2], // Latency = 3
17192720ab1SHal Finkel                                 [E5500_GPR_Bypass, E5500_GPR_Bypass]>,
17292720ab1SHal Finkel  InstrItinData<IIC_LdStLoadUpd, [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
17392720ab1SHal Finkel                                  InstrStage<1, [E5500_SFX0, E5500_SFX1], 0>,
17492720ab1SHal Finkel                                  InstrStage<1, [E5500_LSU_0]>],
175742b535eSHal Finkel                                 [7, 2], // Latency = 3, Repeat rate = 1
17692720ab1SHal Finkel                                 [E5500_GPR_Bypass, E5500_GPR_Bypass],
177742b535eSHal Finkel                                 2>, // 2 micro-ops
17846402a42SHal Finkel  InstrItinData<IIC_LdStLoadUpdX,[InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
17946402a42SHal Finkel                                  InstrStage<1, [E5500_SFX0, E5500_SFX1], 0>,
18046402a42SHal Finkel                                  InstrStage<1, [E5500_LSU_0]>],
18146402a42SHal Finkel                                 [7, 2], // Latency = 3, Repeat rate = 1
18246402a42SHal Finkel                                 [E5500_GPR_Bypass, E5500_GPR_Bypass],
18346402a42SHal Finkel                                 2>, // 2 micro-ops
18492720ab1SHal Finkel  InstrItinData<IIC_LdStLD,      [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
18592720ab1SHal Finkel                                  InstrStage<1, [E5500_LSU_0]>],
186742b535eSHal Finkel                                 [7, 2], // Latency = 3, Repeat rate = 1
18792720ab1SHal Finkel                                 [E5500_GPR_Bypass, E5500_GPR_Bypass]>,
18892720ab1SHal Finkel  InstrItinData<IIC_LdStLDARX,   [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
18992720ab1SHal Finkel                                  InstrStage<3, [E5500_LSU_0]>],
190742b535eSHal Finkel                                 [7, 2], // Latency = 3, Repeat rate = 3
19192720ab1SHal Finkel                                 [E5500_GPR_Bypass, E5500_GPR_Bypass]>,
19292720ab1SHal Finkel  InstrItinData<IIC_LdStLDU,     [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
19392720ab1SHal Finkel                                  InstrStage<1, [E5500_SFX0, E5500_SFX1], 0>,
19492720ab1SHal Finkel                                  InstrStage<1, [E5500_LSU_0]>],
195742b535eSHal Finkel                                 [7, 2], // Latency = 3, Repeat rate = 1
19692720ab1SHal Finkel                                 [E5500_GPR_Bypass, E5500_GPR_Bypass],
197742b535eSHal Finkel                                 2>, // 2 micro-ops
19846402a42SHal Finkel  InstrItinData<IIC_LdStLDUX,    [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
19946402a42SHal Finkel                                  InstrStage<1, [E5500_SFX0, E5500_SFX1], 0>,
20046402a42SHal Finkel                                  InstrStage<1, [E5500_LSU_0]>],
20146402a42SHal Finkel                                 [7, 2], // Latency = 3, Repeat rate = 1
20246402a42SHal Finkel                                 [E5500_GPR_Bypass, E5500_GPR_Bypass],
20346402a42SHal Finkel                                 2>, // 2 micro-ops
20492720ab1SHal Finkel  InstrItinData<IIC_LdStStore,   [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
20592720ab1SHal Finkel                                  InstrStage<1, [E5500_LSU_0]>],
206742b535eSHal Finkel                                 [7, 2], // Latency = 3, Repeat rate = 1
20792720ab1SHal Finkel                                 [NoBypass, E5500_GPR_Bypass]>,
20892720ab1SHal Finkel  InstrItinData<IIC_LdStICBI,    [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
20992720ab1SHal Finkel                                  InstrStage<1, [E5500_LSU_0]>],
210742b535eSHal Finkel                                 [7, 2], // Latency = 3, Repeat rate = 1
21192720ab1SHal Finkel                                 [NoBypass, E5500_GPR_Bypass]>,
21292720ab1SHal Finkel  InstrItinData<IIC_LdStSTFD,    [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
21392720ab1SHal Finkel                                  InstrStage<1, [E5500_LSU_0]>],
214742b535eSHal Finkel                                 [7, 2, 2], // Latency = 3, Repeat rate = 1
21592720ab1SHal Finkel                                 [E5500_GPR_Bypass,
21692720ab1SHal Finkel                                  E5500_GPR_Bypass, E5500_GPR_Bypass]>,
21792720ab1SHal Finkel  InstrItinData<IIC_LdStSTFDU,   [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
21892720ab1SHal Finkel                                  InstrStage<1, [E5500_SFX0, E5500_SFX1], 0>,
21992720ab1SHal Finkel                                  InstrStage<1, [E5500_LSU_0]>],
220742b535eSHal Finkel                                 [7, 2, 2], // Latency = 3, Repeat rate = 1
22192720ab1SHal Finkel                                 [E5500_GPR_Bypass,
22292720ab1SHal Finkel                                  E5500_GPR_Bypass, E5500_GPR_Bypass],
223742b535eSHal Finkel                                 2>, // 2 micro-ops
22492720ab1SHal Finkel  InstrItinData<IIC_LdStLFD,     [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
22592720ab1SHal Finkel                                  InstrStage<1, [E5500_LSU_0]>],
226742b535eSHal Finkel                                 [8, 2, 2], // Latency = 4, Repeat rate = 1
22792720ab1SHal Finkel                                 [E5500_FPR_Bypass,
22892720ab1SHal Finkel                                  E5500_GPR_Bypass, E5500_GPR_Bypass],
229742b535eSHal Finkel                                 2>, // 2 micro-ops
23092720ab1SHal Finkel  InstrItinData<IIC_LdStLFDU,    [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
23192720ab1SHal Finkel                                  InstrStage<1, [E5500_SFX0, E5500_SFX1], 0>,
23292720ab1SHal Finkel                                  InstrStage<1, [E5500_LSU_0]>],
233742b535eSHal Finkel                                 [8, 2, 2], // Latency = 4, Repeat rate = 1
23492720ab1SHal Finkel                                 [E5500_FPR_Bypass,
23592720ab1SHal Finkel                                  E5500_GPR_Bypass, E5500_GPR_Bypass],
236742b535eSHal Finkel                                 2>, // 2 micro-ops
23746402a42SHal Finkel  InstrItinData<IIC_LdStLFDUX,   [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
23846402a42SHal Finkel                                  InstrStage<1, [E5500_SFX0, E5500_SFX1], 0>,
23946402a42SHal Finkel                                  InstrStage<1, [E5500_LSU_0]>],
24046402a42SHal Finkel                                 [8, 2, 2], // Latency = 4, Repeat rate = 1
24146402a42SHal Finkel                                 [E5500_FPR_Bypass,
24246402a42SHal Finkel                                  E5500_GPR_Bypass, E5500_GPR_Bypass],
24346402a42SHal Finkel                                 2>, // 2 micro-ops
24492720ab1SHal Finkel  InstrItinData<IIC_LdStLHA,     [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
24592720ab1SHal Finkel                                  InstrStage<1, [E5500_LSU_0]>],
246742b535eSHal Finkel                                 [7, 2], // Latency = 3
24792720ab1SHal Finkel                                 [E5500_GPR_Bypass, E5500_GPR_Bypass]>,
24892720ab1SHal Finkel  InstrItinData<IIC_LdStLHAU,    [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
24992720ab1SHal Finkel                                  InstrStage<1, [E5500_SFX0, E5500_SFX1], 0>,
25092720ab1SHal Finkel                                  InstrStage<1, [E5500_LSU_0]>],
251742b535eSHal Finkel                                 [7, 2], // Latency = 3, Repeat rate = 1
25292720ab1SHal Finkel                                 [E5500_GPR_Bypass, E5500_GPR_Bypass],
253742b535eSHal Finkel                                 2>, // 2 micro-ops
25446402a42SHal Finkel  InstrItinData<IIC_LdStLHAUX,   [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
25546402a42SHal Finkel                                  InstrStage<1, [E5500_SFX0, E5500_SFX1], 0>,
25646402a42SHal Finkel                                  InstrStage<1, [E5500_LSU_0]>],
25746402a42SHal Finkel                                 [7, 2], // Latency = 3, Repeat rate = 1
25846402a42SHal Finkel                                 [E5500_GPR_Bypass, E5500_GPR_Bypass],
25946402a42SHal Finkel                                 2>, // 2 micro-ops
26092720ab1SHal Finkel  InstrItinData<IIC_LdStLMW,     [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
26192720ab1SHal Finkel                                  InstrStage<4, [E5500_LSU_0]>],
262742b535eSHal Finkel                                 [8, 2], // Latency = r+3, Repeat rate = r+3
26392720ab1SHal Finkel                                 [NoBypass, E5500_GPR_Bypass]>,
26492720ab1SHal Finkel  InstrItinData<IIC_LdStLWARX,   [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
26592720ab1SHal Finkel                                  InstrStage<3, [E5500_LSU_0]>],
266742b535eSHal Finkel                                 [7, 2, 2], // Latency = 3, Repeat rate = 3
26792720ab1SHal Finkel                                 [E5500_GPR_Bypass,
26892720ab1SHal Finkel                                  E5500_GPR_Bypass, E5500_GPR_Bypass]>,
26992720ab1SHal Finkel  InstrItinData<IIC_LdStSTD,     [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
27092720ab1SHal Finkel                                  InstrStage<1, [E5500_LSU_0]>],
271742b535eSHal Finkel                                 [7, 2], // Latency = 3, Repeat rate = 1
27292720ab1SHal Finkel                                 [NoBypass, E5500_GPR_Bypass]>,
27392720ab1SHal Finkel  InstrItinData<IIC_LdStSTDCX,   [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
27492720ab1SHal Finkel                                  InstrStage<1, [E5500_LSU_0]>],
275742b535eSHal Finkel                                 [7, 2], // Latency = 3, Repeat rate = 1
27692720ab1SHal Finkel                                 [NoBypass, E5500_GPR_Bypass]>,
2779a0ed200SJinsong Ji  InstrItinData<IIC_LdStSTU,     [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
27892720ab1SHal Finkel                                  InstrStage<1, [E5500_SFX0, E5500_SFX1], 0>,
27992720ab1SHal Finkel                                  InstrStage<1, [E5500_LSU_0]>],
280742b535eSHal Finkel                                 [7, 2], // Latency = 3, Repeat rate = 1
28192720ab1SHal Finkel                                 [NoBypass, E5500_GPR_Bypass],
282742b535eSHal Finkel                                 2>, // 2 micro-ops
2839a0ed200SJinsong Ji  InstrItinData<IIC_LdStSTUX,    [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
28446402a42SHal Finkel                                  InstrStage<1, [E5500_SFX0, E5500_SFX1], 0>,
28546402a42SHal Finkel                                  InstrStage<1, [E5500_LSU_0]>],
28646402a42SHal Finkel                                 [7, 2], // Latency = 3, Repeat rate = 1
28746402a42SHal Finkel                                 [NoBypass, E5500_GPR_Bypass],
28846402a42SHal Finkel                                 2>, // 2 micro-ops
28992720ab1SHal Finkel  InstrItinData<IIC_LdStSTWCX,   [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
29092720ab1SHal Finkel                                  InstrStage<1, [E5500_LSU_0]>],
291742b535eSHal Finkel                                 [7, 2], // Latency = 3, Repeat rate = 1
29292720ab1SHal Finkel                                 [NoBypass, E5500_GPR_Bypass]>,
29392720ab1SHal Finkel  InstrItinData<IIC_LdStSync,    [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
29492720ab1SHal Finkel                                  InstrStage<1, [E5500_LSU_0]>]>,
29592720ab1SHal Finkel  InstrItinData<IIC_SprMTMSR,    [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
29692720ab1SHal Finkel                                  InstrStage<2, [E5500_CFX_0]>],
297742b535eSHal Finkel                                 [6, 2], // Latency = 2, Repeat rate = 4
29892720ab1SHal Finkel                                 [E5500_GPR_Bypass, E5500_GPR_Bypass]>,
29992720ab1SHal Finkel  InstrItinData<IIC_SprTLBSYNC,  [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
30092720ab1SHal Finkel                                  InstrStage<1, [E5500_LSU_0], 0>]>,
30192720ab1SHal Finkel  InstrItinData<IIC_SprMFCR,     [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
30292720ab1SHal Finkel                                  InstrStage<5, [E5500_CFX_0]>],
303742b535eSHal Finkel                                 [9, 2], // Latency = 5, Repeat rate = 5
30492720ab1SHal Finkel                                 [E5500_GPR_Bypass, E5500_CR_Bypass]>,
30546402a42SHal Finkel  InstrItinData<IIC_SprMFCRF,    [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
30646402a42SHal Finkel                                  InstrStage<5, [E5500_CFX_0]>],
30746402a42SHal Finkel                                 [9, 2], // Latency = 5, Repeat rate = 5
30846402a42SHal Finkel                                 [E5500_GPR_Bypass, E5500_CR_Bypass]>,
30910b6147eSJustin Hibbits  InstrItinData<IIC_SprMFPMR,    [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
31010b6147eSJustin Hibbits                                  InstrStage<4, [E5500_CFX_0]>],
311742b535eSHal Finkel                                 [8, 2], // Latency = 4, Repeat rate = 4
31292720ab1SHal Finkel                                 [E5500_GPR_Bypass, E5500_GPR_Bypass]>,
31392720ab1SHal Finkel  InstrItinData<IIC_SprMFSPR,    [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
31492720ab1SHal Finkel                                  InstrStage<1, [E5500_CFX_0]>],
315742b535eSHal Finkel                                 [5], // Latency = 1, Repeat rate = 1
31692720ab1SHal Finkel                                 [E5500_GPR_Bypass]>,
31710b6147eSJustin Hibbits  InstrItinData<IIC_SprMTPMR,    [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
31810b6147eSJustin Hibbits                                  InstrStage<1, [E5500_CFX_0]>],
31910b6147eSJustin Hibbits                                 [5], // Latency = 1, Repeat rate = 1
32010b6147eSJustin Hibbits                                 [E5500_GPR_Bypass]>,
32192720ab1SHal Finkel  InstrItinData<IIC_SprMFTB,     [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
32292720ab1SHal Finkel                                  InstrStage<4, [E5500_CFX_0]>],
323742b535eSHal Finkel                                 [8, 2], // Latency = 4, Repeat rate = 4
32492720ab1SHal Finkel                                 [NoBypass, E5500_GPR_Bypass]>,
32592720ab1SHal Finkel  InstrItinData<IIC_SprMTSPR,    [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
32610b6147eSJustin Hibbits                                  InstrStage<1, [E5500_CFX_0]>],
327742b535eSHal Finkel                                 [5], // Latency = 1, Repeat rate = 1
32892720ab1SHal Finkel                                 [E5500_GPR_Bypass]>,
32992720ab1SHal Finkel  InstrItinData<IIC_FPGeneral,   [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
33092720ab1SHal Finkel                                  InstrStage<1, [E5500_FPU_0]>],
331742b535eSHal Finkel                                 [11, 2, 2], // Latency = 7, Repeat rate = 1
33292720ab1SHal Finkel                                 [E5500_FPR_Bypass,
33392720ab1SHal Finkel                                  E5500_FPR_Bypass, E5500_FPR_Bypass]>,
33492720ab1SHal Finkel  InstrItinData<IIC_FPAddSub,    [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
33592720ab1SHal Finkel                                  InstrStage<1, [E5500_FPU_0]>],
336742b535eSHal Finkel                                 [11, 2, 2], // Latency = 7, Repeat rate = 1
33792720ab1SHal Finkel                                 [E5500_FPR_Bypass,
33892720ab1SHal Finkel                                  E5500_FPR_Bypass, E5500_FPR_Bypass]>,
33992720ab1SHal Finkel  InstrItinData<IIC_FPCompare,   [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
34092720ab1SHal Finkel                                  InstrStage<1, [E5500_FPU_0]>],
341742b535eSHal Finkel                                 [11, 2, 2], // Latency = 7, Repeat rate = 1
34292720ab1SHal Finkel                                 [E5500_CR_Bypass,
34392720ab1SHal Finkel                                  E5500_FPR_Bypass, E5500_FPR_Bypass]>,
34492720ab1SHal Finkel  InstrItinData<IIC_FPDivD,      [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
34592720ab1SHal Finkel                                  InstrStage<31, [E5500_FPU_0]>],
346742b535eSHal Finkel                                 [39, 2, 2], // Latency = 35, Repeat rate = 31
34792720ab1SHal Finkel                                 [E5500_FPR_Bypass,
34892720ab1SHal Finkel                                  E5500_FPR_Bypass, E5500_FPR_Bypass]>,
34992720ab1SHal Finkel  InstrItinData<IIC_FPDivS,      [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
35092720ab1SHal Finkel                                  InstrStage<16, [E5500_FPU_0]>],
351742b535eSHal Finkel                                 [24, 2, 2], // Latency = 20, Repeat rate = 16
35292720ab1SHal Finkel                                 [E5500_FPR_Bypass,
35392720ab1SHal Finkel                                  E5500_FPR_Bypass, E5500_FPR_Bypass]>,
35492720ab1SHal Finkel  InstrItinData<IIC_FPFused,     [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
35592720ab1SHal Finkel                                  InstrStage<1, [E5500_FPU_0]>],
356742b535eSHal Finkel                                 [11, 2, 2, 2], // Latency = 7, Repeat rate = 1
35792720ab1SHal Finkel                                 [E5500_FPR_Bypass,
35892720ab1SHal Finkel                                  E5500_FPR_Bypass, E5500_FPR_Bypass,
35992720ab1SHal Finkel                                  E5500_FPR_Bypass]>,
36092720ab1SHal Finkel  InstrItinData<IIC_FPRes,       [InstrStage<1, [E5500_DIS0, E5500_DIS1], 0>,
36192720ab1SHal Finkel                                  InstrStage<2, [E5500_FPU_0]>],
362742b535eSHal Finkel                                 [12, 2], // Latency = 8, Repeat rate = 2
36392720ab1SHal Finkel                                 [E5500_FPR_Bypass, E5500_FPR_Bypass]>
364742b535eSHal Finkel]>;
365742b535eSHal Finkel
366742b535eSHal Finkel// ===---------------------------------------------------------------------===//
367742b535eSHal Finkel// e5500 machine model for scheduling and other instruction cost heuristics.
368742b535eSHal Finkel
369742b535eSHal Finkeldef PPCE5500Model : SchedMachineModel {
370742b535eSHal Finkel  let IssueWidth = 2;  // 2 micro-ops are dispatched per cycle.
371742b535eSHal Finkel  let LoadLatency = 6; // Optimistic load latency assuming bypass.
372742b535eSHal Finkel                       // This is overriden by OperandCycles if the
373742b535eSHal Finkel                       // Itineraries are queried instead.
374742b535eSHal Finkel
37517cb5799SMatthias Braun  let CompleteModel = 0;
37617cb5799SMatthias Braun
377742b535eSHal Finkel  let Itineraries = PPCE5500Itineraries;
378742b535eSHal Finkel}
379