From: Evan Cheng Date: Sun, 3 Oct 2010 02:03:59 +0000 (+0000) Subject: Major changes to Cortex-A9 itinerary. X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=ec45f60cab671b0e7e2c1768395310bed7c74525;p=oota-llvm.git Major changes to Cortex-A9 itinerary. 1. Model dual issues as two FUs. 2. Model the pipelines correctly: two symmetric ALUs, the multiplier is a dependent pipeline on ALU0. The changes do not have much impact on codegen right now. But I plan to make pre-RA scheduler multi-issue aware which should take good advantage of the changes. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@115457 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/ARM/ARMScheduleA9.td b/lib/Target/ARM/ARMScheduleA9.td index 7a4a33bead0..f96b50448a1 100644 --- a/lib/Target/ARM/ARMScheduleA9.td +++ b/lib/Target/ARM/ARMScheduleA9.td @@ -16,286 +16,326 @@ // Reference Manual". // // Functional units -def A9_Pipe0 : FuncUnit; // pipeline 0 -def A9_Pipe1 : FuncUnit; // pipeline 1 +def A9_Issue0 : FuncUnit; // Issue 0 +def A9_Issue1 : FuncUnit; // Issue 1 +def A9_Branch : FuncUnit; // Branch +def A9_ALU0 : FuncUnit; // ALU / MUL pipeline 0 +def A9_ALU1 : FuncUnit; // ALU pipeline 1 def A9_AGU : FuncUnit; // Address generation unit for ld / st -def A9_NPipe : FuncUnit; // NEON ALU/MUL pipeline +def A9_NPipe : FuncUnit; // NEON pipeline +def A9_MUX0 : FuncUnit; // AGU + NEON/FPU multiplexer def A9_DRegsVFP: FuncUnit; // FP register set, VFP side def A9_DRegsN : FuncUnit; // FP register set, NEON side -def A9_MUX0 : FuncUnit; // AGU + NEON/FPU multiplexer // Bypasses def A9_LdBypass : Bypass; -// Dual issue pipeline represented by A9_Pipe0 | A9_Pipe1 -// def CortexA9Itineraries : ProcessorItineraries< - [A9_Pipe0, A9_Pipe1, A9_AGU, A9_NPipe, A9_DRegsVFP, A9_DRegsN, A9_MUX0], + [A9_Issue0, A9_Issue1, A9_Branch, A9_ALU0, A9_ALU1, A9_AGU, A9_NPipe, A9_MUX0, + A9_DRegsVFP, A9_DRegsN], [A9_LdBypass], [ // Two fully-pipelined integer ALU pipelines // // Move instructions, unconditional - InstrItinData], [1]>, - InstrItinData], [1, 1]>, - InstrItinData], [1, 1]>, - InstrItinData], [2, 1, 1]>, - InstrItinData, - InstrStage<1, [A9_Pipe0, A9_Pipe1]>], [2]>, + InstrItinData, + InstrStage<1, [A9_ALU0, A9_ALU1]>], [1]>, + InstrItinData, + InstrStage<1, [A9_ALU0, A9_ALU1]>], [1, 1]>, + InstrItinData, + InstrStage<1, [A9_ALU0, A9_ALU1]>], [1, 1]>, + InstrItinData, + InstrStage<2, [A9_ALU0, A9_ALU1]>], [2, 1, 1]>, + InstrItinData, + InstrStage<1, [A9_ALU0, A9_ALU1]>, + InstrStage<1, [A9_ALU0, A9_ALU1]>], [2]>, // // MVN instructions - InstrItinData], + InstrItinData, + InstrStage<1, [A9_ALU0, A9_ALU1]>], [1]>, - InstrItinData], + InstrItinData, + InstrStage<1, [A9_ALU0, A9_ALU1]>], [1, 1], [NoBypass, A9_LdBypass]>, - InstrItinData], + InstrItinData, + InstrStage<2, [A9_ALU0, A9_ALU1]>], [2, 1]>, - InstrItinData], + InstrItinData, + InstrStage<3, [A9_ALU0, A9_ALU1]>], [3, 1, 1]>, // // No operand cycles - InstrItinData]>, + InstrItinData, + InstrStage<1, [A9_ALU0, A9_ALU1]>]>, // // Binary Instructions that produce a result - InstrItinData], + InstrItinData, + InstrStage<1, [A9_ALU0, A9_ALU1]>], [1, 1], [NoBypass, A9_LdBypass]>, - InstrItinData], + InstrItinData, + InstrStage<1, [A9_ALU0, A9_ALU1]>], [1, 1, 1], [NoBypass, A9_LdBypass, A9_LdBypass]>, - InstrItinData], + InstrItinData, + InstrStage<2, [A9_ALU0, A9_ALU1]>], [2, 1, 1], [NoBypass, A9_LdBypass, NoBypass]>, - InstrItinData], + InstrItinData, + InstrStage<2, [A9_ALU0, A9_ALU1]>], [2, 1, 1], [NoBypass, NoBypass, A9_LdBypass]>, - InstrItinData], + InstrItinData, + InstrStage<3, [A9_ALU0, A9_ALU1]>], [3, 1, 1, 1], [NoBypass, A9_LdBypass, NoBypass, NoBypass]>, // // Bitwise Instructions that produce a result - InstrItinData], [1, 1]>, - InstrItinData], [1, 1, 1]>, - InstrItinData], [2, 1, 1]>, - InstrItinData], [3, 1, 1, 1]>, + InstrItinData, + InstrStage<1, [A9_ALU0, A9_ALU1]>], [1, 1]>, + InstrItinData, + InstrStage<1, [A9_ALU0, A9_ALU1]>], [1, 1, 1]>, + InstrItinData, + InstrStage<2, [A9_ALU0, A9_ALU1]>], [2, 1, 1]>, + InstrItinData, + InstrStage<3, [A9_ALU0, A9_ALU1]>], [3, 1, 1, 1]>, // // Unary Instructions that produce a result // CLZ, RBIT, etc. - InstrItinData], [1, 1]>, + InstrItinData, + InstrStage<1, [A9_ALU0, A9_ALU1]>], [1, 1]>, // BFC, BFI, UBFX, SBFX - InstrItinData], [2, 1]>, + InstrItinData, + InstrStage<2, [A9_ALU0, A9_ALU1]>], [2, 1]>, // // Zero and sign extension instructions - InstrItinData], [2, 1]>, - InstrItinData], [3, 1, 1]>, - InstrItinData],[3, 1, 1, 1]>, + InstrItinData, + InstrStage<1, [A9_ALU0, A9_ALU1]>], [2, 1]>, + InstrItinData, + InstrStage<2, [A9_ALU0, A9_ALU1]>], [3, 1, 1]>, + InstrItinData, + InstrStage<3, [A9_ALU0, A9_ALU1]>], [3, 1, 1, 1]>, // // Compare instructions - InstrItinData], - [1], [A9_LdBypass]>, - InstrItinData], - [1, 1], [A9_LdBypass, A9_LdBypass]>, - InstrItinData], - [1, 1], [A9_LdBypass, NoBypass]>, - InstrItinData], + InstrItinData, + InstrStage<1, [A9_ALU0, A9_ALU1]>], + [1], [A9_LdBypass]>, + InstrItinData, + InstrStage<1, [A9_ALU0, A9_ALU1]>], + [1, 1], [A9_LdBypass, A9_LdBypass]>, + InstrItinData], + [1, 1], [A9_LdBypass, NoBypass]>, + InstrItinData, + InstrStage<3, [A9_ALU0, A9_ALU1]>], [1, 1, 1], [A9_LdBypass, NoBypass, NoBypass]>, // // Test instructions - InstrItinData], [1]>, - InstrItinData], [1, 1]>, - InstrItinData], [1, 1]>, - InstrItinData], [1, 1, 1]>, + InstrItinData, + InstrStage<1, [A9_ALU0, A9_ALU1]>], [1]>, + InstrItinData, + InstrStage<1, [A9_ALU0, A9_ALU1]>], [1, 1]>, + InstrItinData, + InstrStage<2, [A9_ALU0, A9_ALU1]>], [1, 1]>, + InstrItinData, + InstrStage<3, [A9_ALU0, A9_ALU1]>], [1, 1, 1]>, // // Move instructions, conditional // FIXME: Correctly model the extra input dep on the destination. - InstrItinData], [1]>, - InstrItinData], [1, 1]>, - InstrItinData], [1, 1]>, - InstrItinData], [2, 1, 1]>, + InstrItinData, + InstrStage<1, [A9_ALU0, A9_ALU1]>], [1]>, + InstrItinData, + InstrStage<1, [A9_ALU0, A9_ALU1]>], [1, 1]>, + InstrItinData, + InstrStage<1, [A9_ALU0, A9_ALU1]>], [1, 1]>, + InstrItinData, + InstrStage<2, [A9_ALU0, A9_ALU1]>], [2, 1, 1]>, // Integer multiply pipeline // - InstrItinData, - InstrStage<2, [A9_Pipe0]>], [3, 1, 1]>, - InstrItinData, - InstrStage<2, [A9_Pipe0]>], [3, 1, 1, 1]>, - InstrItinData, - InstrStage<2, [A9_Pipe0]>], [4, 1, 1]>, - InstrItinData, - InstrStage<2, [A9_Pipe0]>], [4, 1, 1, 1]>, - InstrItinData, - InstrStage<3, [A9_Pipe0]>], [4, 5, 1, 1]>, - InstrItinData, - InstrStage<3, [A9_Pipe0]>], [4, 5, 1, 1]>, + InstrItinData, + InstrStage<2, [A9_ALU0]>], [3, 1, 1]>, + InstrItinData, + InstrStage<2, [A9_ALU0]>], + [3, 1, 1, 1]>, + InstrItinData, + InstrStage<2, [A9_ALU0]>], [4, 1, 1]>, + InstrItinData, + InstrStage<2, [A9_ALU0]>], + [4, 1, 1, 1]>, + InstrItinData, + InstrStage<3, [A9_ALU0]>], [4, 5, 1, 1]>, + InstrItinData, + InstrStage<3, [A9_ALU0]>], + [4, 5, 1, 1]>, // Integer load pipeline // FIXME: The timings are some rough approximations // // Immediate offset - InstrItinData, + InstrItinData, InstrStage<1, [A9_MUX0], 0>, InstrStage<1, [A9_AGU]>], [3, 1], [A9_LdBypass]>, - InstrItinData, + InstrItinData, InstrStage<1, [A9_MUX0], 0>, InstrStage<2, [A9_AGU]>], [4, 1], [A9_LdBypass]>, // FIXME: If address is 64-bit aligned, AGU cycles is 1. - InstrItinData, + InstrItinData, InstrStage<1, [A9_MUX0], 0>, InstrStage<2, [A9_AGU]>], [3, 3, 1], [A9_LdBypass]>, // // Register offset - InstrItinData, + InstrItinData, InstrStage<1, [A9_MUX0], 0>, InstrStage<1, [A9_AGU]>], [3, 1, 1], [A9_LdBypass]>, - InstrItinData, + InstrItinData, InstrStage<1, [A9_MUX0], 0>, InstrStage<2, [A9_AGU]>], [4, 1, 1], [A9_LdBypass]>, - InstrItinData, + InstrItinData, InstrStage<1, [A9_MUX0], 0>, InstrStage<2, [A9_AGU]>], [3, 3, 1, 1], [A9_LdBypass]>, // // Scaled register offset - InstrItinData, + InstrItinData, InstrStage<1, [A9_MUX0], 0>, InstrStage<1, [A9_AGU]>], [4, 1, 1], [A9_LdBypass]>, - InstrItinData, + InstrItinData, InstrStage<1, [A9_MUX0], 0>, InstrStage<2, [A9_AGU]>], [5, 1, 1], [A9_LdBypass]>, // // Immediate offset with update - InstrItinData, + InstrItinData, InstrStage<1, [A9_MUX0], 0>, InstrStage<1, [A9_AGU]>], [3, 2, 1], [A9_LdBypass]>, - InstrItinData, + InstrItinData, InstrStage<1, [A9_MUX0], 0>, InstrStage<2, [A9_AGU]>], [4, 3, 1], [A9_LdBypass]>, // // Register offset with update - InstrItinData, + InstrItinData, InstrStage<1, [A9_MUX0], 0>, InstrStage<1, [A9_AGU]>], [3, 2, 1, 1], [A9_LdBypass]>, - InstrItinData, + InstrItinData, InstrStage<1, [A9_MUX0], 0>, InstrStage<2, [A9_AGU]>], [4, 3, 1, 1], [A9_LdBypass]>, - InstrItinData, + InstrItinData, InstrStage<1, [A9_MUX0], 0>, InstrStage<2, [A9_AGU]>], [3, 3, 1, 1], [A9_LdBypass]>, // // Scaled register offset with update - InstrItinData, + InstrItinData, InstrStage<1, [A9_MUX0], 0>, InstrStage<1, [A9_AGU]>], [4, 3, 1, 1], [A9_LdBypass]>, - InstrItinData, + InstrItinData, InstrStage<1, [A9_MUX0], 0>, InstrStage<2, [A9_AGU]>], [5, 4, 1, 1], [A9_LdBypass]>, // // Load multiple - InstrItinData, + InstrItinData, InstrStage<1, [A9_MUX0], 0>, InstrStage<2, [A9_AGU]>], [3], [A9_LdBypass]>, // // Load multiple plus branch - InstrItinData, + InstrItinData, InstrStage<1, [A9_MUX0], 0>, InstrStage<1, [A9_AGU]>, - InstrStage<1, [A9_Pipe0, A9_Pipe1]>]>, + InstrStage<1, [A9_Branch]>]>, // // iLoadi + iALUr for t2LDRpci_pic. - InstrItinData, + InstrItinData, InstrStage<1, [A9_MUX0], 0>, InstrStage<1, [A9_AGU]>, - InstrStage<1, [A9_Pipe0, A9_Pipe1]>], + InstrStage<1, [A9_ALU0, A9_ALU1]>], [2, 1]>, // Integer store pipeline /// // Immediate offset - InstrItinData, + InstrItinData, InstrStage<1, [A9_MUX0], 0>, InstrStage<1, [A9_AGU]>], [1, 1]>, - InstrItinData, + InstrItinData, InstrStage<1, [A9_MUX0], 0>, InstrStage<2, [A9_AGU]>], [1, 1]>, // FIXME: If address is 64-bit aligned, AGU cycles is 1. - InstrItinData, + InstrItinData, InstrStage<1, [A9_MUX0], 0>, InstrStage<2, [A9_AGU]>], [1, 1]>, // // Register offset - InstrItinData, + InstrItinData, InstrStage<1, [A9_MUX0], 0>, InstrStage<1, [A9_AGU]>], [1, 1, 1]>, - InstrItinData, + InstrItinData, InstrStage<1, [A9_MUX0], 0>, InstrStage<2, [A9_AGU]>], [1, 1, 1]>, - InstrItinData, + InstrItinData, InstrStage<1, [A9_MUX0], 0>, InstrStage<2, [A9_AGU]>], [1, 1, 1]>, // // Scaled register offset - InstrItinData, - InstrStage<1, [A9_MUX0], 0>, - InstrStage<1, [A9_AGU]>], [1, 1, 1]>, - InstrItinData, + InstrItinData, + InstrStage<1, [A9_MUX0], 0>, + InstrStage<1, [A9_AGU]>], [1, 1, 1]>, + InstrItinData, InstrStage<1, [A9_MUX0], 0>, InstrStage<2, [A9_AGU]>], [1, 1, 1]>, // // Immediate offset with update - InstrItinData, - InstrStage<1, [A9_MUX0], 0>, - InstrStage<1, [A9_AGU]>], [2, 1, 1]>, - InstrItinData, + InstrItinData, + InstrStage<1, [A9_MUX0], 0>, + InstrStage<1, [A9_AGU]>], [2, 1, 1]>, + InstrItinData, InstrStage<1, [A9_MUX0], 0>, InstrStage<2, [A9_AGU]>], [3, 1, 1]>, // // Register offset with update - InstrItinData, - InstrStage<1, [A9_MUX0], 0>, - InstrStage<1, [A9_AGU]>], - [2, 1, 1, 1]>, - InstrItinData, + InstrItinData, + InstrStage<1, [A9_MUX0], 0>, + InstrStage<1, [A9_AGU]>], + [2, 1, 1, 1]>, + InstrItinData, + InstrStage<1, [A9_MUX0], 0>, + InstrStage<2, [A9_AGU]>], + [3, 1, 1, 1]>, + InstrItinData, InstrStage<1, [A9_MUX0], 0>, InstrStage<2, [A9_AGU]>], [3, 1, 1, 1]>, - InstrItinData, - InstrStage<1, [A9_MUX0], 0>, - InstrStage<2, [A9_AGU]>], - [3, 1, 1, 1]>, // // Scaled register offset with update - InstrItinData, - InstrStage<1, [A9_MUX0], 0>, - InstrStage<1, [A9_AGU]>], - [2, 1, 1, 1]>, - InstrItinData, - InstrStage<1, [A9_MUX0], 0>, - InstrStage<2, [A9_AGU]>], - [3, 1, 1, 1]>, + InstrItinData, + InstrStage<1, [A9_MUX0], 0>, + InstrStage<1, [A9_AGU]>], + [2, 1, 1, 1]>, + InstrItinData, + InstrStage<1, [A9_MUX0], 0>, + InstrStage<2, [A9_AGU]>], + [3, 1, 1, 1]>, // // Store multiple - InstrItinData, + InstrItinData, InstrStage<1, [A9_MUX0], 0>, InstrStage<1, [A9_AGU]>]>, // Branch // // no delay slots, so the latency of a branch is unimportant - InstrItinData]>, + InstrItinData]>, // VFP and NEON shares the same register file. This means that every VFP // instruction should wait for full completion of the consecutive NEON @@ -317,7 +357,7 @@ def CortexA9Itineraries : ProcessorItineraries< // FP Special Register to Integer Register File Move InstrItinData, InstrStage<2, [A9_DRegsN], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<1, [A9_NPipe]>]>, // @@ -325,7 +365,7 @@ def CortexA9Itineraries : ProcessorItineraries< InstrItinData, // Extra latency cycles since wbck is 2 cycles InstrStage<3, [A9_DRegsN], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<1, [A9_NPipe]>], [1, 1]>, @@ -334,7 +374,7 @@ def CortexA9Itineraries : ProcessorItineraries< InstrItinData, // Extra latency cycles since wbck is 2 cycles InstrStage<3, [A9_DRegsN], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<1, [A9_NPipe]>], [1, 1]>, @@ -344,7 +384,7 @@ def CortexA9Itineraries : ProcessorItineraries< InstrItinData, // Extra latency cycles since wbck is 4 cycles InstrStage<5, [A9_DRegsN], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<1, [A9_NPipe]>], [1, 1]>, @@ -353,7 +393,7 @@ def CortexA9Itineraries : ProcessorItineraries< InstrItinData, // Extra latency cycles since wbck is 4 cycles InstrStage<5, [A9_DRegsN], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<1, [A9_NPipe]>], [1, 1]>, @@ -361,7 +401,7 @@ def CortexA9Itineraries : ProcessorItineraries< // Single to Double FP Convert InstrItinData, InstrStage<5, [A9_DRegsN], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<1, [A9_NPipe]>], [4, 1]>, @@ -369,7 +409,7 @@ def CortexA9Itineraries : ProcessorItineraries< // Double to Single FP Convert InstrItinData, InstrStage<5, [A9_DRegsN], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<1, [A9_NPipe]>], [4, 1]>, @@ -378,7 +418,7 @@ def CortexA9Itineraries : ProcessorItineraries< // Single to Half FP Convert InstrItinData, InstrStage<5, [A9_DRegsN], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<1, [A9_NPipe]>], [4, 1]>, @@ -386,7 +426,7 @@ def CortexA9Itineraries : ProcessorItineraries< // Half to Single FP Convert InstrItinData, InstrStage<3, [A9_DRegsN], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<1, [A9_NPipe]>], [2, 1]>, @@ -395,7 +435,7 @@ def CortexA9Itineraries : ProcessorItineraries< // Single-Precision FP to Integer Convert InstrItinData, InstrStage<5, [A9_DRegsN], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<1, [A9_NPipe]>], [4, 1]>, @@ -403,7 +443,7 @@ def CortexA9Itineraries : ProcessorItineraries< // Double-Precision FP to Integer Convert InstrItinData, InstrStage<5, [A9_DRegsN], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<1, [A9_NPipe]>], [4, 1]>, @@ -411,7 +451,7 @@ def CortexA9Itineraries : ProcessorItineraries< // Integer to Single-Precision FP Convert InstrItinData, InstrStage<5, [A9_DRegsN], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<1, [A9_NPipe]>], [4, 1]>, @@ -419,7 +459,7 @@ def CortexA9Itineraries : ProcessorItineraries< // Integer to Double-Precision FP Convert InstrItinData, InstrStage<5, [A9_DRegsN], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<1, [A9_NPipe]>], [4, 1]>, @@ -427,7 +467,7 @@ def CortexA9Itineraries : ProcessorItineraries< // Single-precision FP ALU InstrItinData, InstrStage<5, [A9_DRegsN], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<1, [A9_NPipe]>], [4, 1, 1]>, @@ -435,7 +475,7 @@ def CortexA9Itineraries : ProcessorItineraries< // Double-precision FP ALU InstrItinData, InstrStage<5, [A9_DRegsN], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<1, [A9_NPipe]>], [4, 1, 1]>, @@ -443,7 +483,7 @@ def CortexA9Itineraries : ProcessorItineraries< // Single-precision FP Multiply InstrItinData, InstrStage<6, [A9_DRegsN], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<1, [A9_NPipe]>], [5, 1, 1]>, @@ -451,7 +491,7 @@ def CortexA9Itineraries : ProcessorItineraries< // Double-precision FP Multiply InstrItinData, InstrStage<7, [A9_DRegsN], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<2, [A9_NPipe]>], [6, 1, 1]>, @@ -459,7 +499,7 @@ def CortexA9Itineraries : ProcessorItineraries< // Single-precision FP MAC InstrItinData, InstrStage<9, [A9_DRegsN], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<1, [A9_NPipe]>], [8, 0, 1, 1]>, @@ -467,7 +507,7 @@ def CortexA9Itineraries : ProcessorItineraries< // Double-precision FP MAC InstrItinData, InstrStage<10, [A9_DRegsN], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<2, [A9_NPipe]>], [9, 0, 1, 1]>, @@ -475,7 +515,7 @@ def CortexA9Itineraries : ProcessorItineraries< // Single-precision FP DIV InstrItinData, InstrStage<16, [A9_DRegsN], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<10, [A9_NPipe]>], [15, 1, 1]>, @@ -483,7 +523,7 @@ def CortexA9Itineraries : ProcessorItineraries< // Double-precision FP DIV InstrItinData, InstrStage<26, [A9_DRegsN], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<20, [A9_NPipe]>], [25, 1, 1]>, @@ -491,7 +531,7 @@ def CortexA9Itineraries : ProcessorItineraries< // Single-precision FP SQRT InstrItinData, InstrStage<18, [A9_DRegsN], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<13, [A9_NPipe]>], [17, 1]>, @@ -499,7 +539,7 @@ def CortexA9Itineraries : ProcessorItineraries< // Double-precision FP SQRT InstrItinData, InstrStage<33, [A9_DRegsN], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<28, [A9_NPipe]>], [32, 1]>, @@ -509,7 +549,7 @@ def CortexA9Itineraries : ProcessorItineraries< InstrItinData, // Extra 1 latency cycle since wbck is 2 cycles InstrStage<3, [A9_DRegsN], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<1, [A9_NPipe]>], [1, 1]>, @@ -518,7 +558,7 @@ def CortexA9Itineraries : ProcessorItineraries< InstrItinData, // Extra 1 latency cycle since wbck is 2 cycles InstrStage<3, [A9_DRegsN], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<1, [A9_NPipe]>], [1, 1, 1]>, @@ -526,7 +566,7 @@ def CortexA9Itineraries : ProcessorItineraries< // Single-precision to Integer Move InstrItinData, InstrStage<2, [A9_DRegsN], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<1, [A9_NPipe]>], [1, 1]>, @@ -534,7 +574,7 @@ def CortexA9Itineraries : ProcessorItineraries< // Double-precision to Integer Move InstrItinData, InstrStage<2, [A9_DRegsN], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<1, [A9_NPipe]>], [1, 1, 1]>, @@ -542,7 +582,7 @@ def CortexA9Itineraries : ProcessorItineraries< // Single-precision FP Load InstrItinData, InstrStage<2, [A9_DRegsN], 0, Reserved>, - InstrStage<1, [A9_Pipe1], 0>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<1, [A9_NPipe]>], [1, 1]>, @@ -551,7 +591,7 @@ def CortexA9Itineraries : ProcessorItineraries< // FIXME: Result latency is 1 if address is 64-bit aligned. InstrItinData, InstrStage<2, [A9_DRegsN], 0, Reserved>, - InstrStage<1, [A9_Pipe1], 0>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<1, [A9_NPipe]>], [2, 1]>, @@ -559,14 +599,14 @@ def CortexA9Itineraries : ProcessorItineraries< // FP Load Multiple InstrItinData, InstrStage<2, [A9_DRegsN], 0, Reserved>, - InstrStage<1, [A9_Pipe1], 0>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<1, [A9_NPipe]>]>, // // Single-precision FP Store InstrItinData, InstrStage<2, [A9_DRegsN], 0, Reserved>, - InstrStage<1, [A9_Pipe1], 0>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<1, [A9_NPipe]>], [1, 1]>, @@ -574,7 +614,7 @@ def CortexA9Itineraries : ProcessorItineraries< // Double-precision FP Store InstrItinData, InstrStage<2, [A9_DRegsN], 0, Reserved>, - InstrStage<1, [A9_Pipe1], 0>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<1, [A9_NPipe]>], [1, 1]>, @@ -582,7 +622,7 @@ def CortexA9Itineraries : ProcessorItineraries< // FP Store Multiple InstrItinData, InstrStage<2, [A9_DRegsN], 0, Reserved>, - InstrStage<1, [A9_Pipe1], 0>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<1, [A9_NPipe]>]>, // NEON @@ -591,7 +631,7 @@ def CortexA9Itineraries : ProcessorItineraries< // FIXME: We don't model this instruction properly InstrItinData, InstrStage<7, [A9_DRegsVFP], 0, Reserved>, - InstrStage<1, [A9_Pipe1], 0>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<1, [A9_NPipe]>]>, // @@ -600,7 +640,7 @@ def CortexA9Itineraries : ProcessorItineraries< InstrItinData, // Extra latency cycles since wbck is 6 cycles InstrStage<7, [A9_DRegsVFP], 0, Reserved>, - InstrStage<1, [A9_Pipe1], 0>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<1, [A9_NPipe]>], [2, 2, 1]>, @@ -610,7 +650,7 @@ def CortexA9Itineraries : ProcessorItineraries< InstrItinData, // Extra latency cycles since wbck is 6 cycles InstrStage<7, [A9_DRegsVFP], 0, Reserved>, - InstrStage<1, [A9_Pipe1], 0>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<1, [A9_NPipe]>], [2, 2, 2, 1]>, @@ -620,7 +660,7 @@ def CortexA9Itineraries : ProcessorItineraries< InstrItinData, // Extra latency cycles since wbck is 6 cycles InstrStage<7, [A9_DRegsVFP], 0, Reserved>, - InstrStage<1, [A9_Pipe1], 0>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<1, [A9_NPipe]>], [2, 2, 2, 2, 1]>, @@ -630,7 +670,7 @@ def CortexA9Itineraries : ProcessorItineraries< InstrItinData, // Extra latency cycles since wbck is 6 cycles InstrStage<7, [A9_DRegsVFP], 0, Reserved>, - InstrStage<1, [A9_Pipe1], 0>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<1, [A9_NPipe]>]>, // @@ -638,7 +678,7 @@ def CortexA9Itineraries : ProcessorItineraries< InstrItinData, // Extra latency cycles since wbck is 6 cycles InstrStage<7, [A9_DRegsVFP], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<1, [A9_NPipe]>], [4, 2]>, @@ -647,7 +687,7 @@ def CortexA9Itineraries : ProcessorItineraries< InstrItinData, // Extra latency cycles since wbck is 6 cycles InstrStage<7, [A9_DRegsVFP], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<1, [A9_NPipe]>], [4, 2]>, @@ -656,7 +696,7 @@ def CortexA9Itineraries : ProcessorItineraries< InstrItinData, // Extra latency cycles since wbck is 6 cycles InstrStage<7, [A9_DRegsVFP], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<1, [A9_NPipe]>], [4, 1]>, @@ -665,7 +705,7 @@ def CortexA9Itineraries : ProcessorItineraries< InstrItinData, // Extra latency cycles since wbck is 6 cycles InstrStage<7, [A9_DRegsVFP], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<1, [A9_NPipe]>], [4, 1]>, @@ -674,7 +714,7 @@ def CortexA9Itineraries : ProcessorItineraries< InstrItinData, // Extra latency cycles since wbck is 6 cycles InstrStage<7, [A9_DRegsVFP], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<1, [A9_NPipe]>], [3, 2, 2]>, @@ -683,7 +723,7 @@ def CortexA9Itineraries : ProcessorItineraries< InstrItinData, // Extra latency cycles since wbck is 6 cycles InstrStage<7, [A9_DRegsVFP], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<1, [A9_NPipe]>], [3, 2, 2]>, @@ -692,7 +732,7 @@ def CortexA9Itineraries : ProcessorItineraries< InstrItinData, // Extra latency cycles since wbck is 6 cycles InstrStage<7, [A9_DRegsVFP], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<1, [A9_NPipe]>], [3, 2, 1]>, @@ -701,7 +741,7 @@ def CortexA9Itineraries : ProcessorItineraries< InstrItinData, // Extra latency cycles since wbck is 6 cycles InstrStage<7, [A9_DRegsVFP], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<1, [A9_NPipe]>], [3, 2, 1]>, @@ -710,7 +750,7 @@ def CortexA9Itineraries : ProcessorItineraries< InstrItinData, // Extra latency cycles since wbck is 6 cycles InstrStage<7, [A9_DRegsVFP], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<1, [A9_NPipe]>], [3, 1, 1]>, @@ -719,7 +759,7 @@ def CortexA9Itineraries : ProcessorItineraries< InstrItinData, // Extra latency cycles since wbck is 6 cycles InstrStage<7, [A9_DRegsVFP], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<1, [A9_NPipe]>], [3, 1, 1]>, @@ -728,7 +768,7 @@ def CortexA9Itineraries : ProcessorItineraries< InstrItinData, // Extra latency cycles since wbck is 6 cycles InstrStage<7, [A9_DRegsVFP], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<1, [A9_NPipe]>], [4, 1, 1]>, @@ -737,7 +777,7 @@ def CortexA9Itineraries : ProcessorItineraries< InstrItinData, // Extra latency cycles since wbck is 6 cycles InstrStage<7, [A9_DRegsVFP], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<1, [A9_NPipe]>], [4, 1, 1]>, @@ -746,7 +786,7 @@ def CortexA9Itineraries : ProcessorItineraries< InstrItinData, // Extra latency cycles since wbck is 6 cycles InstrStage<7, [A9_DRegsVFP], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<1, [A9_NPipe]>], [4, 2, 2]>, @@ -755,7 +795,7 @@ def CortexA9Itineraries : ProcessorItineraries< InstrItinData, // Extra latency cycles since wbck is 6 cycles InstrStage<7, [A9_DRegsVFP], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<1, [A9_NPipe]>], [4, 2, 2]>, @@ -764,7 +804,7 @@ def CortexA9Itineraries : ProcessorItineraries< InstrItinData, // Extra latency cycles since wbck is 6 cycles InstrStage<7, [A9_DRegsVFP], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<1, [A9_NPipe]>], [4, 2, 1]>, @@ -773,7 +813,7 @@ def CortexA9Itineraries : ProcessorItineraries< InstrItinData, // Extra latency cycles since wbck is 6 cycles InstrStage<7, [A9_DRegsVFP], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<1, [A9_NPipe]>], [4, 2, 1]>, @@ -783,7 +823,7 @@ def CortexA9Itineraries : ProcessorItineraries< InstrItinData, // Extra latency cycles since wbck is 6 cycles InstrStage<7, [A9_DRegsVFP], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<1, [A9_NPipe]>], [3, 2, 2]>, @@ -794,7 +834,7 @@ def CortexA9Itineraries : ProcessorItineraries< InstrItinData, // Extra latency cycles since wbck is 7 cycles InstrStage<8, [A9_DRegsVFP], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<2, [A9_NPipe]>], [4, 2, 2]>, @@ -803,7 +843,7 @@ def CortexA9Itineraries : ProcessorItineraries< InstrItinData, // Extra latency cycles since wbck is 6 cycles InstrStage<7, [A9_DRegsVFP], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<1, [A9_NPipe]>], [6, 3, 2, 1]>, @@ -812,7 +852,7 @@ def CortexA9Itineraries : ProcessorItineraries< InstrItinData, // Extra latency cycles since wbck is 6 cycles InstrStage<7, [A9_DRegsVFP], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<2, [A9_NPipe]>], [6, 3, 2, 1]>, @@ -821,7 +861,7 @@ def CortexA9Itineraries : ProcessorItineraries< InstrItinData, // Extra latency cycles since wbck is 6 cycles InstrStage<7, [A9_DRegsVFP], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<1, [A9_NPipe]>], [6, 3, 1]>, @@ -830,7 +870,7 @@ def CortexA9Itineraries : ProcessorItineraries< InstrItinData, // Extra latency cycles since wbck is 6 cycles InstrStage<7, [A9_DRegsVFP], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<2, [A9_NPipe]>], [6, 3, 1]>, @@ -840,7 +880,7 @@ def CortexA9Itineraries : ProcessorItineraries< InstrItinData, // Extra latency cycles since wbck is 6 cycles InstrStage<7, [A9_DRegsVFP], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<1, [A9_NPipe]>], [6, 2, 2]>, @@ -849,7 +889,7 @@ def CortexA9Itineraries : ProcessorItineraries< InstrItinData, // Extra latency cycles since wbck is 7 cycles InstrStage<8, [A9_DRegsVFP], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<2, [A9_NPipe]>], [7, 2, 2]>, @@ -859,7 +899,7 @@ def CortexA9Itineraries : ProcessorItineraries< InstrItinData, // Extra latency cycles since wbck is 7 cycles InstrStage<8, [A9_DRegsVFP], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<2, [A9_NPipe]>], [7, 2, 1]>, @@ -868,7 +908,7 @@ def CortexA9Itineraries : ProcessorItineraries< InstrItinData, // Extra latency cycles since wbck is 9 cycles InstrStage<10, [A9_DRegsVFP], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<4, [A9_NPipe]>], [9, 2, 1]>, @@ -877,7 +917,7 @@ def CortexA9Itineraries : ProcessorItineraries< InstrItinData, // Extra latency cycles since wbck is 6 cycles InstrStage<7, [A9_DRegsVFP], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<1, [A9_NPipe]>], [6, 3, 2, 2]>, @@ -886,7 +926,7 @@ def CortexA9Itineraries : ProcessorItineraries< InstrItinData, // Extra latency cycles since wbck is 7 cycles InstrStage<8, [A9_DRegsVFP], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<2, [A9_NPipe]>], [7, 3, 2, 1]>, @@ -895,7 +935,7 @@ def CortexA9Itineraries : ProcessorItineraries< InstrItinData, // Extra latency cycles since wbck is 7 cycles InstrStage<8, [A9_DRegsVFP], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<2, [A9_NPipe]>], [7, 3, 2, 2]>, @@ -904,7 +944,7 @@ def CortexA9Itineraries : ProcessorItineraries< InstrItinData, // Extra latency cycles since wbck is 9 cycles InstrStage<10, [A9_DRegsVFP], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<4, [A9_NPipe]>], [9, 3, 2, 1]>, @@ -913,7 +953,7 @@ def CortexA9Itineraries : ProcessorItineraries< // Move InstrItinData, InstrStage<1, [A9_DRegsVFP], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<1, [A9_NPipe]>], [1,1]>, @@ -922,7 +962,7 @@ def CortexA9Itineraries : ProcessorItineraries< InstrItinData, // Extra latency cycles since wbck is 6 cycles InstrStage<7, [A9_DRegsVFP], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<1, [A9_NPipe]>], [3]>, @@ -931,7 +971,7 @@ def CortexA9Itineraries : ProcessorItineraries< InstrItinData, // FIXME: all latencies are arbitrary, no information is available InstrStage<3, [A9_DRegsVFP], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<1, [A9_NPipe]>], [2, 1]>, @@ -940,7 +980,7 @@ def CortexA9Itineraries : ProcessorItineraries< InstrItinData, // FIXME: all latencies are arbitrary, no information is available InstrStage<3, [A9_DRegsVFP], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<1, [A9_NPipe]>], [2, 1]>, @@ -949,7 +989,7 @@ def CortexA9Itineraries : ProcessorItineraries< InstrItinData, // FIXME: all latencies are arbitrary, no information is available InstrStage<3, [A9_DRegsVFP], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<1, [A9_NPipe]>], [2, 1]>, @@ -958,7 +998,7 @@ def CortexA9Itineraries : ProcessorItineraries< InstrItinData, // FIXME: all latencies are arbitrary, no information is available InstrStage<3, [A9_DRegsVFP], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<1, [A9_NPipe]>], [2, 1, 1]>, @@ -967,7 +1007,7 @@ def CortexA9Itineraries : ProcessorItineraries< InstrItinData, // FIXME: all latencies are arbitrary, no information is available InstrStage<3, [A9_DRegsVFP], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<1, [A9_NPipe]>], [2, 1]>, @@ -976,7 +1016,7 @@ def CortexA9Itineraries : ProcessorItineraries< InstrItinData, // FIXME: all latencies are arbitrary, no information is available InstrStage<3, [A9_DRegsVFP], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<1, [A9_NPipe]>], [2, 2, 1]>, @@ -985,7 +1025,7 @@ def CortexA9Itineraries : ProcessorItineraries< InstrItinData, // FIXME: all latencies are arbitrary, no information is available InstrStage<4, [A9_DRegsVFP], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<2, [A9_NPipe]>], [3, 1, 1]>, @@ -995,7 +1035,7 @@ def CortexA9Itineraries : ProcessorItineraries< InstrItinData, // Extra latency cycles since wbck is 6 cycles InstrStage<7, [A9_DRegsVFP], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<1, [A9_NPipe]>], [3, 1]>, @@ -1004,7 +1044,7 @@ def CortexA9Itineraries : ProcessorItineraries< InstrItinData, // Extra latency cycles since wbck is 6 cycles InstrStage<7, [A9_DRegsVFP], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<1, [A9_NPipe]>], [5, 2]>, @@ -1015,7 +1055,7 @@ def CortexA9Itineraries : ProcessorItineraries< InstrItinData, // Extra latency cycles since wbck is 7 cycles InstrStage<8, [A9_DRegsVFP], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<2, [A9_NPipe]>], [6, 2]>, @@ -1026,7 +1066,7 @@ def CortexA9Itineraries : ProcessorItineraries< InstrItinData, // Extra latency cycles since wbck is 7 cycles InstrStage<7, [A9_DRegsVFP], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<1, [A9_NPipe]>], [5, 2, 2]>, @@ -1039,7 +1079,7 @@ def CortexA9Itineraries : ProcessorItineraries< InstrItinData, // Extra latency cycles since wbck is 8 cycles InstrStage<8, [A9_DRegsVFP], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<2, [A9_NPipe]>], [6, 2, 2]>, @@ -1048,7 +1088,7 @@ def CortexA9Itineraries : ProcessorItineraries< InstrItinData, // Extra latency cycles since wbck is 7 cycles InstrStage<8, [A9_DRegsVFP], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<2, [A9_NPipe]>], [6, 3, 2, 1]>, @@ -1059,7 +1099,7 @@ def CortexA9Itineraries : ProcessorItineraries< InstrItinData, // Extra latency cycles since wbck is 9 cycles InstrStage<10, [A9_DRegsVFP], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<4, [A9_NPipe]>], [8, 4, 2, 1]>, @@ -1068,7 +1108,7 @@ def CortexA9Itineraries : ProcessorItineraries< InstrItinData, // Extra latency cycles since wbck is 7 cycles InstrStage<8, [A9_DRegsVFP], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<2, [A9_NPipe]>], [6, 2, 2]>, @@ -1077,7 +1117,7 @@ def CortexA9Itineraries : ProcessorItineraries< InstrItinData, // Extra latency cycles since wbck is 9 cycles InstrStage<10, [A9_DRegsVFP], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<4, [A9_NPipe]>], [8, 2, 2]>, @@ -1086,7 +1126,7 @@ def CortexA9Itineraries : ProcessorItineraries< InstrItinData, // Extra latency cycles since wbck is 6 cycles InstrStage<7, [A9_DRegsVFP], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<1, [A9_NPipe]>], [2, 2, 1, 1]>, @@ -1097,7 +1137,7 @@ def CortexA9Itineraries : ProcessorItineraries< InstrItinData, // Extra latency cycles since wbck is 7 cycles InstrStage<8, [A9_DRegsVFP], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<2, [A9_NPipe]>], [3, 3, 1, 1]>, @@ -1108,7 +1148,7 @@ def CortexA9Itineraries : ProcessorItineraries< InstrItinData, // Extra latency cycles since wbck is 8 cycles InstrStage<9, [A9_DRegsVFP], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<3, [A9_NPipe]>], [4, 4, 1, 1]>, @@ -1118,7 +1158,7 @@ def CortexA9Itineraries : ProcessorItineraries< InstrItinData, // Extra latency cycles since wbck is 7 cycles InstrStage<7, [A9_DRegsVFP], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<1, [A9_NPipe]>], [2, 1, 1]>, @@ -1127,7 +1167,7 @@ def CortexA9Itineraries : ProcessorItineraries< InstrItinData, // Extra latency cycles since wbck is 9 cycles InstrStage<8, [A9_DRegsVFP], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<2, [A9_NPipe]>], [3, 1, 1]>, @@ -1136,28 +1176,28 @@ def CortexA9Itineraries : ProcessorItineraries< InstrItinData, // Extra latency cycles since wbck is 7 cycles InstrStage<8, [A9_DRegsVFP], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<2, [A9_NPipe]>], [3, 2, 1]>, InstrItinData, // Extra latency cycles since wbck is 7 cycles InstrStage<8, [A9_DRegsVFP], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<2, [A9_NPipe]>], [3, 2, 2, 1]>, InstrItinData, // Extra latency cycles since wbck is 8 cycles InstrStage<9, [A9_DRegsVFP], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<3, [A9_NPipe]>], [4, 2, 2, 3, 1]>, InstrItinData, // Extra latency cycles since wbck is 8 cycles InstrStage<9, [A9_DRegsVFP], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<3, [A9_NPipe]>], [4, 2, 2, 3, 3, 1]>, @@ -1166,28 +1206,28 @@ def CortexA9Itineraries : ProcessorItineraries< InstrItinData, // Extra latency cycles since wbck is 7 cycles InstrStage<8, [A9_DRegsVFP], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<2, [A9_NPipe]>], [3, 1, 2, 1]>, InstrItinData, // Extra latency cycles since wbck is 7 cycles InstrStage<8, [A9_DRegsVFP], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<2, [A9_NPipe]>], [3, 1, 2, 2, 1]>, InstrItinData, // Extra latency cycles since wbck is 8 cycles InstrStage<9, [A9_DRegsVFP], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<3, [A9_NPipe]>], [4, 1, 2, 2, 3, 1]>, InstrItinData, // Extra latency cycles since wbck is 8 cycles InstrStage<9, [A9_DRegsVFP], 0, Reserved>, - InstrStage<1, [A9_Pipe1]>, + InstrStage<1, [A9_Issue0, A9_Issue1], 0>, InstrStage<1, [A9_MUX0], 0>, InstrStage<2, [A9_NPipe]>], [4, 1, 2, 2, 3, 3, 1]>