1742b535eSHal Finkel//===-- PPCScheduleE500mc.td - e500mc 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 e500mc 32-bit 10742b535eSHal Finkel// Power processor. 11742b535eSHal Finkel// 12742b535eSHal Finkel// All information is derived from the "e500mc Core Reference Manual", 13742b535eSHal Finkel// Freescale Document Number E500MCRM, Rev. 1, 03/2012. 14742b535eSHal Finkel// 15742b535eSHal Finkel//===----------------------------------------------------------------------===// 16742b535eSHal Finkel// Relevant functional units in the Freescale e500mc core: 17742b535eSHal Finkel// 18742b535eSHal Finkel// * Decode & Dispatch 19742b535eSHal Finkel// Can dispatch up to 2 instructions per clock cycle to either the GPR Issue 20742b535eSHal Finkel// queues (GIQx), FP Issue Queue (FIQ), or Branch issue queue (BIQ). 21ceb3cd96SJustin Hibbitsdef E500mc_DIS0 : FuncUnit; // Dispatch stage - insn 1 22ceb3cd96SJustin Hibbitsdef E500mc_DIS1 : FuncUnit; // Dispatch stage - insn 2 23742b535eSHal Finkel 24742b535eSHal Finkel// * Execute 25742b535eSHal Finkel// 6 pipelined execution units: SFX0, SFX1, BU, FPU, LSU, CFX. 26742b535eSHal Finkel// Some instructions can only execute in SFX0 but not SFX1. 27742b535eSHal Finkel// The CFX has a bypass path, allowing non-divide instructions to execute 28742b535eSHal Finkel// while a divide instruction is executed. 29ceb3cd96SJustin Hibbitsdef E500mc_SFX0 : FuncUnit; // Simple unit 0 30ceb3cd96SJustin Hibbitsdef E500mc_SFX1 : FuncUnit; // Simple unit 1 31ceb3cd96SJustin Hibbitsdef E500mc_BU : FuncUnit; // Branch unit 32ceb3cd96SJustin Hibbitsdef E500mc_CFX_DivBypass 33742b535eSHal Finkel : FuncUnit; // CFX divide bypass path 34ceb3cd96SJustin Hibbitsdef E500mc_CFX_0 : FuncUnit; // CFX pipeline 35ceb3cd96SJustin Hibbitsdef E500mc_LSU_0 : FuncUnit; // LSU pipeline 36ceb3cd96SJustin Hibbitsdef E500mc_FPU_0 : FuncUnit; // FPU pipeline 37742b535eSHal Finkel 38ceb3cd96SJustin Hibbitsdef E500mc_GPR_Bypass : Bypass; 39ceb3cd96SJustin Hibbitsdef E500mc_FPR_Bypass : Bypass; 40ceb3cd96SJustin Hibbitsdef E500mc_CR_Bypass : Bypass; 41f574c277SHal Finkel 42742b535eSHal Finkeldef PPCE500mcItineraries : ProcessorItineraries< 43ceb3cd96SJustin Hibbits [E500mc_DIS0, E500mc_DIS1, E500mc_SFX0, E500mc_SFX1, E500mc_BU, E500mc_CFX_DivBypass, 44ceb3cd96SJustin Hibbits E500mc_CFX_0, E500mc_LSU_0, E500mc_FPU_0], 45ceb3cd96SJustin Hibbits [E500mc_CR_Bypass, E500mc_GPR_Bypass, E500mc_FPR_Bypass], [ 46ceb3cd96SJustin Hibbits InstrItinData<IIC_IntSimple, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>, 47ceb3cd96SJustin Hibbits InstrStage<1, [E500mc_SFX0, E500mc_SFX1]>], 48742b535eSHal Finkel [4, 1, 1], // Latency = 1 49ceb3cd96SJustin Hibbits [E500mc_GPR_Bypass, 50ceb3cd96SJustin Hibbits E500mc_GPR_Bypass, E500mc_GPR_Bypass]>, 51ceb3cd96SJustin Hibbits InstrItinData<IIC_IntGeneral, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>, 52ceb3cd96SJustin Hibbits InstrStage<1, [E500mc_SFX0, E500mc_SFX1]>], 53742b535eSHal Finkel [4, 1, 1], // Latency = 1 54ceb3cd96SJustin Hibbits [E500mc_GPR_Bypass, 55ceb3cd96SJustin Hibbits E500mc_GPR_Bypass, E500mc_GPR_Bypass]>, 56ceb3cd96SJustin Hibbits InstrItinData<IIC_IntISEL, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>, 57ceb3cd96SJustin Hibbits InstrStage<1, [E500mc_SFX0, E500mc_SFX1]>], 5811d3c561SHal Finkel [4, 1, 1, 1], // Latency = 1 59ceb3cd96SJustin Hibbits [E500mc_GPR_Bypass, 60ceb3cd96SJustin Hibbits E500mc_GPR_Bypass, E500mc_GPR_Bypass, 61ceb3cd96SJustin Hibbits E500mc_CR_Bypass]>, 62ceb3cd96SJustin Hibbits InstrItinData<IIC_IntCompare, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>, 63ceb3cd96SJustin Hibbits InstrStage<1, [E500mc_SFX0, E500mc_SFX1]>], 64742b535eSHal Finkel [5, 1, 1], // Latency = 1 or 2 65ceb3cd96SJustin Hibbits [E500mc_CR_Bypass, 66ceb3cd96SJustin Hibbits E500mc_GPR_Bypass, E500mc_GPR_Bypass]>, 67ceb3cd96SJustin Hibbits InstrItinData<IIC_IntDivW, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>, 68ceb3cd96SJustin Hibbits InstrStage<1, [E500mc_CFX_0], 0>, 69ceb3cd96SJustin Hibbits InstrStage<14, [E500mc_CFX_DivBypass]>], 70742b535eSHal Finkel [17, 1, 1], // Latency=4..35, Repeat= 4..35 71ceb3cd96SJustin Hibbits [E500mc_GPR_Bypass, 72ceb3cd96SJustin Hibbits E500mc_GPR_Bypass, E500mc_GPR_Bypass]>, 73ceb3cd96SJustin Hibbits InstrItinData<IIC_IntMFFS, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>, 74ceb3cd96SJustin Hibbits InstrStage<8, [E500mc_FPU_0]>], 75742b535eSHal Finkel [11], // Latency = 8 76ceb3cd96SJustin Hibbits [E500mc_FPR_Bypass]>, 77ceb3cd96SJustin Hibbits InstrItinData<IIC_IntMTFSB0, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>, 78ceb3cd96SJustin Hibbits InstrStage<8, [E500mc_FPU_0]>], 79742b535eSHal Finkel [11, 1, 1], // Latency = 8 80742b535eSHal Finkel [NoBypass, NoBypass, NoBypass]>, 81ceb3cd96SJustin Hibbits InstrItinData<IIC_IntMulHW, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>, 82ceb3cd96SJustin Hibbits InstrStage<1, [E500mc_CFX_0]>], 83742b535eSHal Finkel [7, 1, 1], // Latency = 4, Repeat rate = 1 84ceb3cd96SJustin Hibbits [E500mc_GPR_Bypass, 85ceb3cd96SJustin Hibbits E500mc_GPR_Bypass, E500mc_GPR_Bypass]>, 86ceb3cd96SJustin Hibbits InstrItinData<IIC_IntMulHWU, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>, 87ceb3cd96SJustin Hibbits InstrStage<1, [E500mc_CFX_0]>], 88742b535eSHal Finkel [7, 1, 1], // Latency = 4, Repeat rate = 1 89ceb3cd96SJustin Hibbits [E500mc_GPR_Bypass, 90ceb3cd96SJustin Hibbits E500mc_GPR_Bypass, E500mc_GPR_Bypass]>, 91ceb3cd96SJustin Hibbits InstrItinData<IIC_IntMulLI, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>, 92ceb3cd96SJustin Hibbits InstrStage<1, [E500mc_CFX_0]>], 93742b535eSHal Finkel [7, 1, 1], // Latency = 4, Repeat rate = 1 94ceb3cd96SJustin Hibbits [E500mc_GPR_Bypass, 95ceb3cd96SJustin Hibbits E500mc_GPR_Bypass, E500mc_GPR_Bypass]>, 96ceb3cd96SJustin Hibbits InstrItinData<IIC_IntRotate, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>, 97ceb3cd96SJustin Hibbits InstrStage<1, [E500mc_SFX0, E500mc_SFX1]>], 98742b535eSHal Finkel [4, 1, 1], // Latency = 1 99ceb3cd96SJustin Hibbits [E500mc_GPR_Bypass, 100ceb3cd96SJustin Hibbits E500mc_GPR_Bypass, E500mc_GPR_Bypass]>, 101ceb3cd96SJustin Hibbits InstrItinData<IIC_IntShift, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>, 102ceb3cd96SJustin Hibbits InstrStage<1, [E500mc_SFX0, E500mc_SFX1]>], 103742b535eSHal Finkel [4, 1, 1], // Latency = 1 104ceb3cd96SJustin Hibbits [E500mc_GPR_Bypass, 105ceb3cd96SJustin Hibbits E500mc_GPR_Bypass, E500mc_GPR_Bypass]>, 106ceb3cd96SJustin Hibbits InstrItinData<IIC_IntTrapW, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>, 107ceb3cd96SJustin Hibbits InstrStage<2, [E500mc_SFX0]>], 108742b535eSHal Finkel [5, 1], // Latency = 2, Repeat rate = 2 109ceb3cd96SJustin Hibbits [E500mc_GPR_Bypass, E500mc_GPR_Bypass]>, 110ceb3cd96SJustin Hibbits InstrItinData<IIC_BrB, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>, 111ceb3cd96SJustin Hibbits InstrStage<1, [E500mc_BU]>], 112742b535eSHal Finkel [4, 1], // Latency = 1 113ceb3cd96SJustin Hibbits [NoBypass, E500mc_GPR_Bypass]>, 114ceb3cd96SJustin Hibbits InstrItinData<IIC_BrCR, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>, 115ceb3cd96SJustin Hibbits InstrStage<1, [E500mc_BU]>], 116742b535eSHal Finkel [4, 1, 1], // Latency = 1 117ceb3cd96SJustin Hibbits [E500mc_CR_Bypass, 118ceb3cd96SJustin Hibbits E500mc_CR_Bypass, E500mc_CR_Bypass]>, 119ceb3cd96SJustin Hibbits InstrItinData<IIC_BrMCR, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>, 120ceb3cd96SJustin Hibbits InstrStage<1, [E500mc_BU]>], 121742b535eSHal Finkel [4, 1], // Latency = 1 122ceb3cd96SJustin Hibbits [E500mc_CR_Bypass, E500mc_CR_Bypass]>, 123ceb3cd96SJustin Hibbits InstrItinData<IIC_BrMCRX, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>, 124ceb3cd96SJustin Hibbits InstrStage<1, [E500mc_SFX0, E500mc_SFX1]>], 125742b535eSHal Finkel [4, 1, 1], // Latency = 1 126ceb3cd96SJustin Hibbits [E500mc_CR_Bypass, E500mc_GPR_Bypass]>, 127ceb3cd96SJustin Hibbits InstrItinData<IIC_LdStDCBA, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>, 128ceb3cd96SJustin Hibbits InstrStage<1, [E500mc_LSU_0]>], 129742b535eSHal Finkel [6, 1], // Latency = 3, Repeat rate = 1 130ceb3cd96SJustin Hibbits [E500mc_GPR_Bypass, E500mc_GPR_Bypass]>, 131ceb3cd96SJustin Hibbits InstrItinData<IIC_LdStDCBF, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>, 132ceb3cd96SJustin Hibbits InstrStage<1, [E500mc_LSU_0]>], 133742b535eSHal Finkel [6, 1], // Latency = 3 134ceb3cd96SJustin Hibbits [E500mc_GPR_Bypass, E500mc_GPR_Bypass]>, 135ceb3cd96SJustin Hibbits InstrItinData<IIC_LdStDCBI, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>, 136ceb3cd96SJustin Hibbits InstrStage<1, [E500mc_LSU_0]>], 137742b535eSHal Finkel [6, 1], // Latency = 3 138ceb3cd96SJustin Hibbits [E500mc_GPR_Bypass, E500mc_GPR_Bypass]>, 139ceb3cd96SJustin Hibbits InstrItinData<IIC_LdStLoad, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>, 140ceb3cd96SJustin Hibbits InstrStage<1, [E500mc_LSU_0]>], 141742b535eSHal Finkel [6, 1], // Latency = 3 142ceb3cd96SJustin Hibbits [E500mc_GPR_Bypass, E500mc_GPR_Bypass]>, 143ceb3cd96SJustin Hibbits InstrItinData<IIC_LdStLoadUpd, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>, 144ceb3cd96SJustin Hibbits InstrStage<1, [E500mc_SFX0, E500mc_SFX1], 0>, 145ceb3cd96SJustin Hibbits InstrStage<1, [E500mc_LSU_0]>], 146742b535eSHal Finkel [6, 1], // Latency = 3 147ceb3cd96SJustin Hibbits [E500mc_GPR_Bypass, E500mc_GPR_Bypass], 148742b535eSHal Finkel 2>, // 2 micro-ops 149ceb3cd96SJustin Hibbits InstrItinData<IIC_LdStLoadUpdX,[InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>, 150ceb3cd96SJustin Hibbits InstrStage<1, [E500mc_SFX0, E500mc_SFX1], 0>, 151ceb3cd96SJustin Hibbits InstrStage<1, [E500mc_LSU_0]>], 15246402a42SHal Finkel [6, 1], // Latency = 3 153ceb3cd96SJustin Hibbits [E500mc_GPR_Bypass, E500mc_GPR_Bypass], 15446402a42SHal Finkel 2>, // 2 micro-ops 155ceb3cd96SJustin Hibbits InstrItinData<IIC_LdStStore, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>, 156ceb3cd96SJustin Hibbits InstrStage<1, [E500mc_LSU_0]>], 157742b535eSHal Finkel [6, 1], // Latency = 3 158ceb3cd96SJustin Hibbits [NoBypass, E500mc_GPR_Bypass]>, 1599a0ed200SJinsong Ji InstrItinData<IIC_LdStSTU, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>, 1609a0ed200SJinsong Ji InstrStage<1, [E500mc_SFX0, E500mc_SFX1], 0>, 1619a0ed200SJinsong Ji InstrStage<1, [E500mc_LSU_0]>], 1629a0ed200SJinsong Ji [6, 1], // Latency = 3 1639a0ed200SJinsong Ji [NoBypass, E500mc_GPR_Bypass], 1649a0ed200SJinsong Ji 2>, // 2 micro-ops 1659a0ed200SJinsong Ji InstrItinData<IIC_LdStSTUX, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>, 166ceb3cd96SJustin Hibbits InstrStage<1, [E500mc_SFX0, E500mc_SFX1], 0>, 167ceb3cd96SJustin Hibbits InstrStage<1, [E500mc_LSU_0]>], 168742b535eSHal Finkel [6, 1], // Latency = 3 169ceb3cd96SJustin Hibbits [NoBypass, E500mc_GPR_Bypass], 170742b535eSHal Finkel 2>, // 2 micro-ops 171ceb3cd96SJustin Hibbits InstrItinData<IIC_LdStICBI, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>, 172ceb3cd96SJustin Hibbits InstrStage<1, [E500mc_LSU_0]>], 173742b535eSHal Finkel [6, 1], // Latency = 3 174ceb3cd96SJustin Hibbits [NoBypass, E500mc_GPR_Bypass]>, 175ceb3cd96SJustin Hibbits InstrItinData<IIC_LdStSTFD, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>, 176ceb3cd96SJustin Hibbits InstrStage<1, [E500mc_LSU_0]>], 177742b535eSHal Finkel [6, 1, 1], // Latency = 3 178ceb3cd96SJustin Hibbits [E500mc_GPR_Bypass, 179ceb3cd96SJustin Hibbits E500mc_GPR_Bypass, E500mc_GPR_Bypass]>, 180ceb3cd96SJustin Hibbits InstrItinData<IIC_LdStSTFDU, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>, 181ceb3cd96SJustin Hibbits InstrStage<1, [E500mc_SFX0, E500mc_SFX1], 0>, 182ceb3cd96SJustin Hibbits InstrStage<1, [E500mc_LSU_0]>], 183742b535eSHal Finkel [6, 1, 1], // Latency = 3 184ceb3cd96SJustin Hibbits [E500mc_GPR_Bypass, 185ceb3cd96SJustin Hibbits E500mc_GPR_Bypass, E500mc_GPR_Bypass], 186742b535eSHal Finkel 2>, // 2 micro-ops 187ceb3cd96SJustin Hibbits InstrItinData<IIC_LdStLFD, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>, 188ceb3cd96SJustin Hibbits InstrStage<1, [E500mc_LSU_0]>], 189742b535eSHal Finkel [7, 1, 1], // Latency = 4 190ceb3cd96SJustin Hibbits [E500mc_FPR_Bypass, 191ceb3cd96SJustin Hibbits E500mc_GPR_Bypass, E500mc_GPR_Bypass]>, 192ceb3cd96SJustin Hibbits InstrItinData<IIC_LdStLFDU, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>, 193ceb3cd96SJustin Hibbits InstrStage<1, [E500mc_SFX0, E500mc_SFX1], 0>, 194ceb3cd96SJustin Hibbits InstrStage<1, [E500mc_LSU_0]>], 195742b535eSHal Finkel [7, 1, 1], // Latency = 4 196ceb3cd96SJustin Hibbits [E500mc_FPR_Bypass, 197ceb3cd96SJustin Hibbits E500mc_GPR_Bypass, E500mc_GPR_Bypass], 198742b535eSHal Finkel 2>, // 2 micro-ops 199ceb3cd96SJustin Hibbits InstrItinData<IIC_LdStLFDUX, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>, 200ceb3cd96SJustin Hibbits InstrStage<1, [E500mc_SFX0, E500mc_SFX1], 0>, 201ceb3cd96SJustin Hibbits InstrStage<1, [E500mc_LSU_0]>], 20246402a42SHal Finkel [7, 1, 1], // Latency = 4 203ceb3cd96SJustin Hibbits [E500mc_FPR_Bypass, 204ceb3cd96SJustin Hibbits E500mc_GPR_Bypass, E500mc_GPR_Bypass], 20546402a42SHal Finkel 2>, // 2 micro-ops 206ceb3cd96SJustin Hibbits InstrItinData<IIC_LdStLHA, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>, 207ceb3cd96SJustin Hibbits InstrStage<1, [E500mc_LSU_0]>], 208742b535eSHal Finkel [6, 1], // Latency = 3 209ceb3cd96SJustin Hibbits [E500mc_GPR_Bypass, E500mc_GPR_Bypass]>, 210ceb3cd96SJustin Hibbits InstrItinData<IIC_LdStLHAU, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>, 211ceb3cd96SJustin Hibbits InstrStage<1, [E500mc_SFX0, E500mc_SFX1], 0>, 212ceb3cd96SJustin Hibbits InstrStage<1, [E500mc_LSU_0]>], 213742b535eSHal Finkel [6, 1], // Latency = 3 214ceb3cd96SJustin Hibbits [E500mc_GPR_Bypass, E500mc_GPR_Bypass]>, 215ceb3cd96SJustin Hibbits InstrItinData<IIC_LdStLHAUX, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>, 216ceb3cd96SJustin Hibbits InstrStage<1, [E500mc_SFX0, E500mc_SFX1], 0>, 217ceb3cd96SJustin Hibbits InstrStage<1, [E500mc_LSU_0]>], 21846402a42SHal Finkel [6, 1], // Latency = 3 219ceb3cd96SJustin Hibbits [E500mc_GPR_Bypass, E500mc_GPR_Bypass]>, 220ceb3cd96SJustin Hibbits InstrItinData<IIC_LdStLMW, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>, 221ceb3cd96SJustin Hibbits InstrStage<1, [E500mc_LSU_0]>], 222742b535eSHal Finkel [7, 1], // Latency = r+3 223ceb3cd96SJustin Hibbits [NoBypass, E500mc_GPR_Bypass]>, 224ceb3cd96SJustin Hibbits InstrItinData<IIC_LdStLWARX, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>, 225ceb3cd96SJustin Hibbits InstrStage<3, [E500mc_LSU_0]>], 226742b535eSHal Finkel [6, 1, 1], // Latency = 3, Repeat rate = 3 227ceb3cd96SJustin Hibbits [E500mc_GPR_Bypass, 228ceb3cd96SJustin Hibbits E500mc_GPR_Bypass, E500mc_GPR_Bypass]>, 229ceb3cd96SJustin Hibbits InstrItinData<IIC_LdStSTWCX, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>, 230ceb3cd96SJustin Hibbits InstrStage<1, [E500mc_LSU_0]>], 231742b535eSHal Finkel [6, 1], // Latency = 3 232ceb3cd96SJustin Hibbits [NoBypass, E500mc_GPR_Bypass]>, 233ceb3cd96SJustin Hibbits InstrItinData<IIC_LdStSync, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>, 234ceb3cd96SJustin Hibbits InstrStage<1, [E500mc_LSU_0]>]>, 235ceb3cd96SJustin Hibbits InstrItinData<IIC_SprMFSR, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>, 236ceb3cd96SJustin Hibbits InstrStage<4, [E500mc_SFX0]>], 237742b535eSHal Finkel [7, 1], 238ceb3cd96SJustin Hibbits [E500mc_GPR_Bypass, E500mc_GPR_Bypass]>, 239ceb3cd96SJustin Hibbits InstrItinData<IIC_SprMTMSR, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>, 240ceb3cd96SJustin Hibbits InstrStage<2, [E500mc_SFX0, E500mc_SFX1]>], 241742b535eSHal Finkel [5, 1], // Latency = 2, Repeat rate = 4 242ceb3cd96SJustin Hibbits [E500mc_GPR_Bypass, E500mc_GPR_Bypass]>, 243ceb3cd96SJustin Hibbits InstrItinData<IIC_SprMTSR, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>, 244ceb3cd96SJustin Hibbits InstrStage<1, [E500mc_SFX0]>], 245742b535eSHal Finkel [5, 1], 246ceb3cd96SJustin Hibbits [NoBypass, E500mc_GPR_Bypass]>, 247ceb3cd96SJustin Hibbits InstrItinData<IIC_SprTLBSYNC, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>, 248ceb3cd96SJustin Hibbits InstrStage<1, [E500mc_LSU_0], 0>]>, 249ceb3cd96SJustin Hibbits InstrItinData<IIC_SprMFCR, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>, 250ceb3cd96SJustin Hibbits InstrStage<5, [E500mc_SFX0]>], 251742b535eSHal Finkel [8, 1], 252ceb3cd96SJustin Hibbits [E500mc_GPR_Bypass, E500mc_CR_Bypass]>, 253ceb3cd96SJustin Hibbits InstrItinData<IIC_SprMFCRF, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>, 254ceb3cd96SJustin Hibbits InstrStage<5, [E500mc_SFX0]>], 25546402a42SHal Finkel [8, 1], 256ceb3cd96SJustin Hibbits [E500mc_GPR_Bypass, E500mc_CR_Bypass]>, 257ceb3cd96SJustin Hibbits InstrItinData<IIC_SprMFPMR, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>, 258ceb3cd96SJustin Hibbits InstrStage<4, [E500mc_SFX0]>], 25910b6147eSJustin Hibbits [7, 1], // Latency = 4, Repeat rate = 4 260ceb3cd96SJustin Hibbits [E500mc_GPR_Bypass, E500mc_GPR_Bypass]>, 261ceb3cd96SJustin Hibbits InstrItinData<IIC_SprMFMSR, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>, 262ceb3cd96SJustin Hibbits InstrStage<4, [E500mc_SFX0]>], 263742b535eSHal Finkel [7, 1], // Latency = 4, Repeat rate = 4 264ceb3cd96SJustin Hibbits [E500mc_GPR_Bypass, E500mc_GPR_Bypass]>, 265ceb3cd96SJustin Hibbits InstrItinData<IIC_SprMFSPR, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>, 266ceb3cd96SJustin Hibbits InstrStage<1, [E500mc_SFX0, E500mc_SFX1]>], 267742b535eSHal Finkel [4, 1], // Latency = 1, Repeat rate = 1 268ceb3cd96SJustin Hibbits [E500mc_GPR_Bypass, E500mc_CR_Bypass]>, 269ceb3cd96SJustin Hibbits InstrItinData<IIC_SprMTPMR, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>, 270ceb3cd96SJustin Hibbits InstrStage<1, [E500mc_SFX0]>], 27110b6147eSJustin Hibbits [4, 1], // Latency = 1, Repeat rate = 1 272ceb3cd96SJustin Hibbits [E500mc_CR_Bypass, E500mc_GPR_Bypass]>, 273ceb3cd96SJustin Hibbits InstrItinData<IIC_SprMFTB, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>, 274ceb3cd96SJustin Hibbits InstrStage<4, [E500mc_SFX0]>], 275742b535eSHal Finkel [7, 1], // Latency = 4, Repeat rate = 4 276ceb3cd96SJustin Hibbits [NoBypass, E500mc_GPR_Bypass]>, 277ceb3cd96SJustin Hibbits InstrItinData<IIC_SprMTSPR, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>, 278ceb3cd96SJustin Hibbits InstrStage<1, [E500mc_SFX0, E500mc_SFX1]>], 279742b535eSHal Finkel [4, 1], // Latency = 1, Repeat rate = 1 280ceb3cd96SJustin Hibbits [E500mc_CR_Bypass, E500mc_GPR_Bypass]>, 281ceb3cd96SJustin Hibbits InstrItinData<IIC_SprMTSRIN, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>, 282ceb3cd96SJustin Hibbits InstrStage<1, [E500mc_SFX0]>], 283742b535eSHal Finkel [4, 1], 284ceb3cd96SJustin Hibbits [NoBypass, E500mc_GPR_Bypass]>, 285ceb3cd96SJustin Hibbits InstrItinData<IIC_FPGeneral, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>, 286ceb3cd96SJustin Hibbits InstrStage<2, [E500mc_FPU_0]>], 287742b535eSHal Finkel [11, 1, 1], // Latency = 8, Repeat rate = 2 288ceb3cd96SJustin Hibbits [E500mc_FPR_Bypass, 289ceb3cd96SJustin Hibbits E500mc_FPR_Bypass, E500mc_FPR_Bypass]>, 290ceb3cd96SJustin Hibbits InstrItinData<IIC_FPAddSub, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>, 291ceb3cd96SJustin Hibbits InstrStage<4, [E500mc_FPU_0]>], 292742b535eSHal Finkel [13, 1, 1], // Latency = 10, Repeat rate = 4 293ceb3cd96SJustin Hibbits [E500mc_FPR_Bypass, 294ceb3cd96SJustin Hibbits E500mc_FPR_Bypass, E500mc_FPR_Bypass]>, 295ceb3cd96SJustin Hibbits InstrItinData<IIC_FPCompare, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>, 296ceb3cd96SJustin Hibbits InstrStage<2, [E500mc_FPU_0]>], 297742b535eSHal Finkel [11, 1, 1], // Latency = 8, Repeat rate = 2 298ceb3cd96SJustin Hibbits [E500mc_CR_Bypass, 299ceb3cd96SJustin Hibbits E500mc_FPR_Bypass, E500mc_FPR_Bypass]>, 300ceb3cd96SJustin Hibbits InstrItinData<IIC_FPDivD, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>, 301ceb3cd96SJustin Hibbits InstrStage<68, [E500mc_FPU_0]>], 302742b535eSHal Finkel [71, 1, 1], // Latency = 68, Repeat rate = 68 303ceb3cd96SJustin Hibbits [E500mc_FPR_Bypass, 304ceb3cd96SJustin Hibbits E500mc_FPR_Bypass, E500mc_FPR_Bypass]>, 305ceb3cd96SJustin Hibbits InstrItinData<IIC_FPDivS, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>, 306ceb3cd96SJustin Hibbits InstrStage<38, [E500mc_FPU_0]>], 307742b535eSHal Finkel [41, 1, 1], // Latency = 38, Repeat rate = 38 308ceb3cd96SJustin Hibbits [E500mc_FPR_Bypass, 309ceb3cd96SJustin Hibbits E500mc_FPR_Bypass, E500mc_FPR_Bypass]>, 310ceb3cd96SJustin Hibbits InstrItinData<IIC_FPFused, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>, 311ceb3cd96SJustin Hibbits InstrStage<4, [E500mc_FPU_0]>], 312742b535eSHal Finkel [13, 1, 1, 1], // Latency = 10, Repeat rate = 4 313ceb3cd96SJustin Hibbits [E500mc_FPR_Bypass, 314ceb3cd96SJustin Hibbits E500mc_FPR_Bypass, E500mc_FPR_Bypass, 315ceb3cd96SJustin Hibbits E500mc_FPR_Bypass]>, 316ceb3cd96SJustin Hibbits InstrItinData<IIC_FPRes, [InstrStage<1, [E500mc_DIS0, E500mc_DIS1], 0>, 317ceb3cd96SJustin Hibbits InstrStage<38, [E500mc_FPU_0]>], 318742b535eSHal Finkel [41, 1], // Latency = 38, Repeat rate = 38 319ceb3cd96SJustin Hibbits [E500mc_FPR_Bypass, E500mc_FPR_Bypass]> 320742b535eSHal Finkel]>; 321742b535eSHal Finkel 322742b535eSHal Finkel// ===---------------------------------------------------------------------===// 323742b535eSHal Finkel// e500mc machine model for scheduling and other instruction cost heuristics. 324742b535eSHal Finkel 325742b535eSHal Finkeldef PPCE500mcModel : SchedMachineModel { 326742b535eSHal Finkel let IssueWidth = 2; // 2 micro-ops are dispatched per cycle. 327742b535eSHal Finkel let LoadLatency = 5; // Optimistic load latency assuming bypass. 328742b535eSHal Finkel // This is overriden by OperandCycles if the 329742b535eSHal Finkel // Itineraries are queried instead. 330742b535eSHal Finkel 33117cb5799SMatthias Braun let CompleteModel = 0; 33217cb5799SMatthias Braun 333742b535eSHal Finkel let Itineraries = PPCE500mcItineraries; 334742b535eSHal Finkel} 335