blob: 27745e6530022fc392aa97244c18bbc6266d1e64 [file] [log] [blame]
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001//=- ARMScheduleA9.td - ARM Cortex-A9 Scheduling Definitions -*- tablegen -*-=//
Jim Grosbach7ea5fc02010-06-28 04:27:01 +00002//
Anton Korobeynikov090323a2010-04-07 18:22:11 +00003// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
Jim Grosbach7ea5fc02010-06-28 04:27:01 +00007//
Anton Korobeynikov090323a2010-04-07 18:22:11 +00008//===----------------------------------------------------------------------===//
9//
10// This file defines the itinerary class data for the ARM Cortex A9 processors.
11//
12//===----------------------------------------------------------------------===//
13
14//
15// Ad-hoc scheduling information derived from pretty vague "Cortex-A9 Technical
16// Reference Manual".
17//
Anton Korobeynikov7d62e332010-04-18 20:31:01 +000018// Functional units
Evan Cheng73eac2a2010-10-03 02:03:59 +000019def A9_Issue0 : FuncUnit; // Issue 0
20def A9_Issue1 : FuncUnit; // Issue 1
21def A9_Branch : FuncUnit; // Branch
22def A9_ALU0 : FuncUnit; // ALU / MUL pipeline 0
23def A9_ALU1 : FuncUnit; // ALU pipeline 1
Evan Cheng89e6f672010-10-01 19:41:46 +000024def A9_AGU : FuncUnit; // Address generation unit for ld / st
Evan Cheng73eac2a2010-10-03 02:03:59 +000025def A9_NPipe : FuncUnit; // NEON pipeline
26def A9_MUX0 : FuncUnit; // AGU + NEON/FPU multiplexer
Anton Korobeynikov7d62e332010-04-18 20:31:01 +000027def A9_DRegsVFP: FuncUnit; // FP register set, VFP side
28def A9_DRegsN : FuncUnit; // FP register set, NEON side
29
Evan Cheng4a010fd2010-09-29 22:42:35 +000030// Bypasses
31def A9_LdBypass : Bypass;
32
Anton Korobeynikov7d62e332010-04-18 20:31:01 +000033def CortexA9Itineraries : ProcessorItineraries<
Evan Cheng73eac2a2010-10-03 02:03:59 +000034 [A9_Issue0, A9_Issue1, A9_Branch, A9_ALU0, A9_ALU1, A9_AGU, A9_NPipe, A9_MUX0,
35 A9_DRegsVFP, A9_DRegsN],
Evan Cheng4a010fd2010-09-29 22:42:35 +000036 [A9_LdBypass], [
Anton Korobeynikov94d7fd82010-05-29 19:25:17 +000037 // Two fully-pipelined integer ALU pipelines
Evan Cheng2259d672010-09-29 00:49:25 +000038
Anton Korobeynikov94d7fd82010-05-29 19:25:17 +000039 //
40 // Move instructions, unconditional
Evan Cheng73eac2a2010-10-03 02:03:59 +000041 InstrItinData<IIC_iMOVi , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
42 InstrStage<1, [A9_ALU0, A9_ALU1]>], [1]>,
43 InstrItinData<IIC_iMOVr , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
44 InstrStage<1, [A9_ALU0, A9_ALU1]>], [1, 1]>,
45 InstrItinData<IIC_iMOVsi , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
46 InstrStage<1, [A9_ALU0, A9_ALU1]>], [1, 1]>,
47 InstrItinData<IIC_iMOVsr , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
48 InstrStage<2, [A9_ALU0, A9_ALU1]>], [2, 1, 1]>,
49 InstrItinData<IIC_iMOVix2 , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
50 InstrStage<1, [A9_ALU0, A9_ALU1]>,
51 InstrStage<1, [A9_ALU0, A9_ALU1]>], [2]>,
Evan Cheng2259d672010-09-29 00:49:25 +000052 //
53 // MVN instructions
Evan Cheng73eac2a2010-10-03 02:03:59 +000054 InstrItinData<IIC_iMVNi , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
55 InstrStage<1, [A9_ALU0, A9_ALU1]>],
Evan Cheng4a010fd2010-09-29 22:42:35 +000056 [1]>,
Evan Cheng73eac2a2010-10-03 02:03:59 +000057 InstrItinData<IIC_iMVNr , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
58 InstrStage<1, [A9_ALU0, A9_ALU1]>],
Evan Cheng4a010fd2010-09-29 22:42:35 +000059 [1, 1], [NoBypass, A9_LdBypass]>,
Evan Cheng73eac2a2010-10-03 02:03:59 +000060 InstrItinData<IIC_iMVNsi , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
61 InstrStage<2, [A9_ALU0, A9_ALU1]>],
Evan Cheng2fb20b12010-09-30 01:08:25 +000062 [2, 1]>,
Evan Cheng73eac2a2010-10-03 02:03:59 +000063 InstrItinData<IIC_iMVNsr , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
64 InstrStage<3, [A9_ALU0, A9_ALU1]>],
Evan Cheng2fb20b12010-09-30 01:08:25 +000065 [3, 1, 1]>,
Anton Korobeynikov94d7fd82010-05-29 19:25:17 +000066 //
67 // No operand cycles
Evan Cheng73eac2a2010-10-03 02:03:59 +000068 InstrItinData<IIC_iALUx , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
69 InstrStage<1, [A9_ALU0, A9_ALU1]>]>,
Anton Korobeynikov94d7fd82010-05-29 19:25:17 +000070 //
71 // Binary Instructions that produce a result
Evan Cheng73eac2a2010-10-03 02:03:59 +000072 InstrItinData<IIC_iALUi , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
73 InstrStage<1, [A9_ALU0, A9_ALU1]>],
Evan Cheng2fb20b12010-09-30 01:08:25 +000074 [1, 1], [NoBypass, A9_LdBypass]>,
Evan Cheng73eac2a2010-10-03 02:03:59 +000075 InstrItinData<IIC_iALUr , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
76 InstrStage<1, [A9_ALU0, A9_ALU1]>],
Evan Cheng2fb20b12010-09-30 01:08:25 +000077 [1, 1, 1], [NoBypass, A9_LdBypass, A9_LdBypass]>,
Evan Cheng73eac2a2010-10-03 02:03:59 +000078 InstrItinData<IIC_iALUsi, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
79 InstrStage<2, [A9_ALU0, A9_ALU1]>],
Evan Cheng2fb20b12010-09-30 01:08:25 +000080 [2, 1, 1], [NoBypass, A9_LdBypass, NoBypass]>,
Evan Cheng73eac2a2010-10-03 02:03:59 +000081 InstrItinData<IIC_iALUsir,[InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
82 InstrStage<2, [A9_ALU0, A9_ALU1]>],
Evan Cheng2fb20b12010-09-30 01:08:25 +000083 [2, 1, 1], [NoBypass, NoBypass, A9_LdBypass]>,
Evan Cheng73eac2a2010-10-03 02:03:59 +000084 InstrItinData<IIC_iALUsr, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
85 InstrStage<3, [A9_ALU0, A9_ALU1]>],
Evan Cheng2fb20b12010-09-30 01:08:25 +000086 [3, 1, 1, 1],
Evan Cheng4a010fd2010-09-29 22:42:35 +000087 [NoBypass, A9_LdBypass, NoBypass, NoBypass]>,
Anton Korobeynikov94d7fd82010-05-29 19:25:17 +000088 //
Evan Chengc35d7bb2010-09-29 00:27:46 +000089 // Bitwise Instructions that produce a result
Evan Cheng73eac2a2010-10-03 02:03:59 +000090 InstrItinData<IIC_iBITi , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
91 InstrStage<1, [A9_ALU0, A9_ALU1]>], [1, 1]>,
92 InstrItinData<IIC_iBITr , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
93 InstrStage<1, [A9_ALU0, A9_ALU1]>], [1, 1, 1]>,
94 InstrItinData<IIC_iBITsi, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
95 InstrStage<2, [A9_ALU0, A9_ALU1]>], [2, 1, 1]>,
96 InstrItinData<IIC_iBITsr, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
97 InstrStage<3, [A9_ALU0, A9_ALU1]>], [3, 1, 1, 1]>,
Evan Chengc35d7bb2010-09-29 00:27:46 +000098 //
Anton Korobeynikov94d7fd82010-05-29 19:25:17 +000099 // Unary Instructions that produce a result
Evan Cheng2fb20b12010-09-30 01:08:25 +0000100
101 // CLZ, RBIT, etc.
Evan Cheng73eac2a2010-10-03 02:03:59 +0000102 InstrItinData<IIC_iUNAr , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
103 InstrStage<1, [A9_ALU0, A9_ALU1]>], [1, 1]>,
Evan Cheng2fb20b12010-09-30 01:08:25 +0000104
105 // BFC, BFI, UBFX, SBFX
Evan Cheng73eac2a2010-10-03 02:03:59 +0000106 InstrItinData<IIC_iUNAsi, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
107 InstrStage<2, [A9_ALU0, A9_ALU1]>], [2, 1]>,
Evan Cheng2fb20b12010-09-30 01:08:25 +0000108
Anton Korobeynikov94d7fd82010-05-29 19:25:17 +0000109 //
Evan Cheng62d626c2010-09-25 00:49:35 +0000110 // Zero and sign extension instructions
Evan Cheng73eac2a2010-10-03 02:03:59 +0000111 InstrItinData<IIC_iEXTr , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
112 InstrStage<1, [A9_ALU0, A9_ALU1]>], [2, 1]>,
113 InstrItinData<IIC_iEXTAr, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
114 InstrStage<2, [A9_ALU0, A9_ALU1]>], [3, 1, 1]>,
115 InstrItinData<IIC_iEXTAsr,[InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
116 InstrStage<3, [A9_ALU0, A9_ALU1]>], [3, 1, 1, 1]>,
Evan Cheng62d626c2010-09-25 00:49:35 +0000117 //
Anton Korobeynikov94d7fd82010-05-29 19:25:17 +0000118 // Compare instructions
Evan Cheng73eac2a2010-10-03 02:03:59 +0000119 InstrItinData<IIC_iCMPi , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
120 InstrStage<1, [A9_ALU0, A9_ALU1]>],
121 [1], [A9_LdBypass]>,
122 InstrItinData<IIC_iCMPr , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
123 InstrStage<1, [A9_ALU0, A9_ALU1]>],
124 [1, 1], [A9_LdBypass, A9_LdBypass]>,
125 InstrItinData<IIC_iCMPsi , [InstrStage<2, [A9_ALU0, A9_ALU1]>],
126 [1, 1], [A9_LdBypass, NoBypass]>,
127 InstrItinData<IIC_iCMPsr , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
128 InstrStage<3, [A9_ALU0, A9_ALU1]>],
Evan Cheng2fb20b12010-09-30 01:08:25 +0000129 [1, 1, 1], [A9_LdBypass, NoBypass, NoBypass]>,
Anton Korobeynikov94d7fd82010-05-29 19:25:17 +0000130 //
Evan Cheng2259d672010-09-29 00:49:25 +0000131 // Test instructions
Evan Cheng73eac2a2010-10-03 02:03:59 +0000132 InstrItinData<IIC_iTSTi , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
133 InstrStage<1, [A9_ALU0, A9_ALU1]>], [1]>,
134 InstrItinData<IIC_iTSTr , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
135 InstrStage<1, [A9_ALU0, A9_ALU1]>], [1, 1]>,
136 InstrItinData<IIC_iTSTsi , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
137 InstrStage<2, [A9_ALU0, A9_ALU1]>], [1, 1]>,
138 InstrItinData<IIC_iTSTsr , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
139 InstrStage<3, [A9_ALU0, A9_ALU1]>], [1, 1, 1]>,
Evan Cheng2259d672010-09-29 00:49:25 +0000140 //
Anton Korobeynikov94d7fd82010-05-29 19:25:17 +0000141 // Move instructions, conditional
Evan Cheng2fb20b12010-09-30 01:08:25 +0000142 // FIXME: Correctly model the extra input dep on the destination.
Evan Cheng73eac2a2010-10-03 02:03:59 +0000143 InstrItinData<IIC_iCMOVi , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
144 InstrStage<1, [A9_ALU0, A9_ALU1]>], [1]>,
145 InstrItinData<IIC_iCMOVr , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
146 InstrStage<1, [A9_ALU0, A9_ALU1]>], [1, 1]>,
147 InstrItinData<IIC_iCMOVsi , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
148 InstrStage<1, [A9_ALU0, A9_ALU1]>], [1, 1]>,
149 InstrItinData<IIC_iCMOVsr , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
150 InstrStage<2, [A9_ALU0, A9_ALU1]>], [2, 1, 1]>,
Anton Korobeynikov94d7fd82010-05-29 19:25:17 +0000151
152 // Integer multiply pipeline
153 //
Evan Cheng73eac2a2010-10-03 02:03:59 +0000154 InstrItinData<IIC_iMUL16 , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
155 InstrStage<2, [A9_ALU0]>], [3, 1, 1]>,
156 InstrItinData<IIC_iMAC16 , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
157 InstrStage<2, [A9_ALU0]>],
158 [3, 1, 1, 1]>,
159 InstrItinData<IIC_iMUL32 , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
160 InstrStage<2, [A9_ALU0]>], [4, 1, 1]>,
161 InstrItinData<IIC_iMAC32 , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
162 InstrStage<2, [A9_ALU0]>],
163 [4, 1, 1, 1]>,
164 InstrItinData<IIC_iMUL64 , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
165 InstrStage<3, [A9_ALU0]>], [4, 5, 1, 1]>,
166 InstrItinData<IIC_iMAC64 , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
167 InstrStage<3, [A9_ALU0]>],
168 [4, 5, 1, 1]>,
Anton Korobeynikov2a21aef2010-05-29 19:25:34 +0000169 // Integer load pipeline
170 // FIXME: The timings are some rough approximations
171 //
172 // Immediate offset
Evan Cheng73eac2a2010-10-03 02:03:59 +0000173 InstrItinData<IIC_iLoad_i , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000174 InstrStage<1, [A9_MUX0], 0>,
175 InstrStage<1, [A9_AGU]>],
Evan Cheng2fb20b12010-09-30 01:08:25 +0000176 [3, 1], [A9_LdBypass]>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000177 InstrItinData<IIC_iLoad_bh_i, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000178 InstrStage<1, [A9_MUX0], 0>,
179 InstrStage<2, [A9_AGU]>],
Evan Cheng2fb20b12010-09-30 01:08:25 +0000180 [4, 1], [A9_LdBypass]>,
181 // FIXME: If address is 64-bit aligned, AGU cycles is 1.
Evan Cheng73eac2a2010-10-03 02:03:59 +0000182 InstrItinData<IIC_iLoad_d_i , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000183 InstrStage<1, [A9_MUX0], 0>,
184 InstrStage<2, [A9_AGU]>],
Evan Cheng2fb20b12010-09-30 01:08:25 +0000185 [3, 3, 1], [A9_LdBypass]>,
Anton Korobeynikov2a21aef2010-05-29 19:25:34 +0000186 //
187 // Register offset
Evan Cheng73eac2a2010-10-03 02:03:59 +0000188 InstrItinData<IIC_iLoad_r , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000189 InstrStage<1, [A9_MUX0], 0>,
190 InstrStage<1, [A9_AGU]>],
Evan Cheng2fb20b12010-09-30 01:08:25 +0000191 [3, 1, 1], [A9_LdBypass]>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000192 InstrItinData<IIC_iLoad_bh_r, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000193 InstrStage<1, [A9_MUX0], 0>,
194 InstrStage<2, [A9_AGU]>],
Evan Cheng2fb20b12010-09-30 01:08:25 +0000195 [4, 1, 1], [A9_LdBypass]>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000196 InstrItinData<IIC_iLoad_d_r , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000197 InstrStage<1, [A9_MUX0], 0>,
198 InstrStage<2, [A9_AGU]>],
Evan Cheng2fb20b12010-09-30 01:08:25 +0000199 [3, 3, 1, 1], [A9_LdBypass]>,
Anton Korobeynikov2a21aef2010-05-29 19:25:34 +0000200 //
201 // Scaled register offset
Evan Cheng73eac2a2010-10-03 02:03:59 +0000202 InstrItinData<IIC_iLoad_si , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000203 InstrStage<1, [A9_MUX0], 0>,
204 InstrStage<1, [A9_AGU]>],
Evan Cheng2fb20b12010-09-30 01:08:25 +0000205 [4, 1, 1], [A9_LdBypass]>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000206 InstrItinData<IIC_iLoad_bh_si,[InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000207 InstrStage<1, [A9_MUX0], 0>,
208 InstrStage<2, [A9_AGU]>],
Evan Cheng2fb20b12010-09-30 01:08:25 +0000209 [5, 1, 1], [A9_LdBypass]>,
Anton Korobeynikov2a21aef2010-05-29 19:25:34 +0000210 //
211 // Immediate offset with update
Evan Cheng73eac2a2010-10-03 02:03:59 +0000212 InstrItinData<IIC_iLoad_iu , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000213 InstrStage<1, [A9_MUX0], 0>,
214 InstrStage<1, [A9_AGU]>],
Evan Cheng2fb20b12010-09-30 01:08:25 +0000215 [3, 2, 1], [A9_LdBypass]>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000216 InstrItinData<IIC_iLoad_bh_iu,[InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000217 InstrStage<1, [A9_MUX0], 0>,
218 InstrStage<2, [A9_AGU]>],
Evan Cheng2fb20b12010-09-30 01:08:25 +0000219 [4, 3, 1], [A9_LdBypass]>,
Anton Korobeynikov2a21aef2010-05-29 19:25:34 +0000220 //
221 // Register offset with update
Evan Cheng73eac2a2010-10-03 02:03:59 +0000222 InstrItinData<IIC_iLoad_ru , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000223 InstrStage<1, [A9_MUX0], 0>,
224 InstrStage<1, [A9_AGU]>],
Evan Cheng2fb20b12010-09-30 01:08:25 +0000225 [3, 2, 1, 1], [A9_LdBypass]>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000226 InstrItinData<IIC_iLoad_bh_ru,[InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000227 InstrStage<1, [A9_MUX0], 0>,
228 InstrStage<2, [A9_AGU]>],
Evan Cheng2fb20b12010-09-30 01:08:25 +0000229 [4, 3, 1, 1], [A9_LdBypass]>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000230 InstrItinData<IIC_iLoad_d_ru, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000231 InstrStage<1, [A9_MUX0], 0>,
232 InstrStage<2, [A9_AGU]>],
Evan Cheng2fb20b12010-09-30 01:08:25 +0000233 [3, 3, 1, 1], [A9_LdBypass]>,
Anton Korobeynikov2a21aef2010-05-29 19:25:34 +0000234 //
235 // Scaled register offset with update
Evan Cheng73eac2a2010-10-03 02:03:59 +0000236 InstrItinData<IIC_iLoad_siu , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000237 InstrStage<1, [A9_MUX0], 0>,
238 InstrStage<1, [A9_AGU]>],
Evan Cheng2fb20b12010-09-30 01:08:25 +0000239 [4, 3, 1, 1], [A9_LdBypass]>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000240 InstrItinData<IIC_iLoad_bh_siu,[InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000241 InstrStage<1, [A9_MUX0], 0>,
242 InstrStage<2, [A9_AGU]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000243 [5, 4, 1, 1], [A9_LdBypass]>,
Anton Korobeynikov2a21aef2010-05-29 19:25:34 +0000244 //
Evan Cheng49d4c0b2010-10-06 06:27:31 +0000245 // Load multiple, def is the 5th operand.
246 InstrItinData<IIC_iLoad_m , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000247 InstrStage<1, [A9_MUX0], 0>,
248 InstrStage<2, [A9_AGU]>],
Evan Cheng49d4c0b2010-10-06 06:27:31 +0000249 [1, 1, 1, 1, 3],
250 [NoBypass, NoBypass, NoBypass, NoBypass, A9_LdBypass]>,
251 //
252 // Load multiple + update, defs are the 1st and 5th operands.
253 InstrItinData<IIC_iLoad_mu , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
254 InstrStage<1, [A9_MUX0], 0>,
255 InstrStage<2, [A9_AGU]>],
256 [2, 1, 1, 1, 3],
257 [NoBypass, NoBypass, NoBypass, NoBypass, A9_LdBypass]>,
Evan Cheng722cd122010-09-08 22:57:08 +0000258 //
259 // Load multiple plus branch
Evan Cheng49d4c0b2010-10-06 06:27:31 +0000260 InstrItinData<IIC_iLoad_mBr, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000261 InstrStage<1, [A9_MUX0], 0>,
262 InstrStage<1, [A9_AGU]>,
Evan Cheng49d4c0b2010-10-06 06:27:31 +0000263 InstrStage<1, [A9_Branch]>],
264 [1, 2, 1, 1, 3],
265 [NoBypass, NoBypass, NoBypass, NoBypass, A9_LdBypass]>,
266 //
267 // Pop, def is the 3rd operand.
268 InstrItinData<IIC_iPop , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
269 InstrStage<1, [A9_MUX0], 0>,
270 InstrStage<2, [A9_AGU]>],
271 [1, 1, 3],
272 [NoBypass, NoBypass, A9_LdBypass]>,
273 //
274 // Pop + branch, def is the 3rd operand.
275 InstrItinData<IIC_iPop_Br, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
276 InstrStage<1, [A9_MUX0], 0>,
277 InstrStage<2, [A9_AGU]>,
278 InstrStage<1, [A9_Branch]>],
279 [1, 1, 3],
280 [NoBypass, NoBypass, A9_LdBypass]>,
Evan Cheng722cd122010-09-08 22:57:08 +0000281
Evan Chenge37da032010-09-24 22:41:41 +0000282 //
283 // iLoadi + iALUr for t2LDRpci_pic.
Evan Cheng73eac2a2010-10-03 02:03:59 +0000284 InstrItinData<IIC_iLoadiALU, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000285 InstrStage<1, [A9_MUX0], 0>,
286 InstrStage<1, [A9_AGU]>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000287 InstrStage<1, [A9_ALU0, A9_ALU1]>],
Evan Cheng4a010fd2010-09-29 22:42:35 +0000288 [2, 1]>,
Evan Chenge37da032010-09-24 22:41:41 +0000289
Anton Korobeynikov2a21aef2010-05-29 19:25:34 +0000290 // Integer store pipeline
291 ///
292 // Immediate offset
Evan Cheng73eac2a2010-10-03 02:03:59 +0000293 InstrItinData<IIC_iStore_i , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000294 InstrStage<1, [A9_MUX0], 0>,
295 InstrStage<1, [A9_AGU]>], [1, 1]>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000296 InstrItinData<IIC_iStore_bh_i,[InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000297 InstrStage<1, [A9_MUX0], 0>,
298 InstrStage<2, [A9_AGU]>], [1, 1]>,
Evan Cheng2fb20b12010-09-30 01:08:25 +0000299 // FIXME: If address is 64-bit aligned, AGU cycles is 1.
Evan Cheng73eac2a2010-10-03 02:03:59 +0000300 InstrItinData<IIC_iStore_d_i, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000301 InstrStage<1, [A9_MUX0], 0>,
302 InstrStage<2, [A9_AGU]>], [1, 1]>,
Anton Korobeynikov2a21aef2010-05-29 19:25:34 +0000303 //
304 // Register offset
Evan Cheng73eac2a2010-10-03 02:03:59 +0000305 InstrItinData<IIC_iStore_r , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000306 InstrStage<1, [A9_MUX0], 0>,
307 InstrStage<1, [A9_AGU]>], [1, 1, 1]>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000308 InstrItinData<IIC_iStore_bh_r,[InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000309 InstrStage<1, [A9_MUX0], 0>,
310 InstrStage<2, [A9_AGU]>], [1, 1, 1]>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000311 InstrItinData<IIC_iStore_d_r, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000312 InstrStage<1, [A9_MUX0], 0>,
313 InstrStage<2, [A9_AGU]>], [1, 1, 1]>,
Anton Korobeynikov2a21aef2010-05-29 19:25:34 +0000314 //
315 // Scaled register offset
Evan Cheng73eac2a2010-10-03 02:03:59 +0000316 InstrItinData<IIC_iStore_si , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
317 InstrStage<1, [A9_MUX0], 0>,
318 InstrStage<1, [A9_AGU]>], [1, 1, 1]>,
319 InstrItinData<IIC_iStore_bh_si,[InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000320 InstrStage<1, [A9_MUX0], 0>,
321 InstrStage<2, [A9_AGU]>], [1, 1, 1]>,
Anton Korobeynikov2a21aef2010-05-29 19:25:34 +0000322 //
323 // Immediate offset with update
Evan Cheng73eac2a2010-10-03 02:03:59 +0000324 InstrItinData<IIC_iStore_iu , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
325 InstrStage<1, [A9_MUX0], 0>,
326 InstrStage<1, [A9_AGU]>], [2, 1, 1]>,
327 InstrItinData<IIC_iStore_bh_iu,[InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000328 InstrStage<1, [A9_MUX0], 0>,
329 InstrStage<2, [A9_AGU]>], [3, 1, 1]>,
Anton Korobeynikov2a21aef2010-05-29 19:25:34 +0000330 //
331 // Register offset with update
Evan Cheng73eac2a2010-10-03 02:03:59 +0000332 InstrItinData<IIC_iStore_ru , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
333 InstrStage<1, [A9_MUX0], 0>,
334 InstrStage<1, [A9_AGU]>],
335 [2, 1, 1, 1]>,
336 InstrItinData<IIC_iStore_bh_ru,[InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000337 InstrStage<1, [A9_MUX0], 0>,
338 InstrStage<2, [A9_AGU]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000339 [3, 1, 1, 1]>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000340 InstrItinData<IIC_iStore_d_ru, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
341 InstrStage<1, [A9_MUX0], 0>,
342 InstrStage<2, [A9_AGU]>],
343 [3, 1, 1, 1]>,
Anton Korobeynikov2a21aef2010-05-29 19:25:34 +0000344 //
345 // Scaled register offset with update
Evan Cheng73eac2a2010-10-03 02:03:59 +0000346 InstrItinData<IIC_iStore_siu, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
347 InstrStage<1, [A9_MUX0], 0>,
348 InstrStage<1, [A9_AGU]>],
349 [2, 1, 1, 1]>,
350 InstrItinData<IIC_iStore_bh_siu, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
351 InstrStage<1, [A9_MUX0], 0>,
352 InstrStage<2, [A9_AGU]>],
353 [3, 1, 1, 1]>,
Anton Korobeynikov2a21aef2010-05-29 19:25:34 +0000354 //
355 // Store multiple
Evan Cheng49d4c0b2010-10-06 06:27:31 +0000356 InstrItinData<IIC_iStore_m , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000357 InstrStage<1, [A9_MUX0], 0>,
358 InstrStage<1, [A9_AGU]>]>,
Evan Cheng49d4c0b2010-10-06 06:27:31 +0000359 //
360 // Store multiple + update
361 InstrItinData<IIC_iStore_mu, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
362 InstrStage<1, [A9_MUX0], 0>,
363 InstrStage<1, [A9_AGU]>], [2]>,
364
Anton Korobeynikov94d7fd82010-05-29 19:25:17 +0000365 // Branch
366 //
367 // no delay slots, so the latency of a branch is unimportant
Evan Cheng49d4c0b2010-10-06 06:27:31 +0000368 InstrItinData<IIC_Br , [InstrStage<1, [A9_Issue0], 0>,
369 InstrStage<1, [A9_Issue1], 0>,
370 InstrStage<1, [A9_Branch]>]>,
Anton Korobeynikov94d7fd82010-05-29 19:25:17 +0000371
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000372 // VFP and NEON shares the same register file. This means that every VFP
373 // instruction should wait for full completion of the consecutive NEON
374 // instruction and vice-versa. We model this behavior with two artificial FUs:
375 // DRegsVFP and DRegsVFP.
376 //
377 // Every VFP instruction:
378 // - Acquires DRegsVFP resource for 1 cycle
379 // - Reserves DRegsN resource for the whole duration (including time to
380 // register file writeback!).
381 // Every NEON instruction does the same but with FUs swapped.
382 //
Jim Grosbach7ea5fc02010-06-28 04:27:01 +0000383 // Since the reserved FU cannot be acquired, this models precisely
384 // "cross-domain" stalls.
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000385
386 // VFP
387 // Issue through integer pipeline, and execute in NEON unit.
388
389 // FP Special Register to Integer Register File Move
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000390 InstrItinData<IIC_fpSTAT , [InstrStage<1, [A9_DRegsVFP], 0, Required>,
391 InstrStage<2, [A9_DRegsN], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000392 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000393 InstrStage<1, [A9_MUX0], 0>,
394 InstrStage<1, [A9_NPipe]>]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000395 //
396 // Single-precision FP Unary
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000397 InstrItinData<IIC_fpUNA32 , [InstrStage<1, [A9_DRegsVFP], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000398 // Extra latency cycles since wbck is 2 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000399 InstrStage<3, [A9_DRegsN], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000400 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000401 InstrStage<1, [A9_MUX0], 0>,
402 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000403 [1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000404 //
405 // Double-precision FP Unary
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000406 InstrItinData<IIC_fpUNA64 , [InstrStage<1, [A9_DRegsVFP], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000407 // Extra latency cycles since wbck is 2 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000408 InstrStage<3, [A9_DRegsN], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000409 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000410 InstrStage<1, [A9_MUX0], 0>,
411 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000412 [1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000413
414 //
415 // Single-precision FP Compare
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000416 InstrItinData<IIC_fpCMP32 , [InstrStage<1, [A9_DRegsVFP], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000417 // Extra latency cycles since wbck is 4 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000418 InstrStage<5, [A9_DRegsN], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000419 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000420 InstrStage<1, [A9_MUX0], 0>,
421 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000422 [1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000423 //
424 // Double-precision FP Compare
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000425 InstrItinData<IIC_fpCMP64 , [InstrStage<1, [A9_DRegsVFP], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000426 // Extra latency cycles since wbck is 4 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000427 InstrStage<5, [A9_DRegsN], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000428 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000429 InstrStage<1, [A9_MUX0], 0>,
430 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000431 [1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000432 //
433 // Single to Double FP Convert
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000434 InstrItinData<IIC_fpCVTSD , [InstrStage<1, [A9_DRegsVFP], 0, Required>,
435 InstrStage<5, [A9_DRegsN], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000436 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000437 InstrStage<1, [A9_MUX0], 0>,
438 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000439 [4, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000440 //
441 // Double to Single FP Convert
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000442 InstrItinData<IIC_fpCVTDS , [InstrStage<1, [A9_DRegsVFP], 0, Required>,
443 InstrStage<5, [A9_DRegsN], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000444 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000445 InstrStage<1, [A9_MUX0], 0>,
446 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000447 [4, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000448
449 //
450 // Single to Half FP Convert
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000451 InstrItinData<IIC_fpCVTSH , [InstrStage<1, [A9_DRegsVFP], 0, Required>,
452 InstrStage<5, [A9_DRegsN], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000453 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000454 InstrStage<1, [A9_MUX0], 0>,
455 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000456 [4, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000457 //
458 // Half to Single FP Convert
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000459 InstrItinData<IIC_fpCVTHS , [InstrStage<1, [A9_DRegsVFP], 0, Required>,
460 InstrStage<3, [A9_DRegsN], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000461 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000462 InstrStage<1, [A9_MUX0], 0>,
463 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000464 [2, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000465
466 //
467 // Single-Precision FP to Integer Convert
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000468 InstrItinData<IIC_fpCVTSI , [InstrStage<1, [A9_DRegsVFP], 0, Required>,
469 InstrStage<5, [A9_DRegsN], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000470 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000471 InstrStage<1, [A9_MUX0], 0>,
472 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000473 [4, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000474 //
475 // Double-Precision FP to Integer Convert
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000476 InstrItinData<IIC_fpCVTDI , [InstrStage<1, [A9_DRegsVFP], 0, Required>,
477 InstrStage<5, [A9_DRegsN], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000478 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000479 InstrStage<1, [A9_MUX0], 0>,
480 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000481 [4, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000482 //
483 // Integer to Single-Precision FP Convert
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000484 InstrItinData<IIC_fpCVTIS , [InstrStage<1, [A9_DRegsVFP], 0, Required>,
485 InstrStage<5, [A9_DRegsN], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000486 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000487 InstrStage<1, [A9_MUX0], 0>,
488 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000489 [4, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000490 //
491 // Integer to Double-Precision FP Convert
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000492 InstrItinData<IIC_fpCVTID , [InstrStage<1, [A9_DRegsVFP], 0, Required>,
493 InstrStage<5, [A9_DRegsN], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000494 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000495 InstrStage<1, [A9_MUX0], 0>,
496 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000497 [4, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000498 //
499 // Single-precision FP ALU
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000500 InstrItinData<IIC_fpALU32 , [InstrStage<1, [A9_DRegsVFP], 0, Required>,
501 InstrStage<5, [A9_DRegsN], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000502 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000503 InstrStage<1, [A9_MUX0], 0>,
504 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000505 [4, 1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000506 //
507 // Double-precision FP ALU
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000508 InstrItinData<IIC_fpALU64 , [InstrStage<1, [A9_DRegsVFP], 0, Required>,
509 InstrStage<5, [A9_DRegsN], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000510 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000511 InstrStage<1, [A9_MUX0], 0>,
512 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000513 [4, 1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000514 //
515 // Single-precision FP Multiply
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000516 InstrItinData<IIC_fpMUL32 , [InstrStage<1, [A9_DRegsVFP], 0, Required>,
517 InstrStage<6, [A9_DRegsN], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000518 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000519 InstrStage<1, [A9_MUX0], 0>,
520 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000521 [5, 1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000522 //
523 // Double-precision FP Multiply
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000524 InstrItinData<IIC_fpMUL64 , [InstrStage<1, [A9_DRegsVFP], 0, Required>,
525 InstrStage<7, [A9_DRegsN], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000526 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000527 InstrStage<1, [A9_MUX0], 0>,
528 InstrStage<2, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000529 [6, 1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000530 //
531 // Single-precision FP MAC
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000532 InstrItinData<IIC_fpMAC32 , [InstrStage<1, [A9_DRegsVFP], 0, Required>,
533 InstrStage<9, [A9_DRegsN], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000534 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000535 InstrStage<1, [A9_MUX0], 0>,
536 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000537 [8, 0, 1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000538 //
539 // Double-precision FP MAC
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000540 InstrItinData<IIC_fpMAC64 , [InstrStage<1, [A9_DRegsVFP], 0, Required>,
541 InstrStage<10, [A9_DRegsN], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000542 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000543 InstrStage<1, [A9_MUX0], 0>,
544 InstrStage<2, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000545 [9, 0, 1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000546 //
547 // Single-precision FP DIV
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000548 InstrItinData<IIC_fpDIV32 , [InstrStage<1, [A9_DRegsVFP], 0, Required>,
549 InstrStage<16, [A9_DRegsN], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000550 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000551 InstrStage<1, [A9_MUX0], 0>,
552 InstrStage<10, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000553 [15, 1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000554 //
555 // Double-precision FP DIV
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000556 InstrItinData<IIC_fpDIV64 , [InstrStage<1, [A9_DRegsVFP], 0, Required>,
557 InstrStage<26, [A9_DRegsN], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000558 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000559 InstrStage<1, [A9_MUX0], 0>,
560 InstrStage<20, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000561 [25, 1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000562 //
563 // Single-precision FP SQRT
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000564 InstrItinData<IIC_fpSQRT32, [InstrStage<1, [A9_DRegsVFP], 0, Required>,
565 InstrStage<18, [A9_DRegsN], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000566 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000567 InstrStage<1, [A9_MUX0], 0>,
568 InstrStage<13, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000569 [17, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000570 //
571 // Double-precision FP SQRT
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000572 InstrItinData<IIC_fpSQRT64, [InstrStage<1, [A9_DRegsVFP], 0, Required>,
573 InstrStage<33, [A9_DRegsN], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000574 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000575 InstrStage<1, [A9_MUX0], 0>,
576 InstrStage<28, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000577 [32, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000578
579 //
580 // Integer to Single-precision Move
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000581 InstrItinData<IIC_fpMOVIS, [InstrStage<1, [A9_DRegsVFP], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000582 // Extra 1 latency cycle since wbck is 2 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000583 InstrStage<3, [A9_DRegsN], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000584 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000585 InstrStage<1, [A9_MUX0], 0>,
586 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000587 [1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000588 //
589 // Integer to Double-precision Move
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000590 InstrItinData<IIC_fpMOVID, [InstrStage<1, [A9_DRegsVFP], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000591 // Extra 1 latency cycle since wbck is 2 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000592 InstrStage<3, [A9_DRegsN], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000593 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000594 InstrStage<1, [A9_MUX0], 0>,
595 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000596 [1, 1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000597 //
598 // Single-precision to Integer Move
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000599 InstrItinData<IIC_fpMOVSI, [InstrStage<1, [A9_DRegsVFP], 0, Required>,
600 InstrStage<2, [A9_DRegsN], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000601 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000602 InstrStage<1, [A9_MUX0], 0>,
603 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000604 [1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000605 //
606 // Double-precision to Integer Move
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000607 InstrItinData<IIC_fpMOVDI, [InstrStage<1, [A9_DRegsVFP], 0, Required>,
608 InstrStage<2, [A9_DRegsN], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000609 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000610 InstrStage<1, [A9_MUX0], 0>,
611 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000612 [1, 1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000613 //
614 // Single-precision FP Load
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000615 InstrItinData<IIC_fpLoad32, [InstrStage<1, [A9_DRegsVFP], 0, Required>,
616 InstrStage<2, [A9_DRegsN], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000617 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000618 InstrStage<1, [A9_MUX0], 0>,
619 InstrStage<1, [A9_NPipe]>],
Evan Chengf3179562010-10-01 21:40:30 +0000620 [1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000621 //
622 // Double-precision FP Load
Evan Chengf3179562010-10-01 21:40:30 +0000623 // FIXME: Result latency is 1 if address is 64-bit aligned.
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000624 InstrItinData<IIC_fpLoad64, [InstrStage<1, [A9_DRegsVFP], 0, Required>,
625 InstrStage<2, [A9_DRegsN], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000626 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000627 InstrStage<1, [A9_MUX0], 0>,
628 InstrStage<1, [A9_NPipe]>],
Evan Chengf3179562010-10-01 21:40:30 +0000629 [2, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000630 //
631 // FP Load Multiple
Evan Cheng1958cef2010-10-07 01:50:48 +0000632 InstrItinData<IIC_fpLoad_m, [InstrStage<1, [A9_DRegsVFP], 0, Required>,
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000633 InstrStage<2, [A9_DRegsN], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000634 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000635 InstrStage<1, [A9_MUX0], 0>,
Evan Cheng1958cef2010-10-07 01:50:48 +0000636 InstrStage<1, [A9_NPipe]>], [1, 1, 1, 1]>,
637 //
638 // FP Load Multiple + update
639 InstrItinData<IIC_fpLoad_mu,[InstrStage<1, [A9_DRegsVFP], 0, Required>,
640 InstrStage<2, [A9_DRegsN], 0, Reserved>,
641 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
642 InstrStage<1, [A9_MUX0], 0>,
643 InstrStage<1, [A9_NPipe]>], [2, 1, 1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000644 //
645 // Single-precision FP Store
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000646 InstrItinData<IIC_fpStore32,[InstrStage<1, [A9_DRegsVFP], 0, Required>,
647 InstrStage<2, [A9_DRegsN], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000648 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000649 InstrStage<1, [A9_MUX0], 0>,
650 InstrStage<1, [A9_NPipe]>],
Evan Chengf3179562010-10-01 21:40:30 +0000651 [1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000652 //
653 // Double-precision FP Store
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000654 InstrItinData<IIC_fpStore64,[InstrStage<1, [A9_DRegsVFP], 0, Required>,
655 InstrStage<2, [A9_DRegsN], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000656 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000657 InstrStage<1, [A9_MUX0], 0>,
658 InstrStage<1, [A9_NPipe]>],
Evan Chengf3179562010-10-01 21:40:30 +0000659 [1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000660 //
661 // FP Store Multiple
Evan Cheng1958cef2010-10-07 01:50:48 +0000662 InstrItinData<IIC_fpStore_m,[InstrStage<1, [A9_DRegsVFP], 0, Required>,
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000663 InstrStage<2, [A9_DRegsN], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000664 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000665 InstrStage<1, [A9_MUX0], 0>,
Evan Cheng1958cef2010-10-07 01:50:48 +0000666 InstrStage<1, [A9_NPipe]>], [1, 1, 1, 1]>,
667 //
668 // FP Store Multiple + update
669 InstrItinData<IIC_fpStore_mu,[InstrStage<1, [A9_DRegsVFP], 0, Required>,
670 InstrStage<2, [A9_DRegsN], 0, Reserved>,
671 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
672 InstrStage<1, [A9_MUX0], 0>,
673 InstrStage<1, [A9_NPipe]>], [2, 1, 1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000674 // NEON
675 // Issue through integer pipeline, and execute in NEON unit.
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000676 // VLD1
677 // FIXME: We don't model this instruction properly
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000678 InstrItinData<IIC_VLD1, [InstrStage<1, [A9_DRegsN], 0, Required>,
679 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000680 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000681 InstrStage<1, [A9_MUX0], 0>,
682 InstrStage<1, [A9_NPipe]>]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000683 //
684 // VLD2
685 // FIXME: We don't model this instruction properly
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000686 InstrItinData<IIC_VLD2, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000687 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000688 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000689 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000690 InstrStage<1, [A9_MUX0], 0>,
691 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000692 [2, 2, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000693 //
694 // VLD3
695 // FIXME: We don't model this instruction properly
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000696 InstrItinData<IIC_VLD3, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000697 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000698 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000699 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000700 InstrStage<1, [A9_MUX0], 0>,
701 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000702 [2, 2, 2, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000703 //
704 // VLD4
705 // FIXME: We don't model this instruction properly
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000706 InstrItinData<IIC_VLD4, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000707 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000708 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000709 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000710 InstrStage<1, [A9_MUX0], 0>,
711 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000712 [2, 2, 2, 2, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000713 //
714 // VST
715 // FIXME: We don't model this instruction properly
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000716 InstrItinData<IIC_VST, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000717 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000718 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000719 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000720 InstrStage<1, [A9_MUX0], 0>,
721 InstrStage<1, [A9_NPipe]>]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000722 //
723 // Double-register Integer Unary
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000724 InstrItinData<IIC_VUNAiD, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000725 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000726 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000727 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000728 InstrStage<1, [A9_MUX0], 0>,
729 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000730 [4, 2]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000731 //
732 // Quad-register Integer Unary
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000733 InstrItinData<IIC_VUNAiQ, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000734 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000735 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000736 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000737 InstrStage<1, [A9_MUX0], 0>,
738 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000739 [4, 2]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000740 //
741 // Double-register Integer Q-Unary
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000742 InstrItinData<IIC_VQUNAiD, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000743 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000744 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000745 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000746 InstrStage<1, [A9_MUX0], 0>,
747 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000748 [4, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000749 //
750 // Quad-register Integer CountQ-Unary
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000751 InstrItinData<IIC_VQUNAiQ, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000752 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000753 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000754 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000755 InstrStage<1, [A9_MUX0], 0>,
756 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000757 [4, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000758 //
759 // Double-register Integer Binary
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000760 InstrItinData<IIC_VBINiD, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000761 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000762 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000763 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000764 InstrStage<1, [A9_MUX0], 0>,
765 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000766 [3, 2, 2]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000767 //
768 // Quad-register Integer Binary
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000769 InstrItinData<IIC_VBINiQ, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000770 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000771 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000772 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000773 InstrStage<1, [A9_MUX0], 0>,
774 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000775 [3, 2, 2]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000776 //
777 // Double-register Integer Subtract
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000778 InstrItinData<IIC_VSUBiD, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000779 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000780 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000781 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000782 InstrStage<1, [A9_MUX0], 0>,
783 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000784 [3, 2, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000785 //
786 // Quad-register Integer Subtract
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000787 InstrItinData<IIC_VSUBiQ, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000788 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000789 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000790 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000791 InstrStage<1, [A9_MUX0], 0>,
792 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000793 [3, 2, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000794 //
795 // Double-register Integer Shift
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000796 InstrItinData<IIC_VSHLiD, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000797 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000798 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000799 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000800 InstrStage<1, [A9_MUX0], 0>,
801 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000802 [3, 1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000803 //
804 // Quad-register Integer Shift
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000805 InstrItinData<IIC_VSHLiQ, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000806 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000807 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000808 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000809 InstrStage<1, [A9_MUX0], 0>,
810 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000811 [3, 1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000812 //
813 // Double-register Integer Shift (4 cycle)
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000814 InstrItinData<IIC_VSHLi4D, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000815 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000816 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000817 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000818 InstrStage<1, [A9_MUX0], 0>,
819 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000820 [4, 1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000821 //
822 // Quad-register Integer Shift (4 cycle)
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000823 InstrItinData<IIC_VSHLi4Q, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000824 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000825 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000826 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000827 InstrStage<1, [A9_MUX0], 0>,
828 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000829 [4, 1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000830 //
831 // Double-register Integer Binary (4 cycle)
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000832 InstrItinData<IIC_VBINi4D, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000833 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000834 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000835 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000836 InstrStage<1, [A9_MUX0], 0>,
837 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000838 [4, 2, 2]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000839 //
840 // Quad-register Integer Binary (4 cycle)
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000841 InstrItinData<IIC_VBINi4Q, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000842 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000843 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000844 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000845 InstrStage<1, [A9_MUX0], 0>,
846 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000847 [4, 2, 2]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000848 //
849 // Double-register Integer Subtract (4 cycle)
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000850 InstrItinData<IIC_VSUBiD, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000851 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000852 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000853 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000854 InstrStage<1, [A9_MUX0], 0>,
855 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000856 [4, 2, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000857 //
858 // Quad-register Integer Subtract (4 cycle)
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000859 InstrItinData<IIC_VSUBiQ, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000860 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000861 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000862 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000863 InstrStage<1, [A9_MUX0], 0>,
864 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000865 [4, 2, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000866
867 //
868 // Double-register Integer Count
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000869 InstrItinData<IIC_VCNTiD, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000870 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000871 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000872 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000873 InstrStage<1, [A9_MUX0], 0>,
874 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000875 [3, 2, 2]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000876 //
877 // Quad-register Integer Count
878 // Result written in N3, but that is relative to the last cycle of multicycle,
879 // so we use 4 for those cases
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000880 InstrItinData<IIC_VCNTiQ, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000881 // Extra latency cycles since wbck is 7 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000882 InstrStage<8, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000883 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000884 InstrStage<1, [A9_MUX0], 0>,
885 InstrStage<2, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000886 [4, 2, 2]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000887 //
888 // Double-register Absolute Difference and Accumulate
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000889 InstrItinData<IIC_VABAD, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000890 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000891 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000892 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000893 InstrStage<1, [A9_MUX0], 0>,
894 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000895 [6, 3, 2, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000896 //
897 // Quad-register Absolute Difference and Accumulate
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000898 InstrItinData<IIC_VABAQ, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000899 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000900 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000901 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000902 InstrStage<1, [A9_MUX0], 0>,
903 InstrStage<2, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000904 [6, 3, 2, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000905 //
906 // Double-register Integer Pair Add Long
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000907 InstrItinData<IIC_VPALiD, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000908 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000909 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000910 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000911 InstrStage<1, [A9_MUX0], 0>,
912 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000913 [6, 3, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000914 //
915 // Quad-register Integer Pair Add Long
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000916 InstrItinData<IIC_VPALiQ, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000917 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000918 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000919 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000920 InstrStage<1, [A9_MUX0], 0>,
921 InstrStage<2, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000922 [6, 3, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000923
924 //
925 // Double-register Integer Multiply (.8, .16)
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000926 InstrItinData<IIC_VMULi16D, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000927 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000928 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000929 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000930 InstrStage<1, [A9_MUX0], 0>,
931 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000932 [6, 2, 2]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000933 //
934 // Quad-register Integer Multiply (.8, .16)
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000935 InstrItinData<IIC_VMULi16Q, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000936 // Extra latency cycles since wbck is 7 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000937 InstrStage<8, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000938 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000939 InstrStage<1, [A9_MUX0], 0>,
940 InstrStage<2, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000941 [7, 2, 2]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000942
943 //
944 // Double-register Integer Multiply (.32)
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000945 InstrItinData<IIC_VMULi32D, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000946 // Extra latency cycles since wbck is 7 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000947 InstrStage<8, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000948 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000949 InstrStage<1, [A9_MUX0], 0>,
950 InstrStage<2, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000951 [7, 2, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000952 //
953 // Quad-register Integer Multiply (.32)
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000954 InstrItinData<IIC_VMULi32Q, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000955 // Extra latency cycles since wbck is 9 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000956 InstrStage<10, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000957 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000958 InstrStage<1, [A9_MUX0], 0>,
959 InstrStage<4, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000960 [9, 2, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000961 //
962 // Double-register Integer Multiply-Accumulate (.8, .16)
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000963 InstrItinData<IIC_VMACi16D, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000964 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000965 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000966 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000967 InstrStage<1, [A9_MUX0], 0>,
968 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000969 [6, 3, 2, 2]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000970 //
971 // Double-register Integer Multiply-Accumulate (.32)
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000972 InstrItinData<IIC_VMACi32D, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000973 // Extra latency cycles since wbck is 7 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000974 InstrStage<8, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000975 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000976 InstrStage<1, [A9_MUX0], 0>,
977 InstrStage<2, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000978 [7, 3, 2, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000979 //
980 // Quad-register Integer Multiply-Accumulate (.8, .16)
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000981 InstrItinData<IIC_VMACi16Q, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000982 // Extra latency cycles since wbck is 7 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000983 InstrStage<8, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000984 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000985 InstrStage<1, [A9_MUX0], 0>,
986 InstrStage<2, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000987 [7, 3, 2, 2]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000988 //
989 // Quad-register Integer Multiply-Accumulate (.32)
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000990 InstrItinData<IIC_VMACi32Q, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000991 // Extra latency cycles since wbck is 9 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000992 InstrStage<10, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000993 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000994 InstrStage<1, [A9_MUX0], 0>,
995 InstrStage<4, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000996 [9, 3, 2, 1]>,
Evan Cheng2a5d7642010-10-01 20:50:58 +0000997
998 //
999 // Move
1000 InstrItinData<IIC_VMOV, [InstrStage<1, [A9_DRegsN], 0, Required>,
1001 InstrStage<1, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +00001002 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001003 InstrStage<1, [A9_MUX0], 0>,
1004 InstrStage<1, [A9_NPipe]>],
Evan Cheng2a5d7642010-10-01 20:50:58 +00001005 [1,1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001006 //
1007 // Move Immediate
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001008 InstrItinData<IIC_VMOVImm, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001009 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001010 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +00001011 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001012 InstrStage<1, [A9_MUX0], 0>,
1013 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001014 [3]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001015 //
1016 // Double-register Permute Move
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001017 InstrItinData<IIC_VMOVD, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001018 // FIXME: all latencies are arbitrary, no information is available
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001019 InstrStage<3, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +00001020 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001021 InstrStage<1, [A9_MUX0], 0>,
1022 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001023 [2, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001024 //
1025 // Quad-register Permute Move
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001026 InstrItinData<IIC_VMOVQ, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001027 // FIXME: all latencies are arbitrary, no information is available
Evan Cheng2a5d7642010-10-01 20:50:58 +00001028 InstrStage<3, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +00001029 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001030 InstrStage<1, [A9_MUX0], 0>,
1031 InstrStage<1, [A9_NPipe]>],
Evan Cheng2a5d7642010-10-01 20:50:58 +00001032 [2, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001033 //
1034 // Integer to Single-precision Move
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001035 InstrItinData<IIC_VMOVIS , [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001036 // FIXME: all latencies are arbitrary, no information is available
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001037 InstrStage<3, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +00001038 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001039 InstrStage<1, [A9_MUX0], 0>,
1040 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001041 [2, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001042 //
1043 // Integer to Double-precision Move
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001044 InstrItinData<IIC_VMOVID , [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001045 // FIXME: all latencies are arbitrary, no information is available
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001046 InstrStage<3, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +00001047 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001048 InstrStage<1, [A9_MUX0], 0>,
1049 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001050 [2, 1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001051 //
1052 // Single-precision to Integer Move
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001053 InstrItinData<IIC_VMOVSI , [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001054 // FIXME: all latencies are arbitrary, no information is available
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001055 InstrStage<3, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +00001056 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001057 InstrStage<1, [A9_MUX0], 0>,
1058 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001059 [2, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001060 //
1061 // Double-precision to Integer Move
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001062 InstrItinData<IIC_VMOVDI , [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001063 // FIXME: all latencies are arbitrary, no information is available
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001064 InstrStage<3, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +00001065 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001066 InstrStage<1, [A9_MUX0], 0>,
1067 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001068 [2, 2, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001069 //
1070 // Integer to Lane Move
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001071 InstrItinData<IIC_VMOVISL , [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001072 // FIXME: all latencies are arbitrary, no information is available
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001073 InstrStage<4, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +00001074 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001075 InstrStage<1, [A9_MUX0], 0>,
1076 InstrStage<2, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001077 [3, 1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001078
1079 //
Evan Cheng2a5d7642010-10-01 20:50:58 +00001080 // Vector narrow move
1081 InstrItinData<IIC_VMOVN, [InstrStage<1, [A9_DRegsN], 0, Required>,
1082 // Extra latency cycles since wbck is 6 cycles
1083 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +00001084 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001085 InstrStage<1, [A9_MUX0], 0>,
1086 InstrStage<1, [A9_NPipe]>],
Evan Cheng2a5d7642010-10-01 20:50:58 +00001087 [3, 1]>,
1088 //
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001089 // Double-register FP Unary
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001090 InstrItinData<IIC_VUNAD, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001091 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001092 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +00001093 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001094 InstrStage<1, [A9_MUX0], 0>,
1095 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001096 [5, 2]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001097 //
1098 // Quad-register FP Unary
1099 // Result written in N5, but that is relative to the last cycle of multicycle,
1100 // so we use 6 for those cases
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001101 InstrItinData<IIC_VUNAQ, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001102 // Extra latency cycles since wbck is 7 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001103 InstrStage<8, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +00001104 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001105 InstrStage<1, [A9_MUX0], 0>,
1106 InstrStage<2, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001107 [6, 2]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001108 //
1109 // Double-register FP Binary
1110 // FIXME: We're using this itin for many instructions and [2, 2] here is too
1111 // optimistic.
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001112 InstrItinData<IIC_VBIND, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001113 // Extra latency cycles since wbck is 7 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001114 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +00001115 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001116 InstrStage<1, [A9_MUX0], 0>,
1117 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001118 [5, 2, 2]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001119 //
1120 // Quad-register FP Binary
1121 // Result written in N5, but that is relative to the last cycle of multicycle,
1122 // so we use 6 for those cases
1123 // FIXME: We're using this itin for many instructions and [2, 2] here is too
1124 // optimistic.
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001125 InstrItinData<IIC_VBINQ, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001126 // Extra latency cycles since wbck is 8 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001127 InstrStage<8, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +00001128 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001129 InstrStage<1, [A9_MUX0], 0>,
1130 InstrStage<2, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001131 [6, 2, 2]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001132 //
1133 // Double-register FP Multiple-Accumulate
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001134 InstrItinData<IIC_VMACD, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001135 // Extra latency cycles since wbck is 7 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001136 InstrStage<8, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +00001137 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001138 InstrStage<1, [A9_MUX0], 0>,
1139 InstrStage<2, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001140 [6, 3, 2, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001141 //
1142 // Quad-register FP Multiple-Accumulate
1143 // Result written in N9, but that is relative to the last cycle of multicycle,
1144 // so we use 10 for those cases
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001145 InstrItinData<IIC_VMACQ, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001146 // Extra latency cycles since wbck is 9 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001147 InstrStage<10, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +00001148 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001149 InstrStage<1, [A9_MUX0], 0>,
1150 InstrStage<4, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001151 [8, 4, 2, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001152 //
1153 // Double-register Reciprical Step
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001154 InstrItinData<IIC_VRECSD, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001155 // Extra latency cycles since wbck is 7 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001156 InstrStage<8, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +00001157 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001158 InstrStage<1, [A9_MUX0], 0>,
1159 InstrStage<2, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001160 [6, 2, 2]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001161 //
1162 // Quad-register Reciprical Step
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001163 InstrItinData<IIC_VRECSQ, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001164 // Extra latency cycles since wbck is 9 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001165 InstrStage<10, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +00001166 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001167 InstrStage<1, [A9_MUX0], 0>,
1168 InstrStage<4, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001169 [8, 2, 2]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001170 //
1171 // Double-register Permute
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001172 InstrItinData<IIC_VPERMD, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001173 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001174 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +00001175 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001176 InstrStage<1, [A9_MUX0], 0>,
1177 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001178 [2, 2, 1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001179 //
1180 // Quad-register Permute
1181 // Result written in N2, but that is relative to the last cycle of multicycle,
1182 // so we use 3 for those cases
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001183 InstrItinData<IIC_VPERMQ, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001184 // Extra latency cycles since wbck is 7 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001185 InstrStage<8, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +00001186 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001187 InstrStage<1, [A9_MUX0], 0>,
1188 InstrStage<2, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001189 [3, 3, 1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001190 //
1191 // Quad-register Permute (3 cycle issue)
1192 // Result written in N2, but that is relative to the last cycle of multicycle,
1193 // so we use 4 for those cases
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001194 InstrItinData<IIC_VPERMQ3, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001195 // Extra latency cycles since wbck is 8 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001196 InstrStage<9, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +00001197 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001198 InstrStage<1, [A9_MUX0], 0>,
1199 InstrStage<3, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001200 [4, 4, 1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001201
1202 //
1203 // Double-register VEXT
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001204 InstrItinData<IIC_VEXTD, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001205 // Extra latency cycles since wbck is 7 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001206 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +00001207 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001208 InstrStage<1, [A9_MUX0], 0>,
1209 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001210 [2, 1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001211 //
1212 // Quad-register VEXT
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001213 InstrItinData<IIC_VEXTQ, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001214 // Extra latency cycles since wbck is 9 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001215 InstrStage<8, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +00001216 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001217 InstrStage<1, [A9_MUX0], 0>,
1218 InstrStage<2, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001219 [3, 1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001220 //
1221 // VTB
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001222 InstrItinData<IIC_VTB1, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001223 // Extra latency cycles since wbck is 7 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001224 InstrStage<8, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +00001225 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001226 InstrStage<1, [A9_MUX0], 0>,
1227 InstrStage<2, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001228 [3, 2, 1]>,
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001229 InstrItinData<IIC_VTB2, [InstrStage<2, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001230 // Extra latency cycles since wbck is 7 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001231 InstrStage<8, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +00001232 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001233 InstrStage<1, [A9_MUX0], 0>,
1234 InstrStage<2, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001235 [3, 2, 2, 1]>,
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001236 InstrItinData<IIC_VTB3, [InstrStage<2, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001237 // Extra latency cycles since wbck is 8 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001238 InstrStage<9, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +00001239 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001240 InstrStage<1, [A9_MUX0], 0>,
1241 InstrStage<3, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001242 [4, 2, 2, 3, 1]>,
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001243 InstrItinData<IIC_VTB4, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001244 // Extra latency cycles since wbck is 8 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001245 InstrStage<9, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +00001246 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001247 InstrStage<1, [A9_MUX0], 0>,
1248 InstrStage<3, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001249 [4, 2, 2, 3, 3, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001250 //
1251 // VTBX
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001252 InstrItinData<IIC_VTBX1, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001253 // Extra latency cycles since wbck is 7 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001254 InstrStage<8, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +00001255 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001256 InstrStage<1, [A9_MUX0], 0>,
1257 InstrStage<2, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001258 [3, 1, 2, 1]>,
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001259 InstrItinData<IIC_VTBX2, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001260 // Extra latency cycles since wbck is 7 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001261 InstrStage<8, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +00001262 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001263 InstrStage<1, [A9_MUX0], 0>,
1264 InstrStage<2, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001265 [3, 1, 2, 2, 1]>,
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001266 InstrItinData<IIC_VTBX3, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001267 // Extra latency cycles since wbck is 8 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001268 InstrStage<9, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +00001269 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001270 InstrStage<1, [A9_MUX0], 0>,
1271 InstrStage<3, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001272 [4, 1, 2, 2, 3, 1]>,
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001273 InstrItinData<IIC_VTBX4, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001274 // Extra latency cycles since wbck is 8 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001275 InstrStage<9, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +00001276 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001277 InstrStage<1, [A9_MUX0], 0>,
1278 InstrStage<2, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001279 [4, 1, 2, 2, 3, 3, 1]>
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001280]>;