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