blob: c199ef7f2b2a40561b8dd9ad1fb0ed6604e1e90a [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
Evan Cheng05f13e92010-10-09 01:03:04 +000027def A9_LS0 : FuncUnit; // L/S Units, 32-bit per unit. Fake FU to limit l/s.
28def A9_LS1 : FuncUnit; // L/S Units, 32-bit per unit.
Anton Korobeynikov7d62e332010-04-18 20:31:01 +000029def A9_DRegsVFP: FuncUnit; // FP register set, VFP side
30def A9_DRegsN : FuncUnit; // FP register set, NEON side
31
Evan Cheng4a010fd2010-09-29 22:42:35 +000032// Bypasses
33def A9_LdBypass : Bypass;
34
Anton Korobeynikov7d62e332010-04-18 20:31:01 +000035def CortexA9Itineraries : ProcessorItineraries<
Evan Cheng73eac2a2010-10-03 02:03:59 +000036 [A9_Issue0, A9_Issue1, A9_Branch, A9_ALU0, A9_ALU1, A9_AGU, A9_NPipe, A9_MUX0,
Evan Cheng05f13e92010-10-09 01:03:04 +000037 A9_LS0, A9_LS1, A9_DRegsVFP, A9_DRegsN],
Evan Cheng4a010fd2010-09-29 22:42:35 +000038 [A9_LdBypass], [
Anton Korobeynikov94d7fd82010-05-29 19:25:17 +000039 // Two fully-pipelined integer ALU pipelines
Evan Cheng2259d672010-09-29 00:49:25 +000040
Anton Korobeynikov94d7fd82010-05-29 19:25:17 +000041 //
42 // Move instructions, unconditional
Evan Cheng73eac2a2010-10-03 02:03:59 +000043 InstrItinData<IIC_iMOVi , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
44 InstrStage<1, [A9_ALU0, A9_ALU1]>], [1]>,
45 InstrItinData<IIC_iMOVr , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
46 InstrStage<1, [A9_ALU0, A9_ALU1]>], [1, 1]>,
47 InstrItinData<IIC_iMOVsi , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
48 InstrStage<1, [A9_ALU0, A9_ALU1]>], [1, 1]>,
49 InstrItinData<IIC_iMOVsr , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
50 InstrStage<2, [A9_ALU0, A9_ALU1]>], [2, 1, 1]>,
51 InstrItinData<IIC_iMOVix2 , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
52 InstrStage<1, [A9_ALU0, A9_ALU1]>,
53 InstrStage<1, [A9_ALU0, A9_ALU1]>], [2]>,
Evan Cheng2259d672010-09-29 00:49:25 +000054 //
55 // MVN instructions
Evan Cheng73eac2a2010-10-03 02:03:59 +000056 InstrItinData<IIC_iMVNi , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
57 InstrStage<1, [A9_ALU0, A9_ALU1]>],
Evan Cheng4a010fd2010-09-29 22:42:35 +000058 [1]>,
Evan Cheng73eac2a2010-10-03 02:03:59 +000059 InstrItinData<IIC_iMVNr , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
60 InstrStage<1, [A9_ALU0, A9_ALU1]>],
Evan Cheng4a010fd2010-09-29 22:42:35 +000061 [1, 1], [NoBypass, A9_LdBypass]>,
Evan Cheng73eac2a2010-10-03 02:03:59 +000062 InstrItinData<IIC_iMVNsi , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
63 InstrStage<2, [A9_ALU0, A9_ALU1]>],
Evan Cheng2fb20b12010-09-30 01:08:25 +000064 [2, 1]>,
Evan Cheng73eac2a2010-10-03 02:03:59 +000065 InstrItinData<IIC_iMVNsr , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
66 InstrStage<3, [A9_ALU0, A9_ALU1]>],
Evan Cheng2fb20b12010-09-30 01:08:25 +000067 [3, 1, 1]>,
Anton Korobeynikov94d7fd82010-05-29 19:25:17 +000068 //
69 // No operand cycles
Evan Cheng73eac2a2010-10-03 02:03:59 +000070 InstrItinData<IIC_iALUx , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
71 InstrStage<1, [A9_ALU0, A9_ALU1]>]>,
Anton Korobeynikov94d7fd82010-05-29 19:25:17 +000072 //
73 // Binary Instructions that produce a result
Evan Cheng73eac2a2010-10-03 02:03:59 +000074 InstrItinData<IIC_iALUi , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
75 InstrStage<1, [A9_ALU0, A9_ALU1]>],
Evan Cheng2fb20b12010-09-30 01:08:25 +000076 [1, 1], [NoBypass, A9_LdBypass]>,
Evan Cheng73eac2a2010-10-03 02:03:59 +000077 InstrItinData<IIC_iALUr , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
78 InstrStage<1, [A9_ALU0, A9_ALU1]>],
Evan Cheng2fb20b12010-09-30 01:08:25 +000079 [1, 1, 1], [NoBypass, A9_LdBypass, A9_LdBypass]>,
Evan Cheng73eac2a2010-10-03 02:03:59 +000080 InstrItinData<IIC_iALUsi, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
81 InstrStage<2, [A9_ALU0, A9_ALU1]>],
Evan Cheng2fb20b12010-09-30 01:08:25 +000082 [2, 1, 1], [NoBypass, A9_LdBypass, NoBypass]>,
Evan Cheng73eac2a2010-10-03 02:03:59 +000083 InstrItinData<IIC_iALUsir,[InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
84 InstrStage<2, [A9_ALU0, A9_ALU1]>],
Evan Cheng2fb20b12010-09-30 01:08:25 +000085 [2, 1, 1], [NoBypass, NoBypass, A9_LdBypass]>,
Evan Cheng73eac2a2010-10-03 02:03:59 +000086 InstrItinData<IIC_iALUsr, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
87 InstrStage<3, [A9_ALU0, A9_ALU1]>],
Evan Cheng2fb20b12010-09-30 01:08:25 +000088 [3, 1, 1, 1],
Evan Cheng4a010fd2010-09-29 22:42:35 +000089 [NoBypass, A9_LdBypass, NoBypass, NoBypass]>,
Anton Korobeynikov94d7fd82010-05-29 19:25:17 +000090 //
Evan Chengc35d7bb2010-09-29 00:27:46 +000091 // Bitwise Instructions that produce a result
Evan Cheng73eac2a2010-10-03 02:03:59 +000092 InstrItinData<IIC_iBITi , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
93 InstrStage<1, [A9_ALU0, A9_ALU1]>], [1, 1]>,
94 InstrItinData<IIC_iBITr , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
95 InstrStage<1, [A9_ALU0, A9_ALU1]>], [1, 1, 1]>,
96 InstrItinData<IIC_iBITsi, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
97 InstrStage<2, [A9_ALU0, A9_ALU1]>], [2, 1, 1]>,
98 InstrItinData<IIC_iBITsr, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
99 InstrStage<3, [A9_ALU0, A9_ALU1]>], [3, 1, 1, 1]>,
Evan Chengc35d7bb2010-09-29 00:27:46 +0000100 //
Anton Korobeynikov94d7fd82010-05-29 19:25:17 +0000101 // Unary Instructions that produce a result
Evan Cheng2fb20b12010-09-30 01:08:25 +0000102
103 // CLZ, RBIT, etc.
Evan Cheng73eac2a2010-10-03 02:03:59 +0000104 InstrItinData<IIC_iUNAr , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
105 InstrStage<1, [A9_ALU0, A9_ALU1]>], [1, 1]>,
Evan Cheng2fb20b12010-09-30 01:08:25 +0000106
107 // BFC, BFI, UBFX, SBFX
Evan Cheng73eac2a2010-10-03 02:03:59 +0000108 InstrItinData<IIC_iUNAsi, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
109 InstrStage<2, [A9_ALU0, A9_ALU1]>], [2, 1]>,
Evan Cheng2fb20b12010-09-30 01:08:25 +0000110
Anton Korobeynikov94d7fd82010-05-29 19:25:17 +0000111 //
Evan Cheng62d626c2010-09-25 00:49:35 +0000112 // Zero and sign extension instructions
Evan Cheng73eac2a2010-10-03 02:03:59 +0000113 InstrItinData<IIC_iEXTr , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
114 InstrStage<1, [A9_ALU0, A9_ALU1]>], [2, 1]>,
115 InstrItinData<IIC_iEXTAr, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
116 InstrStage<2, [A9_ALU0, A9_ALU1]>], [3, 1, 1]>,
117 InstrItinData<IIC_iEXTAsr,[InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
118 InstrStage<3, [A9_ALU0, A9_ALU1]>], [3, 1, 1, 1]>,
Evan Cheng62d626c2010-09-25 00:49:35 +0000119 //
Anton Korobeynikov94d7fd82010-05-29 19:25:17 +0000120 // Compare instructions
Evan Cheng73eac2a2010-10-03 02:03:59 +0000121 InstrItinData<IIC_iCMPi , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
122 InstrStage<1, [A9_ALU0, A9_ALU1]>],
123 [1], [A9_LdBypass]>,
124 InstrItinData<IIC_iCMPr , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
125 InstrStage<1, [A9_ALU0, A9_ALU1]>],
126 [1, 1], [A9_LdBypass, A9_LdBypass]>,
127 InstrItinData<IIC_iCMPsi , [InstrStage<2, [A9_ALU0, A9_ALU1]>],
128 [1, 1], [A9_LdBypass, NoBypass]>,
129 InstrItinData<IIC_iCMPsr , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
130 InstrStage<3, [A9_ALU0, A9_ALU1]>],
Evan Cheng2fb20b12010-09-30 01:08:25 +0000131 [1, 1, 1], [A9_LdBypass, NoBypass, NoBypass]>,
Anton Korobeynikov94d7fd82010-05-29 19:25:17 +0000132 //
Evan Cheng2259d672010-09-29 00:49:25 +0000133 // Test instructions
Evan Cheng73eac2a2010-10-03 02:03:59 +0000134 InstrItinData<IIC_iTSTi , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
135 InstrStage<1, [A9_ALU0, A9_ALU1]>], [1]>,
136 InstrItinData<IIC_iTSTr , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
137 InstrStage<1, [A9_ALU0, A9_ALU1]>], [1, 1]>,
138 InstrItinData<IIC_iTSTsi , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
139 InstrStage<2, [A9_ALU0, A9_ALU1]>], [1, 1]>,
140 InstrItinData<IIC_iTSTsr , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
141 InstrStage<3, [A9_ALU0, A9_ALU1]>], [1, 1, 1]>,
Evan Cheng2259d672010-09-29 00:49:25 +0000142 //
Anton Korobeynikov94d7fd82010-05-29 19:25:17 +0000143 // Move instructions, conditional
Evan Cheng2fb20b12010-09-30 01:08:25 +0000144 // FIXME: Correctly model the extra input dep on the destination.
Evan Cheng73eac2a2010-10-03 02:03:59 +0000145 InstrItinData<IIC_iCMOVi , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
146 InstrStage<1, [A9_ALU0, A9_ALU1]>], [1]>,
147 InstrItinData<IIC_iCMOVr , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
148 InstrStage<1, [A9_ALU0, A9_ALU1]>], [1, 1]>,
149 InstrItinData<IIC_iCMOVsi , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
150 InstrStage<1, [A9_ALU0, A9_ALU1]>], [1, 1]>,
151 InstrItinData<IIC_iCMOVsr , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
152 InstrStage<2, [A9_ALU0, A9_ALU1]>], [2, 1, 1]>,
Anton Korobeynikov94d7fd82010-05-29 19:25:17 +0000153
154 // Integer multiply pipeline
155 //
Evan Cheng73eac2a2010-10-03 02:03:59 +0000156 InstrItinData<IIC_iMUL16 , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
157 InstrStage<2, [A9_ALU0]>], [3, 1, 1]>,
158 InstrItinData<IIC_iMAC16 , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
159 InstrStage<2, [A9_ALU0]>],
160 [3, 1, 1, 1]>,
161 InstrItinData<IIC_iMUL32 , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
162 InstrStage<2, [A9_ALU0]>], [4, 1, 1]>,
163 InstrItinData<IIC_iMAC32 , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
164 InstrStage<2, [A9_ALU0]>],
165 [4, 1, 1, 1]>,
166 InstrItinData<IIC_iMUL64 , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
167 InstrStage<3, [A9_ALU0]>], [4, 5, 1, 1]>,
168 InstrItinData<IIC_iMAC64 , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
169 InstrStage<3, [A9_ALU0]>],
170 [4, 5, 1, 1]>,
Anton Korobeynikov2a21aef2010-05-29 19:25:34 +0000171 // Integer load pipeline
172 // FIXME: The timings are some rough approximations
173 //
174 // Immediate offset
Evan Cheng73eac2a2010-10-03 02:03:59 +0000175 InstrItinData<IIC_iLoad_i , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000176 InstrStage<1, [A9_MUX0], 0>,
Evan Cheng05f13e92010-10-09 01:03:04 +0000177 InstrStage<1, [A9_AGU]>,
178 InstrStage<1, [A9_LS0, A9_LS1]>],
Evan Cheng2fb20b12010-09-30 01:08:25 +0000179 [3, 1], [A9_LdBypass]>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000180 InstrItinData<IIC_iLoad_bh_i, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000181 InstrStage<1, [A9_MUX0], 0>,
Evan Cheng05f13e92010-10-09 01:03:04 +0000182 InstrStage<2, [A9_AGU]>,
183 InstrStage<1, [A9_LS0, A9_LS1]>],
Evan Cheng2fb20b12010-09-30 01:08:25 +0000184 [4, 1], [A9_LdBypass]>,
185 // FIXME: If address is 64-bit aligned, AGU cycles is 1.
Evan Cheng73eac2a2010-10-03 02:03:59 +0000186 InstrItinData<IIC_iLoad_d_i , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000187 InstrStage<1, [A9_MUX0], 0>,
Evan Cheng05f13e92010-10-09 01:03:04 +0000188 InstrStage<2, [A9_AGU]>,
189 InstrStage<1, [A9_LS0, A9_LS1]>],
Evan Cheng2fb20b12010-09-30 01:08:25 +0000190 [3, 3, 1], [A9_LdBypass]>,
Anton Korobeynikov2a21aef2010-05-29 19:25:34 +0000191 //
192 // Register offset
Evan Cheng73eac2a2010-10-03 02:03:59 +0000193 InstrItinData<IIC_iLoad_r , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000194 InstrStage<1, [A9_MUX0], 0>,
Evan Cheng05f13e92010-10-09 01:03:04 +0000195 InstrStage<1, [A9_AGU]>,
196 InstrStage<1, [A9_LS0, A9_LS1]>],
Evan Cheng2fb20b12010-09-30 01:08:25 +0000197 [3, 1, 1], [A9_LdBypass]>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000198 InstrItinData<IIC_iLoad_bh_r, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000199 InstrStage<1, [A9_MUX0], 0>,
Evan Cheng05f13e92010-10-09 01:03:04 +0000200 InstrStage<2, [A9_AGU]>,
201 InstrStage<1, [A9_LS0, A9_LS1]>],
Evan Cheng2fb20b12010-09-30 01:08:25 +0000202 [4, 1, 1], [A9_LdBypass]>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000203 InstrItinData<IIC_iLoad_d_r , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000204 InstrStage<1, [A9_MUX0], 0>,
Evan Cheng05f13e92010-10-09 01:03:04 +0000205 InstrStage<2, [A9_AGU]>,
206 InstrStage<1, [A9_LS0, A9_LS1]>],
Evan Cheng2fb20b12010-09-30 01:08:25 +0000207 [3, 3, 1, 1], [A9_LdBypass]>,
Anton Korobeynikov2a21aef2010-05-29 19:25:34 +0000208 //
209 // Scaled register offset
Evan Cheng73eac2a2010-10-03 02:03:59 +0000210 InstrItinData<IIC_iLoad_si , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000211 InstrStage<1, [A9_MUX0], 0>,
Evan Cheng05f13e92010-10-09 01:03:04 +0000212 InstrStage<1, [A9_AGU]>,
213 InstrStage<1, [A9_LS0, A9_LS1]>],
Evan Cheng2fb20b12010-09-30 01:08:25 +0000214 [4, 1, 1], [A9_LdBypass]>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000215 InstrItinData<IIC_iLoad_bh_si,[InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000216 InstrStage<1, [A9_MUX0], 0>,
Evan Cheng05f13e92010-10-09 01:03:04 +0000217 InstrStage<2, [A9_AGU]>,
218 InstrStage<1, [A9_LS0, A9_LS1]>],
Evan Cheng2fb20b12010-09-30 01:08:25 +0000219 [5, 1, 1], [A9_LdBypass]>,
Anton Korobeynikov2a21aef2010-05-29 19:25:34 +0000220 //
221 // Immediate offset with update
Evan Cheng73eac2a2010-10-03 02:03:59 +0000222 InstrItinData<IIC_iLoad_iu , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000223 InstrStage<1, [A9_MUX0], 0>,
Evan Cheng05f13e92010-10-09 01:03:04 +0000224 InstrStage<1, [A9_AGU]>,
225 InstrStage<1, [A9_LS0, A9_LS1]>],
Evan Cheng2fb20b12010-09-30 01:08:25 +0000226 [3, 2, 1], [A9_LdBypass]>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000227 InstrItinData<IIC_iLoad_bh_iu,[InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000228 InstrStage<1, [A9_MUX0], 0>,
Evan Cheng05f13e92010-10-09 01:03:04 +0000229 InstrStage<2, [A9_AGU]>,
230 InstrStage<1, [A9_LS0, A9_LS1]>],
Evan Cheng2fb20b12010-09-30 01:08:25 +0000231 [4, 3, 1], [A9_LdBypass]>,
Anton Korobeynikov2a21aef2010-05-29 19:25:34 +0000232 //
233 // Register offset with update
Evan Cheng73eac2a2010-10-03 02:03:59 +0000234 InstrItinData<IIC_iLoad_ru , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000235 InstrStage<1, [A9_MUX0], 0>,
Evan Cheng05f13e92010-10-09 01:03:04 +0000236 InstrStage<1, [A9_AGU]>,
237 InstrStage<1, [A9_LS0, A9_LS1]>],
Evan Cheng2fb20b12010-09-30 01:08:25 +0000238 [3, 2, 1, 1], [A9_LdBypass]>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000239 InstrItinData<IIC_iLoad_bh_ru,[InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000240 InstrStage<1, [A9_MUX0], 0>,
Evan Cheng05f13e92010-10-09 01:03:04 +0000241 InstrStage<2, [A9_AGU]>,
242 InstrStage<1, [A9_LS0, A9_LS1]>],
Evan Cheng2fb20b12010-09-30 01:08:25 +0000243 [4, 3, 1, 1], [A9_LdBypass]>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000244 InstrItinData<IIC_iLoad_d_ru, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000245 InstrStage<1, [A9_MUX0], 0>,
Evan Cheng05f13e92010-10-09 01:03:04 +0000246 InstrStage<2, [A9_AGU]>,
247 InstrStage<1, [A9_LS0, A9_LS1]>],
Evan Cheng2fb20b12010-09-30 01:08:25 +0000248 [3, 3, 1, 1], [A9_LdBypass]>,
Anton Korobeynikov2a21aef2010-05-29 19:25:34 +0000249 //
250 // Scaled register offset with update
Evan Cheng73eac2a2010-10-03 02:03:59 +0000251 InstrItinData<IIC_iLoad_siu , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000252 InstrStage<1, [A9_MUX0], 0>,
Evan Cheng05f13e92010-10-09 01:03:04 +0000253 InstrStage<1, [A9_AGU]>,
254 InstrStage<1, [A9_LS0, A9_LS1]>],
Evan Cheng2fb20b12010-09-30 01:08:25 +0000255 [4, 3, 1, 1], [A9_LdBypass]>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000256 InstrItinData<IIC_iLoad_bh_siu,[InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000257 InstrStage<1, [A9_MUX0], 0>,
Evan Cheng05f13e92010-10-09 01:03:04 +0000258 InstrStage<2, [A9_AGU]>,
259 InstrStage<1, [A9_LS0, A9_LS1]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000260 [5, 4, 1, 1], [A9_LdBypass]>,
Anton Korobeynikov2a21aef2010-05-29 19:25:34 +0000261 //
Evan Cheng49d4c0b2010-10-06 06:27:31 +0000262 // Load multiple, def is the 5th operand.
Evan Cheng05f13e92010-10-09 01:03:04 +0000263 // FIXME: This assumes 3 to 4 registers.
Evan Cheng49d4c0b2010-10-06 06:27:31 +0000264 InstrItinData<IIC_iLoad_m , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000265 InstrStage<1, [A9_MUX0], 0>,
Evan Cheng05f13e92010-10-09 01:03:04 +0000266 InstrStage<2, [A9_AGU]>,
267 InstrStage<2, [A9_LS0, A9_LS1]>],
Evan Cheng49d4c0b2010-10-06 06:27:31 +0000268 [1, 1, 1, 1, 3],
269 [NoBypass, NoBypass, NoBypass, NoBypass, A9_LdBypass]>,
270 //
271 // Load multiple + update, defs are the 1st and 5th operands.
272 InstrItinData<IIC_iLoad_mu , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
273 InstrStage<1, [A9_MUX0], 0>,
Evan Cheng05f13e92010-10-09 01:03:04 +0000274 InstrStage<2, [A9_AGU]>,
275 InstrStage<2, [A9_LS0, A9_LS1]>],
Evan Cheng49d4c0b2010-10-06 06:27:31 +0000276 [2, 1, 1, 1, 3],
277 [NoBypass, NoBypass, NoBypass, NoBypass, A9_LdBypass]>,
Evan Cheng722cd122010-09-08 22:57:08 +0000278 //
279 // Load multiple plus branch
Evan Cheng49d4c0b2010-10-06 06:27:31 +0000280 InstrItinData<IIC_iLoad_mBr, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000281 InstrStage<1, [A9_MUX0], 0>,
282 InstrStage<1, [A9_AGU]>,
Evan Cheng05f13e92010-10-09 01:03:04 +0000283 InstrStage<2, [A9_LS0, A9_LS1]>,
Evan Cheng49d4c0b2010-10-06 06:27:31 +0000284 InstrStage<1, [A9_Branch]>],
285 [1, 2, 1, 1, 3],
286 [NoBypass, NoBypass, NoBypass, NoBypass, A9_LdBypass]>,
287 //
288 // Pop, def is the 3rd operand.
289 InstrItinData<IIC_iPop , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
290 InstrStage<1, [A9_MUX0], 0>,
Evan Cheng05f13e92010-10-09 01:03:04 +0000291 InstrStage<2, [A9_AGU]>,
292 InstrStage<2, [A9_LS0, A9_LS1]>],
Evan Cheng49d4c0b2010-10-06 06:27:31 +0000293 [1, 1, 3],
294 [NoBypass, NoBypass, A9_LdBypass]>,
295 //
296 // Pop + branch, def is the 3rd operand.
297 InstrItinData<IIC_iPop_Br, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
298 InstrStage<1, [A9_MUX0], 0>,
299 InstrStage<2, [A9_AGU]>,
Evan Cheng05f13e92010-10-09 01:03:04 +0000300 InstrStage<2, [A9_LS0, A9_LS1]>,
Evan Cheng49d4c0b2010-10-06 06:27:31 +0000301 InstrStage<1, [A9_Branch]>],
302 [1, 1, 3],
303 [NoBypass, NoBypass, A9_LdBypass]>,
Evan Cheng722cd122010-09-08 22:57:08 +0000304
Evan Chenge37da032010-09-24 22:41:41 +0000305 //
306 // iLoadi + iALUr for t2LDRpci_pic.
Evan Cheng73eac2a2010-10-03 02:03:59 +0000307 InstrItinData<IIC_iLoadiALU, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000308 InstrStage<1, [A9_MUX0], 0>,
309 InstrStage<1, [A9_AGU]>,
Evan Cheng05f13e92010-10-09 01:03:04 +0000310 InstrStage<1, [A9_LS0, A9_LS1]>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000311 InstrStage<1, [A9_ALU0, A9_ALU1]>],
Evan Cheng4a010fd2010-09-29 22:42:35 +0000312 [2, 1]>,
Evan Chenge37da032010-09-24 22:41:41 +0000313
Anton Korobeynikov2a21aef2010-05-29 19:25:34 +0000314 // Integer store pipeline
315 ///
316 // Immediate offset
Evan Cheng73eac2a2010-10-03 02:03:59 +0000317 InstrItinData<IIC_iStore_i , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000318 InstrStage<1, [A9_MUX0], 0>,
Evan Cheng05f13e92010-10-09 01:03:04 +0000319 InstrStage<1, [A9_AGU]>,
320 InstrStage<1, [A9_LS0, A9_LS1]>], [1, 1]>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000321 InstrItinData<IIC_iStore_bh_i,[InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000322 InstrStage<1, [A9_MUX0], 0>,
Evan Cheng05f13e92010-10-09 01:03:04 +0000323 InstrStage<2, [A9_AGU]>,
324 InstrStage<1, [A9_LS0, A9_LS1]>], [1, 1]>,
Evan Cheng2fb20b12010-09-30 01:08:25 +0000325 // FIXME: If address is 64-bit aligned, AGU cycles is 1.
Evan Cheng73eac2a2010-10-03 02:03:59 +0000326 InstrItinData<IIC_iStore_d_i, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000327 InstrStage<1, [A9_MUX0], 0>,
Evan Cheng05f13e92010-10-09 01:03:04 +0000328 InstrStage<2, [A9_AGU]>,
329 InstrStage<1, [A9_LS0, A9_LS1]>], [1, 1]>,
Anton Korobeynikov2a21aef2010-05-29 19:25:34 +0000330 //
331 // Register offset
Evan Cheng73eac2a2010-10-03 02:03:59 +0000332 InstrItinData<IIC_iStore_r , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000333 InstrStage<1, [A9_MUX0], 0>,
Evan Cheng05f13e92010-10-09 01:03:04 +0000334 InstrStage<1, [A9_AGU]>,
335 InstrStage<1, [A9_LS0, A9_LS1]>], [1, 1, 1]>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000336 InstrItinData<IIC_iStore_bh_r,[InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000337 InstrStage<1, [A9_MUX0], 0>,
Evan Cheng05f13e92010-10-09 01:03:04 +0000338 InstrStage<2, [A9_AGU]>,
339 InstrStage<1, [A9_LS0, A9_LS1]>], [1, 1, 1]>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000340 InstrItinData<IIC_iStore_d_r, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000341 InstrStage<1, [A9_MUX0], 0>,
Evan Cheng05f13e92010-10-09 01:03:04 +0000342 InstrStage<2, [A9_AGU]>,
343 InstrStage<1, [A9_LS0, A9_LS1]>], [1, 1, 1]>,
Anton Korobeynikov2a21aef2010-05-29 19:25:34 +0000344 //
345 // Scaled register offset
Evan Cheng73eac2a2010-10-03 02:03:59 +0000346 InstrItinData<IIC_iStore_si , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
347 InstrStage<1, [A9_MUX0], 0>,
Evan Cheng05f13e92010-10-09 01:03:04 +0000348 InstrStage<1, [A9_AGU]>,
349 InstrStage<1, [A9_LS0, A9_LS1]>], [1, 1, 1]>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000350 InstrItinData<IIC_iStore_bh_si,[InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000351 InstrStage<1, [A9_MUX0], 0>,
Evan Cheng05f13e92010-10-09 01:03:04 +0000352 InstrStage<2, [A9_AGU]>,
353 InstrStage<1, [A9_LS0, A9_LS1]>], [1, 1, 1]>,
Anton Korobeynikov2a21aef2010-05-29 19:25:34 +0000354 //
355 // Immediate offset with update
Evan Cheng73eac2a2010-10-03 02:03:59 +0000356 InstrItinData<IIC_iStore_iu , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
357 InstrStage<1, [A9_MUX0], 0>,
Evan Cheng05f13e92010-10-09 01:03:04 +0000358 InstrStage<1, [A9_AGU]>,
359 InstrStage<1, [A9_LS0, A9_LS1]>], [2, 1, 1]>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000360 InstrItinData<IIC_iStore_bh_iu,[InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000361 InstrStage<1, [A9_MUX0], 0>,
Evan Cheng05f13e92010-10-09 01:03:04 +0000362 InstrStage<2, [A9_AGU]>,
363 InstrStage<1, [A9_LS0, A9_LS1]>], [3, 1, 1]>,
Anton Korobeynikov2a21aef2010-05-29 19:25:34 +0000364 //
365 // Register offset with update
Evan Cheng73eac2a2010-10-03 02:03:59 +0000366 InstrItinData<IIC_iStore_ru , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
367 InstrStage<1, [A9_MUX0], 0>,
Evan Cheng05f13e92010-10-09 01:03:04 +0000368 InstrStage<1, [A9_AGU]>,
369 InstrStage<1, [A9_LS0, A9_LS1]>],
Evan Cheng73eac2a2010-10-03 02:03:59 +0000370 [2, 1, 1, 1]>,
371 InstrItinData<IIC_iStore_bh_ru,[InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000372 InstrStage<1, [A9_MUX0], 0>,
Evan Cheng05f13e92010-10-09 01:03:04 +0000373 InstrStage<2, [A9_AGU]>,
374 InstrStage<1, [A9_LS0, A9_LS1]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000375 [3, 1, 1, 1]>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000376 InstrItinData<IIC_iStore_d_ru, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
377 InstrStage<1, [A9_MUX0], 0>,
Evan Cheng05f13e92010-10-09 01:03:04 +0000378 InstrStage<2, [A9_AGU]>,
379 InstrStage<1, [A9_LS0, A9_LS1]>],
Evan Cheng73eac2a2010-10-03 02:03:59 +0000380 [3, 1, 1, 1]>,
Anton Korobeynikov2a21aef2010-05-29 19:25:34 +0000381 //
382 // Scaled register offset with update
Evan Cheng73eac2a2010-10-03 02:03:59 +0000383 InstrItinData<IIC_iStore_siu, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
384 InstrStage<1, [A9_MUX0], 0>,
Evan Cheng05f13e92010-10-09 01:03:04 +0000385 InstrStage<1, [A9_AGU]>,
386 InstrStage<1, [A9_LS0, A9_LS1]>],
Evan Cheng73eac2a2010-10-03 02:03:59 +0000387 [2, 1, 1, 1]>,
388 InstrItinData<IIC_iStore_bh_siu, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
389 InstrStage<1, [A9_MUX0], 0>,
Evan Cheng05f13e92010-10-09 01:03:04 +0000390 InstrStage<2, [A9_AGU]>,
391 InstrStage<1, [A9_LS0, A9_LS1]>],
Evan Cheng73eac2a2010-10-03 02:03:59 +0000392 [3, 1, 1, 1]>,
Anton Korobeynikov2a21aef2010-05-29 19:25:34 +0000393 //
394 // Store multiple
Evan Cheng49d4c0b2010-10-06 06:27:31 +0000395 InstrItinData<IIC_iStore_m , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000396 InstrStage<1, [A9_MUX0], 0>,
Evan Cheng05f13e92010-10-09 01:03:04 +0000397 InstrStage<1, [A9_AGU]>,
398 InstrStage<2, [A9_LS0, A9_LS1]>]>,
Evan Cheng49d4c0b2010-10-06 06:27:31 +0000399 //
400 // Store multiple + update
401 InstrItinData<IIC_iStore_mu, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
402 InstrStage<1, [A9_MUX0], 0>,
Evan Cheng05f13e92010-10-09 01:03:04 +0000403 InstrStage<1, [A9_AGU]>,
404 InstrStage<2, [A9_LS0, A9_LS1]>], [2]>,
Evan Cheng49d4c0b2010-10-06 06:27:31 +0000405
Anton Korobeynikov94d7fd82010-05-29 19:25:17 +0000406 // Branch
407 //
408 // no delay slots, so the latency of a branch is unimportant
Evan Cheng49d4c0b2010-10-06 06:27:31 +0000409 InstrItinData<IIC_Br , [InstrStage<1, [A9_Issue0], 0>,
410 InstrStage<1, [A9_Issue1], 0>,
411 InstrStage<1, [A9_Branch]>]>,
Anton Korobeynikov94d7fd82010-05-29 19:25:17 +0000412
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000413 // VFP and NEON shares the same register file. This means that every VFP
414 // instruction should wait for full completion of the consecutive NEON
415 // instruction and vice-versa. We model this behavior with two artificial FUs:
416 // DRegsVFP and DRegsVFP.
417 //
418 // Every VFP instruction:
419 // - Acquires DRegsVFP resource for 1 cycle
420 // - Reserves DRegsN resource for the whole duration (including time to
421 // register file writeback!).
422 // Every NEON instruction does the same but with FUs swapped.
423 //
Jim Grosbach7ea5fc02010-06-28 04:27:01 +0000424 // Since the reserved FU cannot be acquired, this models precisely
425 // "cross-domain" stalls.
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000426
427 // VFP
428 // Issue through integer pipeline, and execute in NEON unit.
429
430 // FP Special Register to Integer Register File Move
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000431 InstrItinData<IIC_fpSTAT , [InstrStage<1, [A9_DRegsVFP], 0, Required>,
432 InstrStage<2, [A9_DRegsN], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000433 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000434 InstrStage<1, [A9_MUX0], 0>,
435 InstrStage<1, [A9_NPipe]>]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000436 //
437 // Single-precision FP Unary
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000438 InstrItinData<IIC_fpUNA32 , [InstrStage<1, [A9_DRegsVFP], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000439 // Extra latency cycles since wbck is 2 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000440 InstrStage<3, [A9_DRegsN], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000441 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000442 InstrStage<1, [A9_MUX0], 0>,
443 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000444 [1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000445 //
446 // Double-precision FP Unary
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000447 InstrItinData<IIC_fpUNA64 , [InstrStage<1, [A9_DRegsVFP], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000448 // Extra latency cycles since wbck is 2 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000449 InstrStage<3, [A9_DRegsN], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000450 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000451 InstrStage<1, [A9_MUX0], 0>,
452 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000453 [1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000454
455 //
456 // Single-precision FP Compare
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000457 InstrItinData<IIC_fpCMP32 , [InstrStage<1, [A9_DRegsVFP], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000458 // Extra latency cycles since wbck is 4 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000459 InstrStage<5, [A9_DRegsN], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000460 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000461 InstrStage<1, [A9_MUX0], 0>,
462 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000463 [1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000464 //
465 // Double-precision FP Compare
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000466 InstrItinData<IIC_fpCMP64 , [InstrStage<1, [A9_DRegsVFP], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000467 // Extra latency cycles since wbck is 4 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000468 InstrStage<5, [A9_DRegsN], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000469 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000470 InstrStage<1, [A9_MUX0], 0>,
471 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000472 [1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000473 //
474 // Single to Double FP Convert
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000475 InstrItinData<IIC_fpCVTSD , [InstrStage<1, [A9_DRegsVFP], 0, Required>,
476 InstrStage<5, [A9_DRegsN], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000477 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000478 InstrStage<1, [A9_MUX0], 0>,
479 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000480 [4, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000481 //
482 // Double to Single FP Convert
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000483 InstrItinData<IIC_fpCVTDS , [InstrStage<1, [A9_DRegsVFP], 0, Required>,
484 InstrStage<5, [A9_DRegsN], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000485 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000486 InstrStage<1, [A9_MUX0], 0>,
487 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000488 [4, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000489
490 //
491 // Single to Half FP Convert
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000492 InstrItinData<IIC_fpCVTSH , [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 // Half to Single FP Convert
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000500 InstrItinData<IIC_fpCVTHS , [InstrStage<1, [A9_DRegsVFP], 0, Required>,
501 InstrStage<3, [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 [2, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000506
507 //
508 // Single-Precision FP to Integer Convert
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000509 InstrItinData<IIC_fpCVTSI , [InstrStage<1, [A9_DRegsVFP], 0, Required>,
510 InstrStage<5, [A9_DRegsN], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000511 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000512 InstrStage<1, [A9_MUX0], 0>,
513 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000514 [4, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000515 //
516 // Double-Precision FP to Integer Convert
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000517 InstrItinData<IIC_fpCVTDI , [InstrStage<1, [A9_DRegsVFP], 0, Required>,
518 InstrStage<5, [A9_DRegsN], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000519 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000520 InstrStage<1, [A9_MUX0], 0>,
521 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000522 [4, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000523 //
524 // Integer to Single-Precision FP Convert
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000525 InstrItinData<IIC_fpCVTIS , [InstrStage<1, [A9_DRegsVFP], 0, Required>,
526 InstrStage<5, [A9_DRegsN], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000527 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000528 InstrStage<1, [A9_MUX0], 0>,
529 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000530 [4, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000531 //
532 // Integer to Double-Precision FP Convert
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000533 InstrItinData<IIC_fpCVTID , [InstrStage<1, [A9_DRegsVFP], 0, Required>,
534 InstrStage<5, [A9_DRegsN], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000535 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000536 InstrStage<1, [A9_MUX0], 0>,
537 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000538 [4, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000539 //
540 // Single-precision FP ALU
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000541 InstrItinData<IIC_fpALU32 , [InstrStage<1, [A9_DRegsVFP], 0, Required>,
542 InstrStage<5, [A9_DRegsN], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000543 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000544 InstrStage<1, [A9_MUX0], 0>,
545 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000546 [4, 1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000547 //
548 // Double-precision FP ALU
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000549 InstrItinData<IIC_fpALU64 , [InstrStage<1, [A9_DRegsVFP], 0, Required>,
550 InstrStage<5, [A9_DRegsN], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000551 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000552 InstrStage<1, [A9_MUX0], 0>,
553 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000554 [4, 1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000555 //
556 // Single-precision FP Multiply
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000557 InstrItinData<IIC_fpMUL32 , [InstrStage<1, [A9_DRegsVFP], 0, Required>,
558 InstrStage<6, [A9_DRegsN], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000559 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000560 InstrStage<1, [A9_MUX0], 0>,
561 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000562 [5, 1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000563 //
564 // Double-precision FP Multiply
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000565 InstrItinData<IIC_fpMUL64 , [InstrStage<1, [A9_DRegsVFP], 0, Required>,
566 InstrStage<7, [A9_DRegsN], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000567 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000568 InstrStage<1, [A9_MUX0], 0>,
569 InstrStage<2, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000570 [6, 1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000571 //
572 // Single-precision FP MAC
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000573 InstrItinData<IIC_fpMAC32 , [InstrStage<1, [A9_DRegsVFP], 0, Required>,
574 InstrStage<9, [A9_DRegsN], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000575 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000576 InstrStage<1, [A9_MUX0], 0>,
577 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000578 [8, 0, 1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000579 //
580 // Double-precision FP MAC
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000581 InstrItinData<IIC_fpMAC64 , [InstrStage<1, [A9_DRegsVFP], 0, Required>,
582 InstrStage<10, [A9_DRegsN], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000583 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000584 InstrStage<1, [A9_MUX0], 0>,
585 InstrStage<2, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000586 [9, 0, 1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000587 //
588 // Single-precision FP DIV
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000589 InstrItinData<IIC_fpDIV32 , [InstrStage<1, [A9_DRegsVFP], 0, Required>,
590 InstrStage<16, [A9_DRegsN], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000591 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000592 InstrStage<1, [A9_MUX0], 0>,
593 InstrStage<10, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000594 [15, 1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000595 //
596 // Double-precision FP DIV
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000597 InstrItinData<IIC_fpDIV64 , [InstrStage<1, [A9_DRegsVFP], 0, Required>,
598 InstrStage<26, [A9_DRegsN], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000599 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000600 InstrStage<1, [A9_MUX0], 0>,
601 InstrStage<20, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000602 [25, 1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000603 //
604 // Single-precision FP SQRT
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000605 InstrItinData<IIC_fpSQRT32, [InstrStage<1, [A9_DRegsVFP], 0, Required>,
606 InstrStage<18, [A9_DRegsN], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000607 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000608 InstrStage<1, [A9_MUX0], 0>,
609 InstrStage<13, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000610 [17, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000611 //
612 // Double-precision FP SQRT
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000613 InstrItinData<IIC_fpSQRT64, [InstrStage<1, [A9_DRegsVFP], 0, Required>,
614 InstrStage<33, [A9_DRegsN], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000615 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000616 InstrStage<1, [A9_MUX0], 0>,
617 InstrStage<28, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000618 [32, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000619
620 //
621 // Integer to Single-precision Move
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000622 InstrItinData<IIC_fpMOVIS, [InstrStage<1, [A9_DRegsVFP], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000623 // Extra 1 latency cycle since wbck is 2 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000624 InstrStage<3, [A9_DRegsN], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000625 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000626 InstrStage<1, [A9_MUX0], 0>,
627 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000628 [1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000629 //
630 // Integer to Double-precision Move
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000631 InstrItinData<IIC_fpMOVID, [InstrStage<1, [A9_DRegsVFP], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000632 // Extra 1 latency cycle since wbck is 2 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000633 InstrStage<3, [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>,
636 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000637 [1, 1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000638 //
639 // Single-precision to Integer Move
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000640 InstrItinData<IIC_fpMOVSI, [InstrStage<1, [A9_DRegsVFP], 0, Required>,
641 InstrStage<2, [A9_DRegsN], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000642 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000643 InstrStage<1, [A9_MUX0], 0>,
644 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000645 [1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000646 //
647 // Double-precision to Integer Move
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000648 InstrItinData<IIC_fpMOVDI, [InstrStage<1, [A9_DRegsVFP], 0, Required>,
649 InstrStage<2, [A9_DRegsN], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000650 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000651 InstrStage<1, [A9_MUX0], 0>,
652 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000653 [1, 1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000654 //
655 // Single-precision FP Load
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000656 InstrItinData<IIC_fpLoad32, [InstrStage<1, [A9_DRegsVFP], 0, Required>,
657 InstrStage<2, [A9_DRegsN], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000658 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000659 InstrStage<1, [A9_MUX0], 0>,
660 InstrStage<1, [A9_NPipe]>],
Evan Chengf3179562010-10-01 21:40:30 +0000661 [1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000662 //
663 // Double-precision FP Load
Evan Chengf3179562010-10-01 21:40:30 +0000664 // FIXME: Result latency is 1 if address is 64-bit aligned.
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000665 InstrItinData<IIC_fpLoad64, [InstrStage<1, [A9_DRegsVFP], 0, Required>,
666 InstrStage<2, [A9_DRegsN], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000667 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000668 InstrStage<1, [A9_MUX0], 0>,
669 InstrStage<1, [A9_NPipe]>],
Evan Chengf3179562010-10-01 21:40:30 +0000670 [2, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000671 //
672 // FP Load Multiple
Evan Cheng1958cef2010-10-07 01:50:48 +0000673 InstrItinData<IIC_fpLoad_m, [InstrStage<1, [A9_DRegsVFP], 0, Required>,
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000674 InstrStage<2, [A9_DRegsN], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000675 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000676 InstrStage<1, [A9_MUX0], 0>,
Evan Cheng1958cef2010-10-07 01:50:48 +0000677 InstrStage<1, [A9_NPipe]>], [1, 1, 1, 1]>,
678 //
679 // FP Load Multiple + update
680 InstrItinData<IIC_fpLoad_mu,[InstrStage<1, [A9_DRegsVFP], 0, Required>,
681 InstrStage<2, [A9_DRegsN], 0, Reserved>,
682 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
683 InstrStage<1, [A9_MUX0], 0>,
684 InstrStage<1, [A9_NPipe]>], [2, 1, 1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000685 //
686 // Single-precision FP Store
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000687 InstrItinData<IIC_fpStore32,[InstrStage<1, [A9_DRegsVFP], 0, Required>,
688 InstrStage<2, [A9_DRegsN], 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 Chengf3179562010-10-01 21:40:30 +0000692 [1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000693 //
694 // Double-precision FP Store
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000695 InstrItinData<IIC_fpStore64,[InstrStage<1, [A9_DRegsVFP], 0, Required>,
696 InstrStage<2, [A9_DRegsN], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000697 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000698 InstrStage<1, [A9_MUX0], 0>,
699 InstrStage<1, [A9_NPipe]>],
Evan Chengf3179562010-10-01 21:40:30 +0000700 [1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000701 //
702 // FP Store Multiple
Evan Cheng1958cef2010-10-07 01:50:48 +0000703 InstrItinData<IIC_fpStore_m,[InstrStage<1, [A9_DRegsVFP], 0, Required>,
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000704 InstrStage<2, [A9_DRegsN], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000705 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000706 InstrStage<1, [A9_MUX0], 0>,
Evan Cheng1958cef2010-10-07 01:50:48 +0000707 InstrStage<1, [A9_NPipe]>], [1, 1, 1, 1]>,
708 //
709 // FP Store Multiple + update
710 InstrItinData<IIC_fpStore_mu,[InstrStage<1, [A9_DRegsVFP], 0, Required>,
711 InstrStage<2, [A9_DRegsN], 0, Reserved>,
712 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
713 InstrStage<1, [A9_MUX0], 0>,
714 InstrStage<1, [A9_NPipe]>], [2, 1, 1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000715 // NEON
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000716 // VLD1
Evan Cheng05f13e92010-10-09 01:03:04 +0000717 // FIXME: Conservatively assume insufficent alignment.
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000718 InstrItinData<IIC_VLD1, [InstrStage<1, [A9_DRegsN], 0, Required>,
Evan Cheng05f13e92010-10-09 01:03:04 +0000719 InstrStage<8, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000720 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000721 InstrStage<1, [A9_MUX0], 0>,
Evan Cheng05f13e92010-10-09 01:03:04 +0000722 InstrStage<2, [A9_NPipe]>],
723 [2, 1]>,
724 // VLD1x2
725 InstrItinData<IIC_VLD1x2, [InstrStage<1, [A9_DRegsN], 0, Required>,
726 InstrStage<8, [A9_DRegsVFP], 0, Reserved>,
727 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
728 InstrStage<1, [A9_MUX0], 0>,
729 InstrStage<2, [A9_NPipe]>],
730 [2, 2, 1]>,
731 // VLD1x3
732 InstrItinData<IIC_VLD1x3, [InstrStage<1, [A9_DRegsN], 0, Required>,
733 InstrStage<9, [A9_DRegsVFP], 0, Reserved>,
734 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
735 InstrStage<1, [A9_MUX0], 0>,
736 InstrStage<3, [A9_NPipe]>],
737 [2, 2, 3, 1]>,
738 // VLD1x4
739 InstrItinData<IIC_VLD1x4, [InstrStage<1, [A9_DRegsN], 0, Required>,
740 InstrStage<9, [A9_DRegsVFP], 0, Reserved>,
741 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
742 InstrStage<1, [A9_MUX0], 0>,
743 InstrStage<3, [A9_NPipe]>],
744 [2, 2, 3, 3, 1]>,
745 // VLD1u
746 InstrItinData<IIC_VLD1u, [InstrStage<1, [A9_DRegsN], 0, Required>,
747 InstrStage<8, [A9_DRegsVFP], 0, Reserved>,
748 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
749 InstrStage<1, [A9_MUX0], 0>,
750 InstrStage<2, [A9_NPipe]>],
751 [2, 2, 1]>,
752 // VLD1x2u
753 InstrItinData<IIC_VLD1x2u, [InstrStage<1, [A9_DRegsN], 0, Required>,
754 InstrStage<8, [A9_DRegsVFP], 0, Reserved>,
755 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
756 InstrStage<1, [A9_MUX0], 0>,
757 InstrStage<2, [A9_NPipe]>],
758 [2, 2, 2, 1]>,
759 // VLD1x3u
760 InstrItinData<IIC_VLD1x3u, [InstrStage<1, [A9_DRegsN], 0, Required>,
761 InstrStage<9, [A9_DRegsVFP], 0, Reserved>,
762 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
763 InstrStage<1, [A9_MUX0], 0>,
764 InstrStage<3, [A9_NPipe]>],
765 [2, 2, 3, 2, 1]>,
766 // VLD1x4u
767 InstrItinData<IIC_VLD1x4u, [InstrStage<1, [A9_DRegsN], 0, Required>,
768 InstrStage<9, [A9_DRegsVFP], 0, Reserved>,
769 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
770 InstrStage<1, [A9_MUX0], 0>,
771 InstrStage<3, [A9_NPipe]>],
772 [2, 2, 3, 3, 2, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000773 //
774 // VLD2
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000775 InstrItinData<IIC_VLD2, [InstrStage<1, [A9_DRegsN], 0, Required>,
Evan Cheng05f13e92010-10-09 01:03:04 +0000776 // Extra latency cycles since wbck is 7 cycles
777 InstrStage<8, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000778 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000779 InstrStage<1, [A9_MUX0], 0>,
Evan Cheng05f13e92010-10-09 01:03:04 +0000780 InstrStage<2, [A9_NPipe]>],
781 [3, 3, 1]>,
782 //
783 // VLD2x2
784 InstrItinData<IIC_VLD2x2, [InstrStage<1, [A9_DRegsN], 0, Required>,
785 InstrStage<9, [A9_DRegsVFP], 0, Reserved>,
786 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
787 InstrStage<1, [A9_MUX0], 0>,
788 InstrStage<3, [A9_NPipe]>],
789 [3, 4, 3, 4, 1]>,
790 //
791 // VLD2ln
792 InstrItinData<IIC_VLD2ln, [InstrStage<1, [A9_DRegsN], 0, Required>,
793 InstrStage<9, [A9_DRegsVFP], 0, Reserved>,
794 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
795 InstrStage<1, [A9_MUX0], 0>,
796 InstrStage<3, [A9_NPipe]>],
797 [4, 4, 1, 1, 1, 1]>,
798 //
799 // VLD2u
800 InstrItinData<IIC_VLD2u, [InstrStage<1, [A9_DRegsN], 0, Required>,
801 // Extra latency cycles since wbck is 7 cycles
802 InstrStage<8, [A9_DRegsVFP], 0, Reserved>,
803 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
804 InstrStage<1, [A9_MUX0], 0>,
805 InstrStage<2, [A9_NPipe]>],
806 [3, 3, 2, 1, 1, 1]>,
807 //
808 // VLD2x2u
809 InstrItinData<IIC_VLD2x2u, [InstrStage<1, [A9_DRegsN], 0, Required>,
810 InstrStage<9, [A9_DRegsVFP], 0, Reserved>,
811 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
812 InstrStage<1, [A9_MUX0], 0>,
813 InstrStage<3, [A9_NPipe]>],
814 [3, 4, 3, 4, 2, 1]>,
815 //
816 // VLD2lnu
817 InstrItinData<IIC_VLD2lnu, [InstrStage<1, [A9_DRegsN], 0, Required>,
818 InstrStage<9, [A9_DRegsVFP], 0, Reserved>,
819 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
820 InstrStage<1, [A9_MUX0], 0>,
821 InstrStage<3, [A9_NPipe]>],
822 [4, 4, 2, 1, 1, 1, 1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000823 //
824 // VLD3
825 // FIXME: We don't model this instruction properly
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000826 InstrItinData<IIC_VLD3, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000827 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000828 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000829 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000830 InstrStage<1, [A9_MUX0], 0>,
831 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000832 [2, 2, 2, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000833 //
834 // VLD4
835 // FIXME: We don't model this instruction properly
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000836 InstrItinData<IIC_VLD4, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000837 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000838 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000839 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000840 InstrStage<1, [A9_MUX0], 0>,
841 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000842 [2, 2, 2, 2, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000843 //
844 // VST
845 // FIXME: We don't model this instruction properly
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000846 InstrItinData<IIC_VST, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000847 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000848 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000849 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000850 InstrStage<1, [A9_MUX0], 0>,
851 InstrStage<1, [A9_NPipe]>]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000852 //
853 // Double-register Integer Unary
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000854 InstrItinData<IIC_VUNAiD, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000855 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000856 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000857 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000858 InstrStage<1, [A9_MUX0], 0>,
859 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000860 [4, 2]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000861 //
862 // Quad-register Integer Unary
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000863 InstrItinData<IIC_VUNAiQ, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000864 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000865 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000866 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000867 InstrStage<1, [A9_MUX0], 0>,
868 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000869 [4, 2]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000870 //
871 // Double-register Integer Q-Unary
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000872 InstrItinData<IIC_VQUNAiD, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000873 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000874 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000875 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000876 InstrStage<1, [A9_MUX0], 0>,
877 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000878 [4, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000879 //
880 // Quad-register Integer CountQ-Unary
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000881 InstrItinData<IIC_VQUNAiQ, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000882 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000883 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000884 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000885 InstrStage<1, [A9_MUX0], 0>,
886 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000887 [4, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000888 //
889 // Double-register Integer Binary
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000890 InstrItinData<IIC_VBINiD, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000891 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000892 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000893 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000894 InstrStage<1, [A9_MUX0], 0>,
895 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000896 [3, 2, 2]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000897 //
898 // Quad-register Integer Binary
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000899 InstrItinData<IIC_VBINiQ, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000900 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000901 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000902 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000903 InstrStage<1, [A9_MUX0], 0>,
904 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000905 [3, 2, 2]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000906 //
907 // Double-register Integer Subtract
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000908 InstrItinData<IIC_VSUBiD, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000909 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000910 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000911 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000912 InstrStage<1, [A9_MUX0], 0>,
913 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000914 [3, 2, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000915 //
916 // Quad-register Integer Subtract
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000917 InstrItinData<IIC_VSUBiQ, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000918 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000919 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000920 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000921 InstrStage<1, [A9_MUX0], 0>,
922 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000923 [3, 2, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000924 //
925 // Double-register Integer Shift
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000926 InstrItinData<IIC_VSHLiD, [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 [3, 1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000933 //
934 // Quad-register Integer Shift
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000935 InstrItinData<IIC_VSHLiQ, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000936 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000937 InstrStage<7, [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<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000941 [3, 1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000942 //
943 // Double-register Integer Shift (4 cycle)
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000944 InstrItinData<IIC_VSHLi4D, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000945 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000946 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000947 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000948 InstrStage<1, [A9_MUX0], 0>,
949 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000950 [4, 1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000951 //
952 // Quad-register Integer Shift (4 cycle)
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000953 InstrItinData<IIC_VSHLi4Q, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000954 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000955 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000956 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000957 InstrStage<1, [A9_MUX0], 0>,
958 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000959 [4, 1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000960 //
961 // Double-register Integer Binary (4 cycle)
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000962 InstrItinData<IIC_VBINi4D, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000963 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000964 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000965 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000966 InstrStage<1, [A9_MUX0], 0>,
967 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000968 [4, 2, 2]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000969 //
970 // Quad-register Integer Binary (4 cycle)
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000971 InstrItinData<IIC_VBINi4Q, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000972 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000973 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000974 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000975 InstrStage<1, [A9_MUX0], 0>,
976 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000977 [4, 2, 2]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000978 //
979 // Double-register Integer Subtract (4 cycle)
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000980 InstrItinData<IIC_VSUBiD, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000981 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000982 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000983 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000984 InstrStage<1, [A9_MUX0], 0>,
985 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000986 [4, 2, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000987 //
988 // Quad-register Integer Subtract (4 cycle)
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000989 InstrItinData<IIC_VSUBiQ, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000990 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000991 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000992 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000993 InstrStage<1, [A9_MUX0], 0>,
994 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000995 [4, 2, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000996
997 //
998 // Double-register Integer Count
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000999 InstrItinData<IIC_VCNTiD, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001000 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001001 InstrStage<7, [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 Cheng89e6f672010-10-01 19:41:46 +00001005 [3, 2, 2]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001006 //
1007 // Quad-register Integer Count
1008 // Result written in N3, but that is relative to the last cycle of multicycle,
1009 // so we use 4 for those cases
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001010 InstrItinData<IIC_VCNTiQ, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001011 // Extra latency cycles since wbck is 7 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001012 InstrStage<8, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +00001013 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001014 InstrStage<1, [A9_MUX0], 0>,
1015 InstrStage<2, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001016 [4, 2, 2]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001017 //
1018 // Double-register Absolute Difference and Accumulate
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001019 InstrItinData<IIC_VABAD, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001020 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001021 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +00001022 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001023 InstrStage<1, [A9_MUX0], 0>,
1024 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001025 [6, 3, 2, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001026 //
1027 // Quad-register Absolute Difference and Accumulate
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001028 InstrItinData<IIC_VABAQ, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001029 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001030 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +00001031 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001032 InstrStage<1, [A9_MUX0], 0>,
1033 InstrStage<2, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001034 [6, 3, 2, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001035 //
1036 // Double-register Integer Pair Add Long
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001037 InstrItinData<IIC_VPALiD, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001038 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001039 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +00001040 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001041 InstrStage<1, [A9_MUX0], 0>,
1042 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001043 [6, 3, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001044 //
1045 // Quad-register Integer Pair Add Long
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001046 InstrItinData<IIC_VPALiQ, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001047 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001048 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +00001049 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001050 InstrStage<1, [A9_MUX0], 0>,
1051 InstrStage<2, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001052 [6, 3, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001053
1054 //
1055 // Double-register Integer Multiply (.8, .16)
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001056 InstrItinData<IIC_VMULi16D, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001057 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001058 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +00001059 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001060 InstrStage<1, [A9_MUX0], 0>,
1061 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001062 [6, 2, 2]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001063 //
1064 // Quad-register Integer Multiply (.8, .16)
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001065 InstrItinData<IIC_VMULi16Q, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001066 // Extra latency cycles since wbck is 7 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001067 InstrStage<8, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +00001068 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001069 InstrStage<1, [A9_MUX0], 0>,
1070 InstrStage<2, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001071 [7, 2, 2]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001072
1073 //
1074 // Double-register Integer Multiply (.32)
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001075 InstrItinData<IIC_VMULi32D, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001076 // Extra latency cycles since wbck is 7 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001077 InstrStage<8, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +00001078 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001079 InstrStage<1, [A9_MUX0], 0>,
1080 InstrStage<2, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001081 [7, 2, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001082 //
1083 // Quad-register Integer Multiply (.32)
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001084 InstrItinData<IIC_VMULi32Q, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001085 // Extra latency cycles since wbck is 9 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001086 InstrStage<10, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +00001087 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001088 InstrStage<1, [A9_MUX0], 0>,
1089 InstrStage<4, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001090 [9, 2, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001091 //
1092 // Double-register Integer Multiply-Accumulate (.8, .16)
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001093 InstrItinData<IIC_VMACi16D, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001094 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001095 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +00001096 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001097 InstrStage<1, [A9_MUX0], 0>,
1098 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001099 [6, 3, 2, 2]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001100 //
1101 // Double-register Integer Multiply-Accumulate (.32)
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001102 InstrItinData<IIC_VMACi32D, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001103 // Extra latency cycles since wbck is 7 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001104 InstrStage<8, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +00001105 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001106 InstrStage<1, [A9_MUX0], 0>,
1107 InstrStage<2, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001108 [7, 3, 2, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001109 //
1110 // Quad-register Integer Multiply-Accumulate (.8, .16)
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001111 InstrItinData<IIC_VMACi16Q, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001112 // Extra latency cycles since wbck is 7 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001113 InstrStage<8, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +00001114 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001115 InstrStage<1, [A9_MUX0], 0>,
1116 InstrStage<2, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001117 [7, 3, 2, 2]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001118 //
1119 // Quad-register Integer Multiply-Accumulate (.32)
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001120 InstrItinData<IIC_VMACi32Q, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001121 // Extra latency cycles since wbck is 9 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001122 InstrStage<10, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +00001123 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001124 InstrStage<1, [A9_MUX0], 0>,
1125 InstrStage<4, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001126 [9, 3, 2, 1]>,
Evan Cheng2a5d7642010-10-01 20:50:58 +00001127
1128 //
1129 // Move
1130 InstrItinData<IIC_VMOV, [InstrStage<1, [A9_DRegsN], 0, Required>,
1131 InstrStage<1, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +00001132 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001133 InstrStage<1, [A9_MUX0], 0>,
1134 InstrStage<1, [A9_NPipe]>],
Evan Cheng2a5d7642010-10-01 20:50:58 +00001135 [1,1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001136 //
1137 // Move Immediate
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001138 InstrItinData<IIC_VMOVImm, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001139 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001140 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +00001141 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001142 InstrStage<1, [A9_MUX0], 0>,
1143 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001144 [3]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001145 //
1146 // Double-register Permute Move
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001147 InstrItinData<IIC_VMOVD, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001148 // FIXME: all latencies are arbitrary, no information is available
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001149 InstrStage<3, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +00001150 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001151 InstrStage<1, [A9_MUX0], 0>,
1152 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001153 [2, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001154 //
1155 // Quad-register Permute Move
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001156 InstrItinData<IIC_VMOVQ, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001157 // FIXME: all latencies are arbitrary, no information is available
Evan Cheng2a5d7642010-10-01 20:50:58 +00001158 InstrStage<3, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +00001159 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001160 InstrStage<1, [A9_MUX0], 0>,
1161 InstrStage<1, [A9_NPipe]>],
Evan Cheng2a5d7642010-10-01 20:50:58 +00001162 [2, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001163 //
1164 // Integer to Single-precision Move
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001165 InstrItinData<IIC_VMOVIS , [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001166 // FIXME: all latencies are arbitrary, no information is available
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001167 InstrStage<3, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +00001168 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001169 InstrStage<1, [A9_MUX0], 0>,
1170 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001171 [2, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001172 //
1173 // Integer to Double-precision Move
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001174 InstrItinData<IIC_VMOVID , [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001175 // FIXME: all latencies are arbitrary, no information is available
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001176 InstrStage<3, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +00001177 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001178 InstrStage<1, [A9_MUX0], 0>,
1179 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001180 [2, 1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001181 //
1182 // Single-precision to Integer Move
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001183 InstrItinData<IIC_VMOVSI , [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001184 // FIXME: all latencies are arbitrary, no information is available
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001185 InstrStage<3, [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<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001189 [2, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001190 //
1191 // Double-precision to Integer Move
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001192 InstrItinData<IIC_VMOVDI , [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001193 // FIXME: all latencies are arbitrary, no information is available
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001194 InstrStage<3, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +00001195 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001196 InstrStage<1, [A9_MUX0], 0>,
1197 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001198 [2, 2, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001199 //
1200 // Integer to Lane Move
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001201 InstrItinData<IIC_VMOVISL , [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001202 // FIXME: all latencies are arbitrary, no information is available
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001203 InstrStage<4, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +00001204 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001205 InstrStage<1, [A9_MUX0], 0>,
1206 InstrStage<2, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001207 [3, 1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001208
1209 //
Evan Cheng2a5d7642010-10-01 20:50:58 +00001210 // Vector narrow move
1211 InstrItinData<IIC_VMOVN, [InstrStage<1, [A9_DRegsN], 0, Required>,
1212 // Extra latency cycles since wbck is 6 cycles
1213 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +00001214 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001215 InstrStage<1, [A9_MUX0], 0>,
1216 InstrStage<1, [A9_NPipe]>],
Evan Cheng2a5d7642010-10-01 20:50:58 +00001217 [3, 1]>,
1218 //
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001219 // Double-register FP Unary
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001220 InstrItinData<IIC_VUNAD, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001221 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001222 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +00001223 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001224 InstrStage<1, [A9_MUX0], 0>,
1225 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001226 [5, 2]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001227 //
1228 // Quad-register FP Unary
1229 // Result written in N5, but that is relative to the last cycle of multicycle,
1230 // so we use 6 for those cases
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001231 InstrItinData<IIC_VUNAQ, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001232 // Extra latency cycles since wbck is 7 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001233 InstrStage<8, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +00001234 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001235 InstrStage<1, [A9_MUX0], 0>,
1236 InstrStage<2, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001237 [6, 2]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001238 //
1239 // Double-register FP Binary
1240 // FIXME: We're using this itin for many instructions and [2, 2] here is too
1241 // optimistic.
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001242 InstrItinData<IIC_VBIND, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001243 // Extra latency cycles since wbck is 7 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001244 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +00001245 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001246 InstrStage<1, [A9_MUX0], 0>,
1247 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001248 [5, 2, 2]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001249 //
1250 // Quad-register FP Binary
1251 // Result written in N5, but that is relative to the last cycle of multicycle,
1252 // so we use 6 for those cases
1253 // FIXME: We're using this itin for many instructions and [2, 2] here is too
1254 // optimistic.
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001255 InstrItinData<IIC_VBINQ, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001256 // Extra latency cycles since wbck is 8 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001257 InstrStage<8, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +00001258 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001259 InstrStage<1, [A9_MUX0], 0>,
1260 InstrStage<2, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001261 [6, 2, 2]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001262 //
1263 // Double-register FP Multiple-Accumulate
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001264 InstrItinData<IIC_VMACD, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001265 // Extra latency cycles since wbck is 7 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001266 InstrStage<8, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +00001267 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001268 InstrStage<1, [A9_MUX0], 0>,
1269 InstrStage<2, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001270 [6, 3, 2, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001271 //
1272 // Quad-register FP Multiple-Accumulate
1273 // Result written in N9, but that is relative to the last cycle of multicycle,
1274 // so we use 10 for those cases
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001275 InstrItinData<IIC_VMACQ, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001276 // Extra latency cycles since wbck is 9 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001277 InstrStage<10, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +00001278 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001279 InstrStage<1, [A9_MUX0], 0>,
1280 InstrStage<4, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001281 [8, 4, 2, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001282 //
1283 // Double-register Reciprical Step
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001284 InstrItinData<IIC_VRECSD, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001285 // Extra latency cycles since wbck is 7 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001286 InstrStage<8, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +00001287 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001288 InstrStage<1, [A9_MUX0], 0>,
1289 InstrStage<2, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001290 [6, 2, 2]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001291 //
1292 // Quad-register Reciprical Step
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001293 InstrItinData<IIC_VRECSQ, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001294 // Extra latency cycles since wbck is 9 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001295 InstrStage<10, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +00001296 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001297 InstrStage<1, [A9_MUX0], 0>,
1298 InstrStage<4, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001299 [8, 2, 2]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001300 //
1301 // Double-register Permute
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001302 InstrItinData<IIC_VPERMD, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001303 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001304 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +00001305 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001306 InstrStage<1, [A9_MUX0], 0>,
1307 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001308 [2, 2, 1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001309 //
1310 // Quad-register Permute
1311 // Result written in N2, but that is relative to the last cycle of multicycle,
1312 // so we use 3 for those cases
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001313 InstrItinData<IIC_VPERMQ, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001314 // Extra latency cycles since wbck is 7 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001315 InstrStage<8, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +00001316 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001317 InstrStage<1, [A9_MUX0], 0>,
1318 InstrStage<2, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001319 [3, 3, 1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001320 //
1321 // Quad-register Permute (3 cycle issue)
1322 // Result written in N2, but that is relative to the last cycle of multicycle,
1323 // so we use 4 for those cases
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001324 InstrItinData<IIC_VPERMQ3, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001325 // Extra latency cycles since wbck is 8 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001326 InstrStage<9, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +00001327 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001328 InstrStage<1, [A9_MUX0], 0>,
1329 InstrStage<3, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001330 [4, 4, 1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001331
1332 //
1333 // Double-register VEXT
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001334 InstrItinData<IIC_VEXTD, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001335 // Extra latency cycles since wbck is 7 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001336 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +00001337 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001338 InstrStage<1, [A9_MUX0], 0>,
1339 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001340 [2, 1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001341 //
1342 // Quad-register VEXT
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001343 InstrItinData<IIC_VEXTQ, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001344 // Extra latency cycles since wbck is 9 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001345 InstrStage<8, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +00001346 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001347 InstrStage<1, [A9_MUX0], 0>,
1348 InstrStage<2, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001349 [3, 1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001350 //
1351 // VTB
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001352 InstrItinData<IIC_VTB1, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001353 // Extra latency cycles since wbck is 7 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001354 InstrStage<8, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +00001355 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001356 InstrStage<1, [A9_MUX0], 0>,
1357 InstrStage<2, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001358 [3, 2, 1]>,
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001359 InstrItinData<IIC_VTB2, [InstrStage<2, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001360 // Extra latency cycles since wbck is 7 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001361 InstrStage<8, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +00001362 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001363 InstrStage<1, [A9_MUX0], 0>,
1364 InstrStage<2, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001365 [3, 2, 2, 1]>,
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001366 InstrItinData<IIC_VTB3, [InstrStage<2, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001367 // Extra latency cycles since wbck is 8 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001368 InstrStage<9, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +00001369 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001370 InstrStage<1, [A9_MUX0], 0>,
1371 InstrStage<3, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001372 [4, 2, 2, 3, 1]>,
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001373 InstrItinData<IIC_VTB4, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001374 // Extra latency cycles since wbck is 8 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001375 InstrStage<9, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +00001376 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001377 InstrStage<1, [A9_MUX0], 0>,
1378 InstrStage<3, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001379 [4, 2, 2, 3, 3, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001380 //
1381 // VTBX
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001382 InstrItinData<IIC_VTBX1, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001383 // Extra latency cycles since wbck is 7 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001384 InstrStage<8, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +00001385 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001386 InstrStage<1, [A9_MUX0], 0>,
1387 InstrStage<2, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001388 [3, 1, 2, 1]>,
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001389 InstrItinData<IIC_VTBX2, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001390 // Extra latency cycles since wbck is 7 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001391 InstrStage<8, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +00001392 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001393 InstrStage<1, [A9_MUX0], 0>,
1394 InstrStage<2, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001395 [3, 1, 2, 2, 1]>,
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001396 InstrItinData<IIC_VTBX3, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001397 // Extra latency cycles since wbck is 8 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001398 InstrStage<9, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +00001399 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001400 InstrStage<1, [A9_MUX0], 0>,
1401 InstrStage<3, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001402 [4, 1, 2, 2, 3, 1]>,
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001403 InstrItinData<IIC_VTBX4, [InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001404 // Extra latency cycles since wbck is 8 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001405 InstrStage<9, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +00001406 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001407 InstrStage<1, [A9_MUX0], 0>,
1408 InstrStage<2, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001409 [4, 1, 2, 2, 3, 3, 1]>
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001410]>;