blob: c78f59383f2161ecbdbefbd86b921f972d959a7e [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 Cheng39121582010-10-13 01:54:21 +000027def A9_LSUnit : FuncUnit; // L/S Unit
Anton Korobeynikov7d62e332010-04-18 20:31:01 +000028def A9_DRegsVFP: FuncUnit; // FP register set, VFP side
29def A9_DRegsN : FuncUnit; // FP register set, NEON side
30
Evan Cheng4a010fd2010-09-29 22:42:35 +000031// Bypasses
32def A9_LdBypass : Bypass;
33
Anton Korobeynikov7d62e332010-04-18 20:31:01 +000034def CortexA9Itineraries : ProcessorItineraries<
Evan Cheng73eac2a2010-10-03 02:03:59 +000035 [A9_Issue0, A9_Issue1, A9_Branch, A9_ALU0, A9_ALU1, A9_AGU, A9_NPipe, A9_MUX0,
Evan Cheng39121582010-10-13 01:54:21 +000036 A9_LSUnit, A9_DRegsVFP, A9_DRegsN],
Evan Cheng4a010fd2010-09-29 22:42:35 +000037 [A9_LdBypass], [
Anton Korobeynikov94d7fd82010-05-29 19:25:17 +000038 // Two fully-pipelined integer ALU pipelines
Evan Cheng2259d672010-09-29 00:49:25 +000039
Anton Korobeynikov94d7fd82010-05-29 19:25:17 +000040 //
41 // Move instructions, unconditional
Evan Cheng73eac2a2010-10-03 02:03:59 +000042 InstrItinData<IIC_iMOVi , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
43 InstrStage<1, [A9_ALU0, A9_ALU1]>], [1]>,
44 InstrItinData<IIC_iMOVr , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
45 InstrStage<1, [A9_ALU0, A9_ALU1]>], [1, 1]>,
46 InstrItinData<IIC_iMOVsi , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
47 InstrStage<1, [A9_ALU0, A9_ALU1]>], [1, 1]>,
48 InstrItinData<IIC_iMOVsr , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
49 InstrStage<2, [A9_ALU0, A9_ALU1]>], [2, 1, 1]>,
50 InstrItinData<IIC_iMOVix2 , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
51 InstrStage<1, [A9_ALU0, A9_ALU1]>,
52 InstrStage<1, [A9_ALU0, A9_ALU1]>], [2]>,
Evan Cheng2259d672010-09-29 00:49:25 +000053 //
54 // MVN instructions
Evan Cheng73eac2a2010-10-03 02:03:59 +000055 InstrItinData<IIC_iMVNi , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
56 InstrStage<1, [A9_ALU0, A9_ALU1]>],
Evan Cheng4a010fd2010-09-29 22:42:35 +000057 [1]>,
Evan Cheng73eac2a2010-10-03 02:03:59 +000058 InstrItinData<IIC_iMVNr , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
59 InstrStage<1, [A9_ALU0, A9_ALU1]>],
Evan Cheng4a010fd2010-09-29 22:42:35 +000060 [1, 1], [NoBypass, A9_LdBypass]>,
Evan Cheng73eac2a2010-10-03 02:03:59 +000061 InstrItinData<IIC_iMVNsi , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
62 InstrStage<2, [A9_ALU0, A9_ALU1]>],
Evan Cheng2fb20b12010-09-30 01:08:25 +000063 [2, 1]>,
Evan Cheng73eac2a2010-10-03 02:03:59 +000064 InstrItinData<IIC_iMVNsr , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
65 InstrStage<3, [A9_ALU0, A9_ALU1]>],
Evan Cheng2fb20b12010-09-30 01:08:25 +000066 [3, 1, 1]>,
Anton Korobeynikov94d7fd82010-05-29 19:25:17 +000067 //
68 // No operand cycles
Evan Cheng73eac2a2010-10-03 02:03:59 +000069 InstrItinData<IIC_iALUx , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
70 InstrStage<1, [A9_ALU0, A9_ALU1]>]>,
Anton Korobeynikov94d7fd82010-05-29 19:25:17 +000071 //
72 // Binary Instructions that produce a result
Evan Cheng73eac2a2010-10-03 02:03:59 +000073 InstrItinData<IIC_iALUi , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
74 InstrStage<1, [A9_ALU0, A9_ALU1]>],
Evan Cheng2fb20b12010-09-30 01:08:25 +000075 [1, 1], [NoBypass, A9_LdBypass]>,
Evan Cheng73eac2a2010-10-03 02:03:59 +000076 InstrItinData<IIC_iALUr , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
77 InstrStage<1, [A9_ALU0, A9_ALU1]>],
Evan Cheng2fb20b12010-09-30 01:08:25 +000078 [1, 1, 1], [NoBypass, A9_LdBypass, A9_LdBypass]>,
Evan Cheng73eac2a2010-10-03 02:03:59 +000079 InstrItinData<IIC_iALUsi, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
80 InstrStage<2, [A9_ALU0, A9_ALU1]>],
Evan Cheng2fb20b12010-09-30 01:08:25 +000081 [2, 1, 1], [NoBypass, A9_LdBypass, NoBypass]>,
Evan Cheng73eac2a2010-10-03 02:03:59 +000082 InstrItinData<IIC_iALUsir,[InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
83 InstrStage<2, [A9_ALU0, A9_ALU1]>],
Evan Cheng2fb20b12010-09-30 01:08:25 +000084 [2, 1, 1], [NoBypass, NoBypass, A9_LdBypass]>,
Evan Cheng73eac2a2010-10-03 02:03:59 +000085 InstrItinData<IIC_iALUsr, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
86 InstrStage<3, [A9_ALU0, A9_ALU1]>],
Evan Cheng2fb20b12010-09-30 01:08:25 +000087 [3, 1, 1, 1],
Evan Cheng4a010fd2010-09-29 22:42:35 +000088 [NoBypass, A9_LdBypass, NoBypass, NoBypass]>,
Anton Korobeynikov94d7fd82010-05-29 19:25:17 +000089 //
Evan Chengc35d7bb2010-09-29 00:27:46 +000090 // Bitwise Instructions that produce a result
Evan Cheng73eac2a2010-10-03 02:03:59 +000091 InstrItinData<IIC_iBITi , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
92 InstrStage<1, [A9_ALU0, A9_ALU1]>], [1, 1]>,
93 InstrItinData<IIC_iBITr , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
94 InstrStage<1, [A9_ALU0, A9_ALU1]>], [1, 1, 1]>,
95 InstrItinData<IIC_iBITsi, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
96 InstrStage<2, [A9_ALU0, A9_ALU1]>], [2, 1, 1]>,
97 InstrItinData<IIC_iBITsr, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
98 InstrStage<3, [A9_ALU0, A9_ALU1]>], [3, 1, 1, 1]>,
Evan Chengc35d7bb2010-09-29 00:27:46 +000099 //
Anton Korobeynikov94d7fd82010-05-29 19:25:17 +0000100 // Unary Instructions that produce a result
Evan Cheng2fb20b12010-09-30 01:08:25 +0000101
102 // CLZ, RBIT, etc.
Evan Cheng73eac2a2010-10-03 02:03:59 +0000103 InstrItinData<IIC_iUNAr , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
104 InstrStage<1, [A9_ALU0, A9_ALU1]>], [1, 1]>,
Evan Cheng2fb20b12010-09-30 01:08:25 +0000105
106 // BFC, BFI, UBFX, SBFX
Evan Cheng73eac2a2010-10-03 02:03:59 +0000107 InstrItinData<IIC_iUNAsi, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
108 InstrStage<2, [A9_ALU0, A9_ALU1]>], [2, 1]>,
Evan Cheng2fb20b12010-09-30 01:08:25 +0000109
Anton Korobeynikov94d7fd82010-05-29 19:25:17 +0000110 //
Evan Cheng62d626c2010-09-25 00:49:35 +0000111 // Zero and sign extension instructions
Evan Cheng73eac2a2010-10-03 02:03:59 +0000112 InstrItinData<IIC_iEXTr , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
113 InstrStage<1, [A9_ALU0, A9_ALU1]>], [2, 1]>,
114 InstrItinData<IIC_iEXTAr, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
115 InstrStage<2, [A9_ALU0, A9_ALU1]>], [3, 1, 1]>,
116 InstrItinData<IIC_iEXTAsr,[InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
117 InstrStage<3, [A9_ALU0, A9_ALU1]>], [3, 1, 1, 1]>,
Evan Cheng62d626c2010-09-25 00:49:35 +0000118 //
Anton Korobeynikov94d7fd82010-05-29 19:25:17 +0000119 // Compare instructions
Evan Cheng73eac2a2010-10-03 02:03:59 +0000120 InstrItinData<IIC_iCMPi , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
121 InstrStage<1, [A9_ALU0, A9_ALU1]>],
122 [1], [A9_LdBypass]>,
123 InstrItinData<IIC_iCMPr , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
124 InstrStage<1, [A9_ALU0, A9_ALU1]>],
125 [1, 1], [A9_LdBypass, A9_LdBypass]>,
126 InstrItinData<IIC_iCMPsi , [InstrStage<2, [A9_ALU0, A9_ALU1]>],
127 [1, 1], [A9_LdBypass, NoBypass]>,
128 InstrItinData<IIC_iCMPsr , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
129 InstrStage<3, [A9_ALU0, A9_ALU1]>],
Evan Cheng2fb20b12010-09-30 01:08:25 +0000130 [1, 1, 1], [A9_LdBypass, NoBypass, NoBypass]>,
Anton Korobeynikov94d7fd82010-05-29 19:25:17 +0000131 //
Evan Cheng2259d672010-09-29 00:49:25 +0000132 // Test instructions
Evan Cheng73eac2a2010-10-03 02:03:59 +0000133 InstrItinData<IIC_iTSTi , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
134 InstrStage<1, [A9_ALU0, A9_ALU1]>], [1]>,
135 InstrItinData<IIC_iTSTr , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
136 InstrStage<1, [A9_ALU0, A9_ALU1]>], [1, 1]>,
137 InstrItinData<IIC_iTSTsi , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
138 InstrStage<2, [A9_ALU0, A9_ALU1]>], [1, 1]>,
139 InstrItinData<IIC_iTSTsr , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
140 InstrStage<3, [A9_ALU0, A9_ALU1]>], [1, 1, 1]>,
Evan Cheng2259d672010-09-29 00:49:25 +0000141 //
Anton Korobeynikov94d7fd82010-05-29 19:25:17 +0000142 // Move instructions, conditional
Evan Cheng2fb20b12010-09-30 01:08:25 +0000143 // FIXME: Correctly model the extra input dep on the destination.
Evan Cheng73eac2a2010-10-03 02:03:59 +0000144 InstrItinData<IIC_iCMOVi , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
145 InstrStage<1, [A9_ALU0, A9_ALU1]>], [1]>,
146 InstrItinData<IIC_iCMOVr , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
147 InstrStage<1, [A9_ALU0, A9_ALU1]>], [1, 1]>,
148 InstrItinData<IIC_iCMOVsi , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
149 InstrStage<1, [A9_ALU0, A9_ALU1]>], [1, 1]>,
150 InstrItinData<IIC_iCMOVsr , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
151 InstrStage<2, [A9_ALU0, A9_ALU1]>], [2, 1, 1]>,
Anton Korobeynikov94d7fd82010-05-29 19:25:17 +0000152
153 // Integer multiply pipeline
154 //
Evan Cheng73eac2a2010-10-03 02:03:59 +0000155 InstrItinData<IIC_iMUL16 , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
156 InstrStage<2, [A9_ALU0]>], [3, 1, 1]>,
157 InstrItinData<IIC_iMAC16 , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
158 InstrStage<2, [A9_ALU0]>],
159 [3, 1, 1, 1]>,
160 InstrItinData<IIC_iMUL32 , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
161 InstrStage<2, [A9_ALU0]>], [4, 1, 1]>,
162 InstrItinData<IIC_iMAC32 , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
163 InstrStage<2, [A9_ALU0]>],
164 [4, 1, 1, 1]>,
165 InstrItinData<IIC_iMUL64 , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
166 InstrStage<3, [A9_ALU0]>], [4, 5, 1, 1]>,
167 InstrItinData<IIC_iMAC64 , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
168 InstrStage<3, [A9_ALU0]>],
169 [4, 5, 1, 1]>,
Anton Korobeynikov2a21aef2010-05-29 19:25:34 +0000170 // Integer load pipeline
171 // FIXME: The timings are some rough approximations
172 //
173 // Immediate offset
Evan Cheng73eac2a2010-10-03 02:03:59 +0000174 InstrItinData<IIC_iLoad_i , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000175 InstrStage<1, [A9_MUX0], 0>,
Evan Cheng05f13e92010-10-09 01:03:04 +0000176 InstrStage<1, [A9_AGU]>,
Evan Cheng39121582010-10-13 01:54:21 +0000177 InstrStage<1, [A9_LSUnit]>],
Evan Cheng2fb20b12010-09-30 01:08:25 +0000178 [3, 1], [A9_LdBypass]>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000179 InstrItinData<IIC_iLoad_bh_i, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000180 InstrStage<1, [A9_MUX0], 0>,
Evan Cheng05f13e92010-10-09 01:03:04 +0000181 InstrStage<2, [A9_AGU]>,
Evan Cheng39121582010-10-13 01:54:21 +0000182 InstrStage<1, [A9_LSUnit]>],
Evan Cheng2fb20b12010-09-30 01:08:25 +0000183 [4, 1], [A9_LdBypass]>,
184 // FIXME: If address is 64-bit aligned, AGU cycles is 1.
Evan Cheng73eac2a2010-10-03 02:03:59 +0000185 InstrItinData<IIC_iLoad_d_i , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000186 InstrStage<1, [A9_MUX0], 0>,
Evan Cheng05f13e92010-10-09 01:03:04 +0000187 InstrStage<2, [A9_AGU]>,
Evan Cheng39121582010-10-13 01:54:21 +0000188 InstrStage<1, [A9_LSUnit]>],
Evan Cheng2fb20b12010-09-30 01:08:25 +0000189 [3, 3, 1], [A9_LdBypass]>,
Anton Korobeynikov2a21aef2010-05-29 19:25:34 +0000190 //
191 // Register offset
Evan Cheng73eac2a2010-10-03 02:03:59 +0000192 InstrItinData<IIC_iLoad_r , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000193 InstrStage<1, [A9_MUX0], 0>,
Evan Cheng05f13e92010-10-09 01:03:04 +0000194 InstrStage<1, [A9_AGU]>,
Evan Cheng39121582010-10-13 01:54:21 +0000195 InstrStage<1, [A9_LSUnit]>],
Evan Cheng2fb20b12010-09-30 01:08:25 +0000196 [3, 1, 1], [A9_LdBypass]>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000197 InstrItinData<IIC_iLoad_bh_r, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000198 InstrStage<1, [A9_MUX0], 0>,
Evan Cheng05f13e92010-10-09 01:03:04 +0000199 InstrStage<2, [A9_AGU]>,
Evan Cheng39121582010-10-13 01:54:21 +0000200 InstrStage<1, [A9_LSUnit]>],
Evan Cheng2fb20b12010-09-30 01:08:25 +0000201 [4, 1, 1], [A9_LdBypass]>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000202 InstrItinData<IIC_iLoad_d_r , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000203 InstrStage<1, [A9_MUX0], 0>,
Evan Cheng05f13e92010-10-09 01:03:04 +0000204 InstrStage<2, [A9_AGU]>,
Evan Cheng39121582010-10-13 01:54:21 +0000205 InstrStage<1, [A9_LSUnit]>],
Evan Cheng2fb20b12010-09-30 01:08:25 +0000206 [3, 3, 1, 1], [A9_LdBypass]>,
Anton Korobeynikov2a21aef2010-05-29 19:25:34 +0000207 //
208 // Scaled register offset
Evan Cheng73eac2a2010-10-03 02:03:59 +0000209 InstrItinData<IIC_iLoad_si , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000210 InstrStage<1, [A9_MUX0], 0>,
Evan Cheng05f13e92010-10-09 01:03:04 +0000211 InstrStage<1, [A9_AGU]>,
Evan Cheng39121582010-10-13 01:54:21 +0000212 InstrStage<1, [A9_LSUnit]>],
Evan Cheng2fb20b12010-09-30 01:08:25 +0000213 [4, 1, 1], [A9_LdBypass]>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000214 InstrItinData<IIC_iLoad_bh_si,[InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000215 InstrStage<1, [A9_MUX0], 0>,
Evan Cheng05f13e92010-10-09 01:03:04 +0000216 InstrStage<2, [A9_AGU]>,
Evan Cheng39121582010-10-13 01:54:21 +0000217 InstrStage<1, [A9_LSUnit]>],
Evan Cheng2fb20b12010-09-30 01:08:25 +0000218 [5, 1, 1], [A9_LdBypass]>,
Anton Korobeynikov2a21aef2010-05-29 19:25:34 +0000219 //
220 // Immediate offset with update
Evan Cheng73eac2a2010-10-03 02:03:59 +0000221 InstrItinData<IIC_iLoad_iu , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000222 InstrStage<1, [A9_MUX0], 0>,
Evan Cheng05f13e92010-10-09 01:03:04 +0000223 InstrStage<1, [A9_AGU]>,
Evan Cheng39121582010-10-13 01:54:21 +0000224 InstrStage<1, [A9_LSUnit]>],
Evan Cheng2fb20b12010-09-30 01:08:25 +0000225 [3, 2, 1], [A9_LdBypass]>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000226 InstrItinData<IIC_iLoad_bh_iu,[InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000227 InstrStage<1, [A9_MUX0], 0>,
Evan Cheng05f13e92010-10-09 01:03:04 +0000228 InstrStage<2, [A9_AGU]>,
Evan Cheng39121582010-10-13 01:54:21 +0000229 InstrStage<1, [A9_LSUnit]>],
Evan Cheng2fb20b12010-09-30 01:08:25 +0000230 [4, 3, 1], [A9_LdBypass]>,
Anton Korobeynikov2a21aef2010-05-29 19:25:34 +0000231 //
232 // Register offset with update
Evan Cheng73eac2a2010-10-03 02:03:59 +0000233 InstrItinData<IIC_iLoad_ru , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000234 InstrStage<1, [A9_MUX0], 0>,
Evan Cheng05f13e92010-10-09 01:03:04 +0000235 InstrStage<1, [A9_AGU]>,
Evan Cheng39121582010-10-13 01:54:21 +0000236 InstrStage<1, [A9_LSUnit]>],
Evan Cheng2fb20b12010-09-30 01:08:25 +0000237 [3, 2, 1, 1], [A9_LdBypass]>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000238 InstrItinData<IIC_iLoad_bh_ru,[InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000239 InstrStage<1, [A9_MUX0], 0>,
Evan Cheng05f13e92010-10-09 01:03:04 +0000240 InstrStage<2, [A9_AGU]>,
Evan Cheng39121582010-10-13 01:54:21 +0000241 InstrStage<1, [A9_LSUnit]>],
Evan Cheng2fb20b12010-09-30 01:08:25 +0000242 [4, 3, 1, 1], [A9_LdBypass]>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000243 InstrItinData<IIC_iLoad_d_ru, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000244 InstrStage<1, [A9_MUX0], 0>,
Evan Cheng05f13e92010-10-09 01:03:04 +0000245 InstrStage<2, [A9_AGU]>,
Evan Cheng39121582010-10-13 01:54:21 +0000246 InstrStage<1, [A9_LSUnit]>],
Evan Cheng2fb20b12010-09-30 01:08:25 +0000247 [3, 3, 1, 1], [A9_LdBypass]>,
Anton Korobeynikov2a21aef2010-05-29 19:25:34 +0000248 //
249 // Scaled register offset with update
Evan Cheng73eac2a2010-10-03 02:03:59 +0000250 InstrItinData<IIC_iLoad_siu , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000251 InstrStage<1, [A9_MUX0], 0>,
Evan Cheng05f13e92010-10-09 01:03:04 +0000252 InstrStage<1, [A9_AGU]>,
Evan Cheng39121582010-10-13 01:54:21 +0000253 InstrStage<1, [A9_LSUnit]>],
Evan Cheng2fb20b12010-09-30 01:08:25 +0000254 [4, 3, 1, 1], [A9_LdBypass]>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000255 InstrItinData<IIC_iLoad_bh_siu,[InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000256 InstrStage<1, [A9_MUX0], 0>,
Evan Cheng05f13e92010-10-09 01:03:04 +0000257 InstrStage<2, [A9_AGU]>,
Evan Cheng39121582010-10-13 01:54:21 +0000258 InstrStage<1, [A9_LSUnit]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000259 [5, 4, 1, 1], [A9_LdBypass]>,
Anton Korobeynikov2a21aef2010-05-29 19:25:34 +0000260 //
Evan Cheng49d4c0b2010-10-06 06:27:31 +0000261 // Load multiple, def is the 5th operand.
Evan Cheng05f13e92010-10-09 01:03:04 +0000262 // FIXME: This assumes 3 to 4 registers.
Evan Cheng49d4c0b2010-10-06 06:27:31 +0000263 InstrItinData<IIC_iLoad_m , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000264 InstrStage<1, [A9_MUX0], 0>,
Evan Cheng39121582010-10-13 01:54:21 +0000265 InstrStage<2, [A9_AGU], 1>,
266 InstrStage<2, [A9_LSUnit]>],
Evan Cheng49d4c0b2010-10-06 06:27:31 +0000267 [1, 1, 1, 1, 3],
268 [NoBypass, NoBypass, NoBypass, NoBypass, A9_LdBypass]>,
269 //
270 // Load multiple + update, defs are the 1st and 5th operands.
271 InstrItinData<IIC_iLoad_mu , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
272 InstrStage<1, [A9_MUX0], 0>,
Evan Cheng39121582010-10-13 01:54:21 +0000273 InstrStage<2, [A9_AGU], 1>,
274 InstrStage<2, [A9_LSUnit]>],
Evan Cheng49d4c0b2010-10-06 06:27:31 +0000275 [2, 1, 1, 1, 3],
276 [NoBypass, NoBypass, NoBypass, NoBypass, A9_LdBypass]>,
Evan Cheng722cd122010-09-08 22:57:08 +0000277 //
278 // Load multiple plus branch
Evan Cheng49d4c0b2010-10-06 06:27:31 +0000279 InstrItinData<IIC_iLoad_mBr, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000280 InstrStage<1, [A9_MUX0], 0>,
Evan Cheng39121582010-10-13 01:54:21 +0000281 InstrStage<1, [A9_AGU], 1>,
282 InstrStage<2, [A9_LSUnit]>,
Evan Cheng49d4c0b2010-10-06 06:27:31 +0000283 InstrStage<1, [A9_Branch]>],
284 [1, 2, 1, 1, 3],
285 [NoBypass, NoBypass, NoBypass, NoBypass, A9_LdBypass]>,
286 //
287 // Pop, def is the 3rd operand.
288 InstrItinData<IIC_iPop , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
289 InstrStage<1, [A9_MUX0], 0>,
Evan Cheng39121582010-10-13 01:54:21 +0000290 InstrStage<2, [A9_AGU], 1>,
291 InstrStage<2, [A9_LSUnit]>],
Evan Cheng49d4c0b2010-10-06 06:27:31 +0000292 [1, 1, 3],
293 [NoBypass, NoBypass, A9_LdBypass]>,
294 //
295 // Pop + branch, def is the 3rd operand.
296 InstrItinData<IIC_iPop_Br, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
297 InstrStage<1, [A9_MUX0], 0>,
Evan Cheng39121582010-10-13 01:54:21 +0000298 InstrStage<2, [A9_AGU], 1>,
299 InstrStage<2, [A9_LSUnit]>,
Evan Cheng49d4c0b2010-10-06 06:27:31 +0000300 InstrStage<1, [A9_Branch]>],
301 [1, 1, 3],
302 [NoBypass, NoBypass, A9_LdBypass]>,
Evan Cheng722cd122010-09-08 22:57:08 +0000303
Evan Chenge37da032010-09-24 22:41:41 +0000304 //
305 // iLoadi + iALUr for t2LDRpci_pic.
Evan Cheng73eac2a2010-10-03 02:03:59 +0000306 InstrItinData<IIC_iLoadiALU, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000307 InstrStage<1, [A9_MUX0], 0>,
308 InstrStage<1, [A9_AGU]>,
Evan Cheng39121582010-10-13 01:54:21 +0000309 InstrStage<1, [A9_LSUnit]>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000310 InstrStage<1, [A9_ALU0, A9_ALU1]>],
Evan Cheng4a010fd2010-09-29 22:42:35 +0000311 [2, 1]>,
Evan Chenge37da032010-09-24 22:41:41 +0000312
Anton Korobeynikov2a21aef2010-05-29 19:25:34 +0000313 // Integer store pipeline
314 ///
315 // Immediate offset
Evan Cheng73eac2a2010-10-03 02:03:59 +0000316 InstrItinData<IIC_iStore_i , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000317 InstrStage<1, [A9_MUX0], 0>,
Evan Cheng05f13e92010-10-09 01:03:04 +0000318 InstrStage<1, [A9_AGU]>,
Evan Cheng39121582010-10-13 01:54:21 +0000319 InstrStage<1, [A9_LSUnit]>], [1, 1]>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000320 InstrItinData<IIC_iStore_bh_i,[InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000321 InstrStage<1, [A9_MUX0], 0>,
Evan Cheng39121582010-10-13 01:54:21 +0000322 InstrStage<2, [A9_AGU], 1>,
323 InstrStage<1, [A9_LSUnit]>], [1, 1]>,
Evan Cheng2fb20b12010-09-30 01:08:25 +0000324 // FIXME: If address is 64-bit aligned, AGU cycles is 1.
Evan Cheng73eac2a2010-10-03 02:03:59 +0000325 InstrItinData<IIC_iStore_d_i, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000326 InstrStage<1, [A9_MUX0], 0>,
Evan Cheng39121582010-10-13 01:54:21 +0000327 InstrStage<2, [A9_AGU], 1>,
328 InstrStage<1, [A9_LSUnit]>], [1, 1]>,
Anton Korobeynikov2a21aef2010-05-29 19:25:34 +0000329 //
330 // Register offset
Evan Cheng73eac2a2010-10-03 02:03:59 +0000331 InstrItinData<IIC_iStore_r , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000332 InstrStage<1, [A9_MUX0], 0>,
Evan Cheng05f13e92010-10-09 01:03:04 +0000333 InstrStage<1, [A9_AGU]>,
Evan Cheng39121582010-10-13 01:54:21 +0000334 InstrStage<1, [A9_LSUnit]>], [1, 1, 1]>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000335 InstrItinData<IIC_iStore_bh_r,[InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000336 InstrStage<1, [A9_MUX0], 0>,
Evan Cheng39121582010-10-13 01:54:21 +0000337 InstrStage<2, [A9_AGU], 1>,
338 InstrStage<1, [A9_LSUnit]>], [1, 1, 1]>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000339 InstrItinData<IIC_iStore_d_r, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000340 InstrStage<1, [A9_MUX0], 0>,
Evan Cheng39121582010-10-13 01:54:21 +0000341 InstrStage<2, [A9_AGU], 1>,
342 InstrStage<1, [A9_LSUnit]>], [1, 1, 1]>,
Anton Korobeynikov2a21aef2010-05-29 19:25:34 +0000343 //
344 // Scaled register offset
Evan Cheng73eac2a2010-10-03 02:03:59 +0000345 InstrItinData<IIC_iStore_si , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
346 InstrStage<1, [A9_MUX0], 0>,
Evan Cheng05f13e92010-10-09 01:03:04 +0000347 InstrStage<1, [A9_AGU]>,
Evan Cheng39121582010-10-13 01:54:21 +0000348 InstrStage<1, [A9_LSUnit]>], [1, 1, 1]>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000349 InstrItinData<IIC_iStore_bh_si,[InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000350 InstrStage<1, [A9_MUX0], 0>,
Evan Cheng39121582010-10-13 01:54:21 +0000351 InstrStage<2, [A9_AGU], 1>,
352 InstrStage<1, [A9_LSUnit]>], [1, 1, 1]>,
Anton Korobeynikov2a21aef2010-05-29 19:25:34 +0000353 //
354 // Immediate offset with update
Evan Cheng73eac2a2010-10-03 02:03:59 +0000355 InstrItinData<IIC_iStore_iu , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
356 InstrStage<1, [A9_MUX0], 0>,
Evan Cheng05f13e92010-10-09 01:03:04 +0000357 InstrStage<1, [A9_AGU]>,
Evan Cheng39121582010-10-13 01:54:21 +0000358 InstrStage<1, [A9_LSUnit]>], [2, 1, 1]>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000359 InstrItinData<IIC_iStore_bh_iu,[InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000360 InstrStage<1, [A9_MUX0], 0>,
Evan Cheng39121582010-10-13 01:54:21 +0000361 InstrStage<2, [A9_AGU], 1>,
362 InstrStage<1, [A9_LSUnit]>], [3, 1, 1]>,
Anton Korobeynikov2a21aef2010-05-29 19:25:34 +0000363 //
364 // Register offset with update
Evan Cheng73eac2a2010-10-03 02:03:59 +0000365 InstrItinData<IIC_iStore_ru , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
366 InstrStage<1, [A9_MUX0], 0>,
Evan Cheng05f13e92010-10-09 01:03:04 +0000367 InstrStage<1, [A9_AGU]>,
Evan Cheng39121582010-10-13 01:54:21 +0000368 InstrStage<1, [A9_LSUnit]>],
Evan Cheng73eac2a2010-10-03 02:03:59 +0000369 [2, 1, 1, 1]>,
370 InstrItinData<IIC_iStore_bh_ru,[InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000371 InstrStage<1, [A9_MUX0], 0>,
Evan Cheng39121582010-10-13 01:54:21 +0000372 InstrStage<2, [A9_AGU], 1>,
373 InstrStage<1, [A9_LSUnit]>],
Evan Cheng89e6f672010-10-01 19:41:46 +0000374 [3, 1, 1, 1]>,
Evan Cheng73eac2a2010-10-03 02:03:59 +0000375 InstrItinData<IIC_iStore_d_ru, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
376 InstrStage<1, [A9_MUX0], 0>,
Evan Cheng39121582010-10-13 01:54:21 +0000377 InstrStage<2, [A9_AGU], 1>,
378 InstrStage<1, [A9_LSUnit]>],
Evan Cheng73eac2a2010-10-03 02:03:59 +0000379 [3, 1, 1, 1]>,
Anton Korobeynikov2a21aef2010-05-29 19:25:34 +0000380 //
381 // Scaled register offset with update
Evan Cheng73eac2a2010-10-03 02:03:59 +0000382 InstrItinData<IIC_iStore_siu, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
383 InstrStage<1, [A9_MUX0], 0>,
Evan Cheng05f13e92010-10-09 01:03:04 +0000384 InstrStage<1, [A9_AGU]>,
Evan Cheng39121582010-10-13 01:54:21 +0000385 InstrStage<1, [A9_LSUnit]>],
Evan Cheng73eac2a2010-10-03 02:03:59 +0000386 [2, 1, 1, 1]>,
387 InstrItinData<IIC_iStore_bh_siu, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
388 InstrStage<1, [A9_MUX0], 0>,
Evan Cheng39121582010-10-13 01:54:21 +0000389 InstrStage<2, [A9_AGU], 1>,
390 InstrStage<1, [A9_LSUnit]>],
Evan Cheng73eac2a2010-10-03 02:03:59 +0000391 [3, 1, 1, 1]>,
Anton Korobeynikov2a21aef2010-05-29 19:25:34 +0000392 //
393 // Store multiple
Evan Cheng49d4c0b2010-10-06 06:27:31 +0000394 InstrItinData<IIC_iStore_m , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000395 InstrStage<1, [A9_MUX0], 0>,
Evan Cheng05f13e92010-10-09 01:03:04 +0000396 InstrStage<1, [A9_AGU]>,
Evan Cheng39121582010-10-13 01:54:21 +0000397 InstrStage<2, [A9_LSUnit]>]>,
Evan Cheng49d4c0b2010-10-06 06:27:31 +0000398 //
399 // Store multiple + update
400 InstrItinData<IIC_iStore_mu, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
401 InstrStage<1, [A9_MUX0], 0>,
Evan Cheng05f13e92010-10-09 01:03:04 +0000402 InstrStage<1, [A9_AGU]>,
Evan Cheng39121582010-10-13 01:54:21 +0000403 InstrStage<2, [A9_LSUnit]>], [2]>,
Evan Cheng49d4c0b2010-10-06 06:27:31 +0000404
Anton Korobeynikov94d7fd82010-05-29 19:25:17 +0000405 // Branch
406 //
407 // no delay slots, so the latency of a branch is unimportant
Evan Cheng49d4c0b2010-10-06 06:27:31 +0000408 InstrItinData<IIC_Br , [InstrStage<1, [A9_Issue0], 0>,
409 InstrStage<1, [A9_Issue1], 0>,
410 InstrStage<1, [A9_Branch]>]>,
Anton Korobeynikov94d7fd82010-05-29 19:25:17 +0000411
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000412 // VFP and NEON shares the same register file. This means that every VFP
413 // instruction should wait for full completion of the consecutive NEON
414 // instruction and vice-versa. We model this behavior with two artificial FUs:
415 // DRegsVFP and DRegsVFP.
416 //
417 // Every VFP instruction:
418 // - Acquires DRegsVFP resource for 1 cycle
419 // - Reserves DRegsN resource for the whole duration (including time to
420 // register file writeback!).
421 // Every NEON instruction does the same but with FUs swapped.
422 //
Jim Grosbach7ea5fc02010-06-28 04:27:01 +0000423 // Since the reserved FU cannot be acquired, this models precisely
424 // "cross-domain" stalls.
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000425
426 // VFP
427 // Issue through integer pipeline, and execute in NEON unit.
428
429 // FP Special Register to Integer Register File Move
Evan Chenge790afc2010-10-11 23:41:41 +0000430 InstrItinData<IIC_fpSTAT , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000431 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +0000432 InstrStage<1, [A9_DRegsVFP], 0, Required>,
433 InstrStage<2, [A9_DRegsN], 0, Reserved>,
Evan Cheng99cce362010-10-29 23:16:55 +0000434 InstrStage<1, [A9_NPipe]>],
435 [1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000436 //
437 // Single-precision FP Unary
Evan Chenge790afc2010-10-11 23:41:41 +0000438 InstrItinData<IIC_fpUNA32 , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
439 InstrStage<1, [A9_MUX0], 0>,
440 InstrStage<1, [A9_DRegsVFP], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000441 // Extra latency cycles since wbck is 2 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000442 InstrStage<3, [A9_DRegsN], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +0000443 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
Evan Chenge790afc2010-10-11 23:41:41 +0000447 InstrItinData<IIC_fpUNA64 , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
448 InstrStage<1, [A9_MUX0], 0>,
449 InstrStage<1, [A9_DRegsVFP], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000450 // Extra latency cycles since wbck is 2 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000451 InstrStage<3, [A9_DRegsN], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +0000452 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
Evan Chenge790afc2010-10-11 23:41:41 +0000457 InstrItinData<IIC_fpCMP32 , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
458 InstrStage<1, [A9_MUX0], 0>,
459 InstrStage<1, [A9_DRegsVFP], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000460 // Extra latency cycles since wbck is 4 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000461 InstrStage<5, [A9_DRegsN], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +0000462 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
Evan Chenge790afc2010-10-11 23:41:41 +0000466 InstrItinData<IIC_fpCMP64 , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
467 InstrStage<1, [A9_MUX0], 0>,
468 InstrStage<1, [A9_DRegsVFP], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000469 // Extra latency cycles since wbck is 4 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000470 InstrStage<5, [A9_DRegsN], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +0000471 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
Evan Chenge790afc2010-10-11 23:41:41 +0000475 InstrItinData<IIC_fpCVTSD , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000476 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +0000477 InstrStage<1, [A9_DRegsVFP], 0, Required>,
478 InstrStage<5, [A9_DRegsN], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +0000479 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
Evan Chenge790afc2010-10-11 23:41:41 +0000483 InstrItinData<IIC_fpCVTDS , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000484 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +0000485 InstrStage<1, [A9_DRegsVFP], 0, Required>,
486 InstrStage<5, [A9_DRegsN], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +0000487 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
Evan Chenge790afc2010-10-11 23:41:41 +0000492 InstrItinData<IIC_fpCVTSH , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000493 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +0000494 InstrStage<1, [A9_DRegsVFP], 0, Required>,
495 InstrStage<5, [A9_DRegsN], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +0000496 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
Evan Chenge790afc2010-10-11 23:41:41 +0000500 InstrItinData<IIC_fpCVTHS , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000501 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +0000502 InstrStage<1, [A9_DRegsVFP], 0, Required>,
503 InstrStage<3, [A9_DRegsN], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +0000504 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
Evan Chenge790afc2010-10-11 23:41:41 +0000509 InstrItinData<IIC_fpCVTSI , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000510 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +0000511 InstrStage<1, [A9_DRegsVFP], 0, Required>,
512 InstrStage<5, [A9_DRegsN], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +0000513 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
Evan Chenge790afc2010-10-11 23:41:41 +0000517 InstrItinData<IIC_fpCVTDI , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000518 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +0000519 InstrStage<1, [A9_DRegsVFP], 0, Required>,
520 InstrStage<5, [A9_DRegsN], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +0000521 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
Evan Chenge790afc2010-10-11 23:41:41 +0000525 InstrItinData<IIC_fpCVTIS , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000526 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +0000527 InstrStage<1, [A9_DRegsVFP], 0, Required>,
528 InstrStage<5, [A9_DRegsN], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +0000529 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
Evan Chenge790afc2010-10-11 23:41:41 +0000533 InstrItinData<IIC_fpCVTID , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000534 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +0000535 InstrStage<1, [A9_DRegsVFP], 0, Required>,
536 InstrStage<5, [A9_DRegsN], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +0000537 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
Evan Chenge790afc2010-10-11 23:41:41 +0000541 InstrItinData<IIC_fpALU32 , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000542 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +0000543 InstrStage<1, [A9_DRegsVFP], 0, Required>,
544 InstrStage<5, [A9_DRegsN], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +0000545 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
Evan Chenge790afc2010-10-11 23:41:41 +0000549 InstrItinData<IIC_fpALU64 , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000550 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +0000551 InstrStage<1, [A9_DRegsVFP], 0, Required>,
552 InstrStage<5, [A9_DRegsN], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +0000553 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
Evan Chenge790afc2010-10-11 23:41:41 +0000557 InstrItinData<IIC_fpMUL32 , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000558 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +0000559 InstrStage<1, [A9_DRegsVFP], 0, Required>,
560 InstrStage<6, [A9_DRegsN], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +0000561 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
Evan Chenge790afc2010-10-11 23:41:41 +0000565 InstrItinData<IIC_fpMUL64 , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000566 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +0000567 InstrStage<1, [A9_DRegsVFP], 0, Required>,
568 InstrStage<7, [A9_DRegsN], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +0000569 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
Evan Chenge790afc2010-10-11 23:41:41 +0000573 InstrItinData<IIC_fpMAC32 , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000574 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +0000575 InstrStage<1, [A9_DRegsVFP], 0, Required>,
576 InstrStage<9, [A9_DRegsN], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +0000577 InstrStage<1, [A9_NPipe]>],
Evan Chengff310732010-10-28 06:47:08 +0000578 [8, 1, 1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000579 //
580 // Double-precision FP MAC
Evan Chenge790afc2010-10-11 23:41:41 +0000581 InstrItinData<IIC_fpMAC64 , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000582 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +0000583 InstrStage<1, [A9_DRegsVFP], 0, Required>,
584 InstrStage<10, [A9_DRegsN], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +0000585 InstrStage<2, [A9_NPipe]>],
Evan Chengff310732010-10-28 06:47:08 +0000586 [9, 1, 1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000587 //
588 // Single-precision FP DIV
Evan Chenge790afc2010-10-11 23:41:41 +0000589 InstrItinData<IIC_fpDIV32 , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000590 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +0000591 InstrStage<1, [A9_DRegsVFP], 0, Required>,
592 InstrStage<16, [A9_DRegsN], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +0000593 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
Evan Chenge790afc2010-10-11 23:41:41 +0000597 InstrItinData<IIC_fpDIV64 , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000598 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +0000599 InstrStage<1, [A9_DRegsVFP], 0, Required>,
600 InstrStage<26, [A9_DRegsN], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +0000601 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
Evan Chenge790afc2010-10-11 23:41:41 +0000605 InstrItinData<IIC_fpSQRT32, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000606 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +0000607 InstrStage<1, [A9_DRegsVFP], 0, Required>,
608 InstrStage<18, [A9_DRegsN], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +0000609 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
Evan Chenge790afc2010-10-11 23:41:41 +0000613 InstrItinData<IIC_fpSQRT64, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000614 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +0000615 InstrStage<1, [A9_DRegsVFP], 0, Required>,
616 InstrStage<33, [A9_DRegsN], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +0000617 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
Evan Chenge790afc2010-10-11 23:41:41 +0000622 InstrItinData<IIC_fpMOVIS, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
623 InstrStage<1, [A9_MUX0], 0>,
624 InstrStage<1, [A9_DRegsVFP], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000625 // Extra 1 latency cycle since wbck is 2 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000626 InstrStage<3, [A9_DRegsN], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +0000627 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
Evan Chenge790afc2010-10-11 23:41:41 +0000631 InstrItinData<IIC_fpMOVID, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
632 InstrStage<1, [A9_MUX0], 0>,
633 InstrStage<1, [A9_DRegsVFP], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000634 // Extra 1 latency cycle since wbck is 2 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +0000635 InstrStage<3, [A9_DRegsN], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +0000636 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
Evan Chenge790afc2010-10-11 23:41:41 +0000640 InstrItinData<IIC_fpMOVSI, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000641 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +0000642 InstrStage<1, [A9_DRegsVFP], 0, Required>,
643 InstrStage<2, [A9_DRegsN], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +0000644 InstrStage<1, [A9_NPipe]>],
Andrew Trickf4ebec02010-10-21 03:40:16 +0000645 [2, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000646 //
647 // Double-precision to Integer Move
Evan Chenge790afc2010-10-11 23:41:41 +0000648 InstrItinData<IIC_fpMOVDI, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000649 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +0000650 InstrStage<1, [A9_DRegsVFP], 0, Required>,
651 InstrStage<2, [A9_DRegsN], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +0000652 InstrStage<1, [A9_NPipe]>],
Andrew Trickf4ebec02010-10-21 03:40:16 +0000653 [2, 1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000654 //
655 // Single-precision FP Load
Evan Chenge790afc2010-10-11 23:41:41 +0000656 InstrItinData<IIC_fpLoad32, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000657 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +0000658 InstrStage<1, [A9_DRegsVFP], 0, Required>,
659 InstrStage<2, [A9_DRegsN], 0, Reserved>,
Evan Cheng39121582010-10-13 01:54:21 +0000660 InstrStage<1, [A9_NPipe]>,
661 InstrStage<1, [A9_LSUnit]>],
Evan Chengf3179562010-10-01 21:40:30 +0000662 [1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000663 //
664 // Double-precision FP Load
Evan Chengf3179562010-10-01 21:40:30 +0000665 // FIXME: Result latency is 1 if address is 64-bit aligned.
Evan Chenge790afc2010-10-11 23:41:41 +0000666 InstrItinData<IIC_fpLoad64, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000667 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +0000668 InstrStage<1, [A9_DRegsVFP], 0, Required>,
669 InstrStage<2, [A9_DRegsN], 0, Reserved>,
Evan Cheng39121582010-10-13 01:54:21 +0000670 InstrStage<1, [A9_NPipe]>,
671 InstrStage<1, [A9_LSUnit]>],
Evan Chengf3179562010-10-01 21:40:30 +0000672 [2, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000673 //
674 // FP Load Multiple
Evan Chenge790afc2010-10-11 23:41:41 +0000675 InstrItinData<IIC_fpLoad_m, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000676 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +0000677 InstrStage<1, [A9_DRegsVFP], 0, Required>,
678 InstrStage<2, [A9_DRegsN], 0, Reserved>,
Evan Cheng39121582010-10-13 01:54:21 +0000679 InstrStage<1, [A9_NPipe]>,
680 InstrStage<1, [A9_LSUnit]>], [1, 1, 1, 1]>,
Evan Cheng1958cef2010-10-07 01:50:48 +0000681 //
682 // FP Load Multiple + update
Evan Chenge790afc2010-10-11 23:41:41 +0000683 InstrItinData<IIC_fpLoad_mu,[InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Cheng1958cef2010-10-07 01:50:48 +0000684 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +0000685 InstrStage<1, [A9_DRegsVFP], 0, Required>,
686 InstrStage<2, [A9_DRegsN], 0, Reserved>,
Evan Cheng39121582010-10-13 01:54:21 +0000687 InstrStage<1, [A9_NPipe]>,
688 InstrStage<1, [A9_LSUnit]>], [2, 1, 1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000689 //
690 // Single-precision FP Store
Evan Chenge790afc2010-10-11 23:41:41 +0000691 InstrItinData<IIC_fpStore32,[InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000692 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +0000693 InstrStage<1, [A9_DRegsVFP], 0, Required>,
694 InstrStage<2, [A9_DRegsN], 0, Reserved>,
Evan Cheng39121582010-10-13 01:54:21 +0000695 InstrStage<1, [A9_NPipe]>,
696 InstrStage<1, [A9_LSUnit]>],
Evan Chengf3179562010-10-01 21:40:30 +0000697 [1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000698 //
699 // Double-precision FP Store
Evan Chenge790afc2010-10-11 23:41:41 +0000700 InstrItinData<IIC_fpStore64,[InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000701 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +0000702 InstrStage<1, [A9_DRegsVFP], 0, Required>,
703 InstrStage<2, [A9_DRegsN], 0, Reserved>,
Evan Cheng39121582010-10-13 01:54:21 +0000704 InstrStage<1, [A9_NPipe]>,
705 InstrStage<1, [A9_LSUnit]>],
Evan Chengf3179562010-10-01 21:40:30 +0000706 [1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000707 //
708 // FP Store Multiple
Evan Chenge790afc2010-10-11 23:41:41 +0000709 InstrItinData<IIC_fpStore_m,[InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000710 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +0000711 InstrStage<1, [A9_DRegsVFP], 0, Required>,
712 InstrStage<2, [A9_DRegsN], 0, Reserved>,
Evan Cheng39121582010-10-13 01:54:21 +0000713 InstrStage<1, [A9_NPipe]>,
714 InstrStage<1, [A9_LSUnit]>], [1, 1, 1, 1]>,
Evan Cheng1958cef2010-10-07 01:50:48 +0000715 //
716 // FP Store Multiple + update
Evan Chenge790afc2010-10-11 23:41:41 +0000717 InstrItinData<IIC_fpStore_mu,[InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Cheng1958cef2010-10-07 01:50:48 +0000718 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +0000719 InstrStage<1, [A9_DRegsVFP], 0, Required>,
720 InstrStage<2, [A9_DRegsN], 0, Reserved>,
Evan Cheng39121582010-10-13 01:54:21 +0000721 InstrStage<1, [A9_NPipe]>,
722 InstrStage<1, [A9_LSUnit]>], [2, 1, 1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000723 // NEON
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000724 // VLD1
Evan Cheng05f13e92010-10-09 01:03:04 +0000725 // FIXME: Conservatively assume insufficent alignment.
Evan Chenge790afc2010-10-11 23:41:41 +0000726 InstrItinData<IIC_VLD1, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000727 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +0000728 InstrStage<1, [A9_DRegsN], 0, Required>,
729 InstrStage<8, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng39121582010-10-13 01:54:21 +0000730 InstrStage<2, [A9_NPipe], 1>,
731 InstrStage<2, [A9_LSUnit]>],
Evan Cheng05f13e92010-10-09 01:03:04 +0000732 [2, 1]>,
733 // VLD1x2
Evan Chenge790afc2010-10-11 23:41:41 +0000734 InstrItinData<IIC_VLD1x2, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Cheng05f13e92010-10-09 01:03:04 +0000735 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +0000736 InstrStage<1, [A9_DRegsN], 0, Required>,
737 InstrStage<8, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng39121582010-10-13 01:54:21 +0000738 InstrStage<2, [A9_NPipe], 1>,
739 InstrStage<2, [A9_LSUnit]>],
Evan Cheng05f13e92010-10-09 01:03:04 +0000740 [2, 2, 1]>,
741 // VLD1x3
Evan Chenge790afc2010-10-11 23:41:41 +0000742 InstrItinData<IIC_VLD1x3, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Cheng05f13e92010-10-09 01:03:04 +0000743 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +0000744 InstrStage<1, [A9_DRegsN], 0, Required>,
745 InstrStage<9, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng39121582010-10-13 01:54:21 +0000746 InstrStage<3, [A9_NPipe], 1>,
747 InstrStage<3, [A9_LSUnit]>],
Evan Cheng05f13e92010-10-09 01:03:04 +0000748 [2, 2, 3, 1]>,
749 // VLD1x4
Evan Chenge790afc2010-10-11 23:41:41 +0000750 InstrItinData<IIC_VLD1x4, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Cheng05f13e92010-10-09 01:03:04 +0000751 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +0000752 InstrStage<1, [A9_DRegsN], 0, Required>,
753 InstrStage<9, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng39121582010-10-13 01:54:21 +0000754 InstrStage<3, [A9_NPipe], 1>,
755 InstrStage<3, [A9_LSUnit]>],
Evan Cheng05f13e92010-10-09 01:03:04 +0000756 [2, 2, 3, 3, 1]>,
757 // VLD1u
Evan Chenge790afc2010-10-11 23:41:41 +0000758 InstrItinData<IIC_VLD1u, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Cheng05f13e92010-10-09 01:03:04 +0000759 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +0000760 InstrStage<1, [A9_DRegsN], 0, Required>,
761 InstrStage<8, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng39121582010-10-13 01:54:21 +0000762 InstrStage<2, [A9_NPipe], 1>,
763 InstrStage<2, [A9_LSUnit]>],
Evan Cheng05f13e92010-10-09 01:03:04 +0000764 [2, 2, 1]>,
765 // VLD1x2u
Evan Chenge790afc2010-10-11 23:41:41 +0000766 InstrItinData<IIC_VLD1x2u, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Cheng05f13e92010-10-09 01:03:04 +0000767 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +0000768 InstrStage<1, [A9_DRegsN], 0, Required>,
769 InstrStage<8, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng39121582010-10-13 01:54:21 +0000770 InstrStage<2, [A9_NPipe], 1>,
771 InstrStage<2, [A9_LSUnit]>],
Evan Cheng05f13e92010-10-09 01:03:04 +0000772 [2, 2, 2, 1]>,
773 // VLD1x3u
Evan Chenge790afc2010-10-11 23:41:41 +0000774 InstrItinData<IIC_VLD1x3u, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Cheng05f13e92010-10-09 01:03:04 +0000775 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +0000776 InstrStage<1, [A9_DRegsN], 0, Required>,
777 InstrStage<9, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng39121582010-10-13 01:54:21 +0000778 InstrStage<3, [A9_NPipe], 1>,
779 InstrStage<3, [A9_LSUnit]>],
Evan Cheng05f13e92010-10-09 01:03:04 +0000780 [2, 2, 3, 2, 1]>,
781 // VLD1x4u
Evan Chenge790afc2010-10-11 23:41:41 +0000782 InstrItinData<IIC_VLD1x4u, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Cheng05f13e92010-10-09 01:03:04 +0000783 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +0000784 InstrStage<1, [A9_DRegsN], 0, Required>,
785 InstrStage<9, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng39121582010-10-13 01:54:21 +0000786 InstrStage<3, [A9_NPipe], 1>,
787 InstrStage<3, [A9_LSUnit]>],
Evan Cheng05f13e92010-10-09 01:03:04 +0000788 [2, 2, 3, 3, 2, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000789 //
Bob Wilsondc449902010-11-01 22:04:05 +0000790 // VLD1ln
791 InstrItinData<IIC_VLD1ln, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
792 InstrStage<1, [A9_MUX0], 0>,
793 InstrStage<1, [A9_DRegsN], 0, Required>,
794 InstrStage<9, [A9_DRegsVFP], 0, Reserved>,
795 InstrStage<3, [A9_NPipe], 1>,
796 InstrStage<3, [A9_LSUnit]>],
797 [4, 1, 1, 1]>,
798 //
799 // VLD1lnu
800 InstrItinData<IIC_VLD1lnu, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
801 InstrStage<1, [A9_MUX0], 0>,
802 InstrStage<1, [A9_DRegsN], 0, Required>,
803 InstrStage<9, [A9_DRegsVFP], 0, Reserved>,
804 InstrStage<3, [A9_NPipe], 1>,
805 InstrStage<3, [A9_LSUnit]>],
806 [4, 2, 1, 1, 1, 1]>,
807 //
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000808 // VLD2
Evan Chenge790afc2010-10-11 23:41:41 +0000809 InstrItinData<IIC_VLD2, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
810 InstrStage<1, [A9_MUX0], 0>,
811 InstrStage<1, [A9_DRegsN], 0, Required>,
Evan Cheng05f13e92010-10-09 01:03:04 +0000812 // Extra latency cycles since wbck is 7 cycles
813 InstrStage<8, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng39121582010-10-13 01:54:21 +0000814 InstrStage<2, [A9_NPipe], 1>,
815 InstrStage<2, [A9_LSUnit]>],
Evan Cheng05f13e92010-10-09 01:03:04 +0000816 [3, 3, 1]>,
817 //
818 // VLD2x2
Evan Chenge790afc2010-10-11 23:41:41 +0000819 InstrItinData<IIC_VLD2x2, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Cheng05f13e92010-10-09 01:03:04 +0000820 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +0000821 InstrStage<1, [A9_DRegsN], 0, Required>,
822 InstrStage<9, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng39121582010-10-13 01:54:21 +0000823 InstrStage<3, [A9_NPipe], 1>,
824 InstrStage<3, [A9_LSUnit]>],
Evan Cheng05f13e92010-10-09 01:03:04 +0000825 [3, 4, 3, 4, 1]>,
826 //
827 // VLD2ln
Evan Chenge790afc2010-10-11 23:41:41 +0000828 InstrItinData<IIC_VLD2ln, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Cheng05f13e92010-10-09 01:03:04 +0000829 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +0000830 InstrStage<1, [A9_DRegsN], 0, Required>,
831 InstrStage<9, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng39121582010-10-13 01:54:21 +0000832 InstrStage<3, [A9_NPipe], 1>,
833 InstrStage<3, [A9_LSUnit]>],
Evan Cheng05f13e92010-10-09 01:03:04 +0000834 [4, 4, 1, 1, 1, 1]>,
835 //
836 // VLD2u
Evan Chenge790afc2010-10-11 23:41:41 +0000837 InstrItinData<IIC_VLD2u, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
838 InstrStage<1, [A9_MUX0], 0>,
839 InstrStage<1, [A9_DRegsN], 0, Required>,
Evan Cheng05f13e92010-10-09 01:03:04 +0000840 // Extra latency cycles since wbck is 7 cycles
841 InstrStage<8, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng39121582010-10-13 01:54:21 +0000842 InstrStage<2, [A9_NPipe], 1>,
843 InstrStage<2, [A9_LSUnit]>],
Evan Cheng05f13e92010-10-09 01:03:04 +0000844 [3, 3, 2, 1, 1, 1]>,
845 //
846 // VLD2x2u
Evan Chenge790afc2010-10-11 23:41:41 +0000847 InstrItinData<IIC_VLD2x2u, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Cheng05f13e92010-10-09 01:03:04 +0000848 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +0000849 InstrStage<1, [A9_DRegsN], 0, Required>,
850 InstrStage<9, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng39121582010-10-13 01:54:21 +0000851 InstrStage<3, [A9_NPipe], 1>,
852 InstrStage<3, [A9_LSUnit]>],
Evan Cheng05f13e92010-10-09 01:03:04 +0000853 [3, 4, 3, 4, 2, 1]>,
854 //
855 // VLD2lnu
Evan Chenge790afc2010-10-11 23:41:41 +0000856 InstrItinData<IIC_VLD2lnu, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Cheng05f13e92010-10-09 01:03:04 +0000857 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +0000858 InstrStage<1, [A9_DRegsN], 0, Required>,
859 InstrStage<9, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng39121582010-10-13 01:54:21 +0000860 InstrStage<3, [A9_NPipe], 1>,
861 InstrStage<3, [A9_LSUnit]>],
Evan Cheng05f13e92010-10-09 01:03:04 +0000862 [4, 4, 2, 1, 1, 1, 1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000863 //
864 // VLD3
Evan Chenge790afc2010-10-11 23:41:41 +0000865 InstrItinData<IIC_VLD3, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000866 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +0000867 InstrStage<1, [A9_DRegsN], 0, Required>,
868 InstrStage<10,[A9_DRegsVFP], 0, Reserved>,
Evan Cheng39121582010-10-13 01:54:21 +0000869 InstrStage<4, [A9_NPipe], 1>,
870 InstrStage<4, [A9_LSUnit]>],
Evan Chenga7624002010-10-09 01:45:34 +0000871 [4, 4, 5, 1]>,
872 //
873 // VLD3ln
Evan Chenge790afc2010-10-11 23:41:41 +0000874 InstrItinData<IIC_VLD3ln, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga7624002010-10-09 01:45:34 +0000875 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +0000876 InstrStage<1, [A9_DRegsN], 0, Required>,
877 InstrStage<11,[A9_DRegsVFP], 0, Reserved>,
Evan Cheng39121582010-10-13 01:54:21 +0000878 InstrStage<5, [A9_NPipe], 1>,
879 InstrStage<5, [A9_LSUnit]>],
Evan Chenga7624002010-10-09 01:45:34 +0000880 [5, 5, 6, 1, 1, 1, 1, 2]>,
881 //
882 // VLD3u
Evan Chenge790afc2010-10-11 23:41:41 +0000883 InstrItinData<IIC_VLD3u, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga7624002010-10-09 01:45:34 +0000884 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +0000885 InstrStage<1, [A9_DRegsN], 0, Required>,
886 InstrStage<10,[A9_DRegsVFP], 0, Reserved>,
Evan Cheng39121582010-10-13 01:54:21 +0000887 InstrStage<4, [A9_NPipe], 1>,
888 InstrStage<4, [A9_LSUnit]>],
Evan Chenga7624002010-10-09 01:45:34 +0000889 [4, 4, 5, 2, 1]>,
890 //
891 // VLD3lnu
Evan Chenge790afc2010-10-11 23:41:41 +0000892 InstrItinData<IIC_VLD3lnu, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga7624002010-10-09 01:45:34 +0000893 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +0000894 InstrStage<1, [A9_DRegsN], 0, Required>,
895 InstrStage<11,[A9_DRegsVFP], 0, Reserved>,
Evan Cheng39121582010-10-13 01:54:21 +0000896 InstrStage<5, [A9_NPipe], 1>,
897 InstrStage<5, [A9_LSUnit]>],
Evan Chenga7624002010-10-09 01:45:34 +0000898 [5, 5, 6, 2, 1, 1, 1, 1, 1, 2]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000899 //
900 // VLD4
Evan Chenge790afc2010-10-11 23:41:41 +0000901 InstrItinData<IIC_VLD4, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000902 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +0000903 InstrStage<1, [A9_DRegsN], 0, Required>,
904 InstrStage<10,[A9_DRegsVFP], 0, Reserved>,
Evan Cheng39121582010-10-13 01:54:21 +0000905 InstrStage<4, [A9_NPipe], 1>,
906 InstrStage<4, [A9_LSUnit]>],
Evan Chengd7a404d2010-10-09 04:07:58 +0000907 [4, 4, 5, 5, 1]>,
908 //
909 // VLD4ln
Evan Chenge790afc2010-10-11 23:41:41 +0000910 InstrItinData<IIC_VLD4ln, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chengd7a404d2010-10-09 04:07:58 +0000911 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +0000912 InstrStage<1, [A9_DRegsN], 0, Required>,
913 InstrStage<11,[A9_DRegsVFP], 0, Reserved>,
Evan Cheng39121582010-10-13 01:54:21 +0000914 InstrStage<5, [A9_NPipe], 1>,
915 InstrStage<5, [A9_LSUnit]>],
Evan Chengd7a404d2010-10-09 04:07:58 +0000916 [5, 5, 6, 6, 1, 1, 1, 1, 2, 2]>,
917 //
918 // VLD4u
Evan Chenge790afc2010-10-11 23:41:41 +0000919 InstrItinData<IIC_VLD4u, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chengd7a404d2010-10-09 04:07:58 +0000920 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +0000921 InstrStage<1, [A9_DRegsN], 0, Required>,
922 InstrStage<10,[A9_DRegsVFP], 0, Reserved>,
Evan Cheng39121582010-10-13 01:54:21 +0000923 InstrStage<4, [A9_NPipe], 1>,
924 InstrStage<4, [A9_LSUnit]>],
Evan Chengd7a404d2010-10-09 04:07:58 +0000925 [4, 4, 5, 5, 2, 1]>,
926 //
927 // VLD4lnu
Evan Chenge790afc2010-10-11 23:41:41 +0000928 InstrItinData<IIC_VLD4lnu, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chengd7a404d2010-10-09 04:07:58 +0000929 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +0000930 InstrStage<1, [A9_DRegsN], 0, Required>,
931 InstrStage<11,[A9_DRegsVFP], 0, Reserved>,
Evan Cheng39121582010-10-13 01:54:21 +0000932 InstrStage<5, [A9_NPipe], 1>,
933 InstrStage<5, [A9_LSUnit]>],
Evan Chengd7a404d2010-10-09 04:07:58 +0000934 [5, 5, 6, 6, 2, 1, 1, 1, 1, 1, 2, 2]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +0000935 //
Evan Cheng94ad0082010-10-11 22:03:18 +0000936 // VST1
937 InstrItinData<IIC_VST1, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +0000938 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +0000939 InstrStage<1, [A9_DRegsN], 0, Required>,
940 InstrStage<2, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng39121582010-10-13 01:54:21 +0000941 InstrStage<2, [A9_NPipe], 1>,
942 InstrStage<2, [A9_LSUnit]>],
Evan Cheng94ad0082010-10-11 22:03:18 +0000943 [1, 1, 1]>,
944 //
945 // VST1x2
946 InstrItinData<IIC_VST1x2, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
947 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +0000948 InstrStage<1, [A9_DRegsN], 0, Required>,
949 InstrStage<2, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng39121582010-10-13 01:54:21 +0000950 InstrStage<2, [A9_NPipe], 1>,
951 InstrStage<2, [A9_LSUnit]>],
Evan Cheng94ad0082010-10-11 22:03:18 +0000952 [1, 1, 1, 1]>,
953 //
954 // VST1x3
955 InstrItinData<IIC_VST1x3, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
956 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +0000957 InstrStage<1, [A9_DRegsN], 0, Required>,
958 InstrStage<3, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng39121582010-10-13 01:54:21 +0000959 InstrStage<3, [A9_NPipe], 1>,
960 InstrStage<3, [A9_LSUnit]>],
Evan Cheng94ad0082010-10-11 22:03:18 +0000961 [1, 1, 1, 1, 2]>,
962 //
963 // VST1x4
964 InstrItinData<IIC_VST1x4, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
965 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +0000966 InstrStage<1, [A9_DRegsN], 0, Required>,
967 InstrStage<3, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng39121582010-10-13 01:54:21 +0000968 InstrStage<3, [A9_NPipe], 1>,
969 InstrStage<3, [A9_LSUnit]>],
Evan Cheng94ad0082010-10-11 22:03:18 +0000970 [1, 1, 1, 1, 2, 2]>,
971 //
972 // VST1u
973 InstrItinData<IIC_VST1u, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
974 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +0000975 InstrStage<1, [A9_DRegsN], 0, Required>,
976 InstrStage<2, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng39121582010-10-13 01:54:21 +0000977 InstrStage<2, [A9_NPipe], 1>,
978 InstrStage<2, [A9_LSUnit]>],
Evan Cheng94ad0082010-10-11 22:03:18 +0000979 [2, 1, 1, 1, 1]>,
980 //
981 // VST1x2u
982 InstrItinData<IIC_VST1x2u, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
983 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +0000984 InstrStage<1, [A9_DRegsN], 0, Required>,
985 InstrStage<2, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng39121582010-10-13 01:54:21 +0000986 InstrStage<2, [A9_NPipe], 1>,
987 InstrStage<2, [A9_LSUnit]>],
Evan Cheng94ad0082010-10-11 22:03:18 +0000988 [2, 1, 1, 1, 1, 1]>,
989 //
990 // VST1x3u
991 InstrItinData<IIC_VST1x3u, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
992 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +0000993 InstrStage<1, [A9_DRegsN], 0, Required>,
994 InstrStage<2, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng39121582010-10-13 01:54:21 +0000995 InstrStage<3, [A9_NPipe], 1>,
996 InstrStage<3, [A9_LSUnit]>],
Evan Cheng94ad0082010-10-11 22:03:18 +0000997 [2, 1, 1, 1, 1, 1, 2]>,
998 //
999 // VST1x4u
1000 InstrItinData<IIC_VST1x4u, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
1001 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +00001002 InstrStage<1, [A9_DRegsN], 0, Required>,
1003 InstrStage<3, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng39121582010-10-13 01:54:21 +00001004 InstrStage<3, [A9_NPipe], 1>,
1005 InstrStage<3, [A9_LSUnit]>],
Evan Cheng94ad0082010-10-11 22:03:18 +00001006 [2, 1, 1, 1, 1, 1, 2, 2]>,
1007 //
1008 // VST2
1009 InstrItinData<IIC_VST2, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
1010 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +00001011 InstrStage<1, [A9_DRegsN], 0, Required>,
1012 InstrStage<2, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng39121582010-10-13 01:54:21 +00001013 InstrStage<2, [A9_NPipe], 1>,
1014 InstrStage<2, [A9_LSUnit]>],
Evan Cheng94ad0082010-10-11 22:03:18 +00001015 [1, 1, 1, 1]>,
1016 //
1017 // VST2x2
1018 InstrItinData<IIC_VST2x2, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
1019 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +00001020 InstrStage<1, [A9_DRegsN], 0, Required>,
1021 InstrStage<3, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng39121582010-10-13 01:54:21 +00001022 InstrStage<3, [A9_NPipe], 1>,
1023 InstrStage<3, [A9_LSUnit]>],
Evan Cheng94ad0082010-10-11 22:03:18 +00001024 [1, 1, 1, 1, 2, 2]>,
1025 //
1026 // VST2u
1027 InstrItinData<IIC_VST2u, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
1028 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +00001029 InstrStage<1, [A9_DRegsN], 0, Required>,
1030 InstrStage<2, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng39121582010-10-13 01:54:21 +00001031 InstrStage<2, [A9_NPipe], 1>,
1032 InstrStage<2, [A9_LSUnit]>],
Evan Cheng94ad0082010-10-11 22:03:18 +00001033 [2, 1, 1, 1, 1, 1]>,
1034 //
1035 // VST2x2u
1036 InstrItinData<IIC_VST2x2u, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
1037 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +00001038 InstrStage<1, [A9_DRegsN], 0, Required>,
1039 InstrStage<3, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng39121582010-10-13 01:54:21 +00001040 InstrStage<3, [A9_NPipe], 1>,
1041 InstrStage<3, [A9_LSUnit]>],
Evan Cheng94ad0082010-10-11 22:03:18 +00001042 [2, 1, 1, 1, 1, 1, 2, 2]>,
1043 //
1044 // VST2ln
1045 InstrItinData<IIC_VST2ln, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
1046 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +00001047 InstrStage<1, [A9_DRegsN], 0, Required>,
1048 InstrStage<2, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng39121582010-10-13 01:54:21 +00001049 InstrStage<2, [A9_NPipe], 1>,
1050 InstrStage<2, [A9_LSUnit]>],
Evan Cheng94ad0082010-10-11 22:03:18 +00001051 [1, 1, 1, 1]>,
1052 //
1053 // VST2lnu
1054 InstrItinData<IIC_VST2lnu, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
1055 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +00001056 InstrStage<1, [A9_DRegsN], 0, Required>,
1057 InstrStage<3, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng39121582010-10-13 01:54:21 +00001058 InstrStage<3, [A9_NPipe], 1>,
1059 InstrStage<3, [A9_LSUnit]>],
Evan Cheng94ad0082010-10-11 22:03:18 +00001060 [2, 1, 1, 1, 1, 1]>,
1061 //
1062 // VST3
1063 InstrItinData<IIC_VST3, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
1064 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +00001065 InstrStage<1, [A9_DRegsN], 0, Required>,
1066 InstrStage<3, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng39121582010-10-13 01:54:21 +00001067 InstrStage<3, [A9_NPipe], 1>,
1068 InstrStage<3, [A9_LSUnit]>],
Evan Cheng94ad0082010-10-11 22:03:18 +00001069 [1, 1, 1, 1, 2]>,
1070 //
1071 // VST3u
1072 InstrItinData<IIC_VST3u, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
1073 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +00001074 InstrStage<1, [A9_DRegsN], 0, Required>,
1075 InstrStage<3, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng39121582010-10-13 01:54:21 +00001076 InstrStage<3, [A9_NPipe], 1>,
1077 InstrStage<3, [A9_LSUnit]>],
Evan Cheng94ad0082010-10-11 22:03:18 +00001078 [2, 1, 1, 1, 1, 1, 2]>,
1079 //
1080 // VST3ln
1081 InstrItinData<IIC_VST3ln, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
1082 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +00001083 InstrStage<1, [A9_DRegsN], 0, Required>,
1084 InstrStage<3, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng39121582010-10-13 01:54:21 +00001085 InstrStage<3, [A9_NPipe], 1>,
1086 InstrStage<3, [A9_LSUnit]>],
Evan Cheng94ad0082010-10-11 22:03:18 +00001087 [1, 1, 1, 1, 2]>,
1088 //
1089 // VST3lnu
1090 InstrItinData<IIC_VST3lnu, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
1091 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +00001092 InstrStage<1, [A9_DRegsN], 0, Required>,
1093 InstrStage<3, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng39121582010-10-13 01:54:21 +00001094 InstrStage<3, [A9_NPipe], 1>,
1095 InstrStage<3, [A9_LSUnit]>],
Evan Cheng94ad0082010-10-11 22:03:18 +00001096 [2, 1, 1, 1, 1, 1, 2]>,
1097 //
1098 // VST4
1099 InstrItinData<IIC_VST4, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
1100 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +00001101 InstrStage<1, [A9_DRegsN], 0, Required>,
1102 InstrStage<3, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng39121582010-10-13 01:54:21 +00001103 InstrStage<3, [A9_NPipe], 1>,
1104 InstrStage<3, [A9_LSUnit]>],
Evan Cheng94ad0082010-10-11 22:03:18 +00001105 [1, 1, 1, 1, 2, 2]>,
1106 //
1107 // VST4u
1108 InstrItinData<IIC_VST4u, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
1109 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +00001110 InstrStage<1, [A9_DRegsN], 0, Required>,
1111 InstrStage<3, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng39121582010-10-13 01:54:21 +00001112 InstrStage<3, [A9_NPipe], 1>,
1113 InstrStage<3, [A9_LSUnit]>],
Evan Cheng94ad0082010-10-11 22:03:18 +00001114 [2, 1, 1, 1, 1, 1, 2, 2]>,
1115 //
1116 // VST4ln
1117 InstrItinData<IIC_VST4ln, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
1118 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +00001119 InstrStage<1, [A9_DRegsN], 0, Required>,
1120 InstrStage<3, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng39121582010-10-13 01:54:21 +00001121 InstrStage<3, [A9_NPipe], 1>,
1122 InstrStage<3, [A9_LSUnit]>],
Evan Cheng94ad0082010-10-11 22:03:18 +00001123 [1, 1, 1, 1, 2, 2]>,
1124 //
1125 // VST4lnu
1126 InstrItinData<IIC_VST4lnu, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
1127 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +00001128 InstrStage<1, [A9_DRegsN], 0, Required>,
1129 InstrStage<3, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng39121582010-10-13 01:54:21 +00001130 InstrStage<3, [A9_NPipe], 1>,
1131 InstrStage<3, [A9_LSUnit]>],
Evan Cheng94ad0082010-10-11 22:03:18 +00001132 [2, 1, 1, 1, 1, 1, 2, 2]>,
1133
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001134 //
1135 // Double-register Integer Unary
Evan Chenge790afc2010-10-11 23:41:41 +00001136 InstrItinData<IIC_VUNAiD, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
1137 InstrStage<1, [A9_MUX0], 0>,
1138 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 Chenga3178152010-10-01 22:52:29 +00001141 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001142 [4, 2]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001143 //
1144 // Quad-register Integer Unary
Evan Chenge790afc2010-10-11 23:41:41 +00001145 InstrItinData<IIC_VUNAiQ, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
1146 InstrStage<1, [A9_MUX0], 0>,
1147 InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001148 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001149 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +00001150 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001151 [4, 2]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001152 //
1153 // Double-register Integer Q-Unary
Evan Chenge790afc2010-10-11 23:41:41 +00001154 InstrItinData<IIC_VQUNAiD, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
1155 InstrStage<1, [A9_MUX0], 0>,
1156 InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001157 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001158 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +00001159 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001160 [4, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001161 //
1162 // Quad-register Integer CountQ-Unary
Evan Chenge790afc2010-10-11 23:41:41 +00001163 InstrItinData<IIC_VQUNAiQ, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
1164 InstrStage<1, [A9_MUX0], 0>,
1165 InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001166 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001167 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +00001168 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001169 [4, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001170 //
1171 // Double-register Integer Binary
Evan Chenge790afc2010-10-11 23:41:41 +00001172 InstrItinData<IIC_VBINiD, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
1173 InstrStage<1, [A9_MUX0], 0>,
1174 InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001175 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001176 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +00001177 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001178 [3, 2, 2]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001179 //
1180 // Quad-register Integer Binary
Evan Chenge790afc2010-10-11 23:41:41 +00001181 InstrItinData<IIC_VBINiQ, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
1182 InstrStage<1, [A9_MUX0], 0>,
1183 InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001184 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001185 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +00001186 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001187 [3, 2, 2]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001188 //
1189 // Double-register Integer Subtract
Evan Chenge790afc2010-10-11 23:41:41 +00001190 InstrItinData<IIC_VSUBiD, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
1191 InstrStage<1, [A9_MUX0], 0>,
1192 InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001193 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001194 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +00001195 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001196 [3, 2, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001197 //
1198 // Quad-register Integer Subtract
Evan Chenge790afc2010-10-11 23:41:41 +00001199 InstrItinData<IIC_VSUBiQ, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
1200 InstrStage<1, [A9_MUX0], 0>,
1201 InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001202 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001203 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +00001204 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001205 [3, 2, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001206 //
1207 // Double-register Integer Shift
Evan Chenge790afc2010-10-11 23:41:41 +00001208 InstrItinData<IIC_VSHLiD, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
1209 InstrStage<1, [A9_MUX0], 0>,
1210 InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001211 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001212 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +00001213 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001214 [3, 1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001215 //
1216 // Quad-register Integer Shift
Evan Chenge790afc2010-10-11 23:41:41 +00001217 InstrItinData<IIC_VSHLiQ, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
1218 InstrStage<1, [A9_MUX0], 0>,
1219 InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001220 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001221 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +00001222 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001223 [3, 1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001224 //
1225 // Double-register Integer Shift (4 cycle)
Evan Chenge790afc2010-10-11 23:41:41 +00001226 InstrItinData<IIC_VSHLi4D, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
1227 InstrStage<1, [A9_MUX0], 0>,
1228 InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001229 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001230 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +00001231 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001232 [4, 1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001233 //
1234 // Quad-register Integer Shift (4 cycle)
Evan Chenge790afc2010-10-11 23:41:41 +00001235 InstrItinData<IIC_VSHLi4Q, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
1236 InstrStage<1, [A9_MUX0], 0>,
1237 InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001238 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001239 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +00001240 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001241 [4, 1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001242 //
1243 // Double-register Integer Binary (4 cycle)
Evan Chenge790afc2010-10-11 23:41:41 +00001244 InstrItinData<IIC_VBINi4D, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
1245 InstrStage<1, [A9_MUX0], 0>,
1246 InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001247 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001248 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +00001249 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001250 [4, 2, 2]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001251 //
1252 // Quad-register Integer Binary (4 cycle)
Evan Chenge790afc2010-10-11 23:41:41 +00001253 InstrItinData<IIC_VBINi4Q, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
1254 InstrStage<1, [A9_MUX0], 0>,
1255 InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001256 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001257 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +00001258 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001259 [4, 2, 2]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001260 //
1261 // Double-register Integer Subtract (4 cycle)
Evan Chenge790afc2010-10-11 23:41:41 +00001262 InstrItinData<IIC_VSUBi4D, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
1263 InstrStage<1, [A9_MUX0], 0>,
1264 InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001265 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001266 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +00001267 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001268 [4, 2, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001269 //
1270 // Quad-register Integer Subtract (4 cycle)
Evan Chenge790afc2010-10-11 23:41:41 +00001271 InstrItinData<IIC_VSUBi4Q, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
1272 InstrStage<1, [A9_MUX0], 0>,
1273 InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001274 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001275 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +00001276 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001277 [4, 2, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001278
1279 //
1280 // Double-register Integer Count
Evan Chenge790afc2010-10-11 23:41:41 +00001281 InstrItinData<IIC_VCNTiD, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
1282 InstrStage<1, [A9_MUX0], 0>,
1283 InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001284 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001285 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +00001286 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001287 [3, 2, 2]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001288 //
1289 // Quad-register Integer Count
1290 // Result written in N3, but that is relative to the last cycle of multicycle,
1291 // so we use 4 for those cases
Evan Chenge790afc2010-10-11 23:41:41 +00001292 InstrItinData<IIC_VCNTiQ, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
1293 InstrStage<1, [A9_MUX0], 0>,
1294 InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001295 // Extra latency cycles since wbck is 7 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001296 InstrStage<8, [A9_DRegsVFP], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +00001297 InstrStage<2, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001298 [4, 2, 2]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001299 //
1300 // Double-register Absolute Difference and Accumulate
Evan Chenge790afc2010-10-11 23:41:41 +00001301 InstrItinData<IIC_VABAD, [InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Cheng73eac2a2010-10-03 02:03:59 +00001302 InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001303 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +00001304 InstrStage<1, [A9_DRegsN], 0, Required>,
1305 // Extra latency cycles since wbck is 6 cycles
Evan Chenga3178152010-10-01 22:52:29 +00001306 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001307 [6, 3, 2, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001308 //
1309 // Quad-register Absolute Difference and Accumulate
Evan Chenge790afc2010-10-11 23:41:41 +00001310 InstrItinData<IIC_VABAQ, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
1311 InstrStage<1, [A9_MUX0], 0>,
1312 InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001313 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001314 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +00001315 InstrStage<2, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001316 [6, 3, 2, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001317 //
1318 // Double-register Integer Pair Add Long
Evan Chenge790afc2010-10-11 23:41:41 +00001319 InstrItinData<IIC_VPALiD, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
1320 InstrStage<1, [A9_MUX0], 0>,
1321 InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001322 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001323 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +00001324 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001325 [6, 3, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001326 //
1327 // Quad-register Integer Pair Add Long
Evan Chenge790afc2010-10-11 23:41:41 +00001328 InstrItinData<IIC_VPALiQ, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
1329 InstrStage<1, [A9_MUX0], 0>,
1330 InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001331 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001332 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +00001333 InstrStage<2, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001334 [6, 3, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001335
1336 //
1337 // Double-register Integer Multiply (.8, .16)
Evan Chenge790afc2010-10-11 23:41:41 +00001338 InstrItinData<IIC_VMULi16D, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
1339 InstrStage<1, [A9_MUX0], 0>,
1340 InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001341 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001342 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +00001343 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001344 [6, 2, 2]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001345 //
1346 // Quad-register Integer Multiply (.8, .16)
Evan Chenge790afc2010-10-11 23:41:41 +00001347 InstrItinData<IIC_VMULi16Q, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
1348 InstrStage<1, [A9_MUX0], 0>,
1349 InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001350 // Extra latency cycles since wbck is 7 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001351 InstrStage<8, [A9_DRegsVFP], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +00001352 InstrStage<2, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001353 [7, 2, 2]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001354
1355 //
1356 // Double-register Integer Multiply (.32)
Evan Chenge790afc2010-10-11 23:41:41 +00001357 InstrItinData<IIC_VMULi32D, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
1358 InstrStage<1, [A9_MUX0], 0>,
1359 InstrStage<1, [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 Chenga3178152010-10-01 22:52:29 +00001362 InstrStage<2, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001363 [7, 2, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001364 //
1365 // Quad-register Integer Multiply (.32)
Evan Chenge790afc2010-10-11 23:41:41 +00001366 InstrItinData<IIC_VMULi32Q, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
1367 InstrStage<1, [A9_MUX0], 0>,
1368 InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001369 // Extra latency cycles since wbck is 9 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001370 InstrStage<10, [A9_DRegsVFP], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +00001371 InstrStage<4, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001372 [9, 2, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001373 //
1374 // Double-register Integer Multiply-Accumulate (.8, .16)
Evan Chenge790afc2010-10-11 23:41:41 +00001375 InstrItinData<IIC_VMACi16D, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
1376 InstrStage<1, [A9_MUX0], 0>,
1377 InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001378 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001379 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +00001380 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001381 [6, 3, 2, 2]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001382 //
1383 // Double-register Integer Multiply-Accumulate (.32)
Evan Chenge790afc2010-10-11 23:41:41 +00001384 InstrItinData<IIC_VMACi32D, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
1385 InstrStage<1, [A9_MUX0], 0>,
1386 InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001387 // Extra latency cycles since wbck is 7 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001388 InstrStage<8, [A9_DRegsVFP], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +00001389 InstrStage<2, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001390 [7, 3, 2, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001391 //
1392 // Quad-register Integer Multiply-Accumulate (.8, .16)
Evan Chenge790afc2010-10-11 23:41:41 +00001393 InstrItinData<IIC_VMACi16Q, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
1394 InstrStage<1, [A9_MUX0], 0>,
1395 InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001396 // Extra latency cycles since wbck is 7 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001397 InstrStage<8, [A9_DRegsVFP], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +00001398 InstrStage<2, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001399 [7, 3, 2, 2]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001400 //
1401 // Quad-register Integer Multiply-Accumulate (.32)
Evan Chenge790afc2010-10-11 23:41:41 +00001402 InstrItinData<IIC_VMACi32Q, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
1403 InstrStage<1, [A9_MUX0], 0>,
1404 InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001405 // Extra latency cycles since wbck is 9 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001406 InstrStage<10, [A9_DRegsVFP], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +00001407 InstrStage<4, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001408 [9, 3, 2, 1]>,
Evan Cheng2a5d7642010-10-01 20:50:58 +00001409
1410 //
1411 // Move
Evan Chenge790afc2010-10-11 23:41:41 +00001412 InstrItinData<IIC_VMOV, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001413 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +00001414 InstrStage<1, [A9_DRegsN], 0, Required>,
1415 InstrStage<1, [A9_DRegsVFP], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +00001416 InstrStage<1, [A9_NPipe]>],
Evan Cheng2a5d7642010-10-01 20:50:58 +00001417 [1,1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001418 //
1419 // Move Immediate
Evan Chenge790afc2010-10-11 23:41:41 +00001420 InstrItinData<IIC_VMOVImm, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
1421 InstrStage<1, [A9_MUX0], 0>,
1422 InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001423 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001424 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +00001425 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001426 [3]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001427 //
1428 // Double-register Permute Move
Evan Chenge790afc2010-10-11 23:41:41 +00001429 InstrItinData<IIC_VMOVD, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001430 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +00001431 InstrStage<1, [A9_DRegsN], 0, Required>,
1432 // Extra latency cycles since wbck is 6 cycles
1433 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +00001434 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001435 [2, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001436 //
1437 // Quad-register Permute Move
Evan Chenge790afc2010-10-11 23:41:41 +00001438 InstrItinData<IIC_VMOVQ, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001439 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +00001440 InstrStage<1, [A9_DRegsN], 0, Required>,
1441 // Extra latency cycles since wbck is 6 cycles
1442 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +00001443 InstrStage<1, [A9_NPipe]>],
Evan Cheng2a5d7642010-10-01 20:50:58 +00001444 [2, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001445 //
1446 // Integer to Single-precision Move
Evan Chenge790afc2010-10-11 23:41:41 +00001447 InstrItinData<IIC_VMOVIS , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001448 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +00001449 InstrStage<1, [A9_DRegsN], 0, Required>,
1450 InstrStage<3, [A9_DRegsVFP], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +00001451 InstrStage<1, [A9_NPipe]>],
Andrew Trickf4ebec02010-10-21 03:40:16 +00001452 [1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001453 //
1454 // Integer to Double-precision Move
Evan Chenge790afc2010-10-11 23:41:41 +00001455 InstrItinData<IIC_VMOVID , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001456 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +00001457 InstrStage<1, [A9_DRegsN], 0, Required>,
1458 InstrStage<3, [A9_DRegsVFP], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +00001459 InstrStage<1, [A9_NPipe]>],
Andrew Trickf4ebec02010-10-21 03:40:16 +00001460 [1, 1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001461 //
1462 // Single-precision to Integer Move
Evan Chenge790afc2010-10-11 23:41:41 +00001463 InstrItinData<IIC_VMOVSI , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001464 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +00001465 InstrStage<1, [A9_DRegsN], 0, Required>,
1466 InstrStage<3, [A9_DRegsVFP], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +00001467 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001468 [2, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001469 //
1470 // Double-precision to Integer Move
Evan Chenge790afc2010-10-11 23:41:41 +00001471 InstrItinData<IIC_VMOVDI , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001472 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +00001473 InstrStage<1, [A9_DRegsN], 0, Required>,
1474 InstrStage<3, [A9_DRegsVFP], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +00001475 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001476 [2, 2, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001477 //
1478 // Integer to Lane Move
Evan Chenge790afc2010-10-11 23:41:41 +00001479 InstrItinData<IIC_VMOVISL , [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001480 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +00001481 InstrStage<1, [A9_DRegsN], 0, Required>,
1482 InstrStage<4, [A9_DRegsVFP], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +00001483 InstrStage<2, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001484 [3, 1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001485
1486 //
Evan Cheng2a5d7642010-10-01 20:50:58 +00001487 // Vector narrow move
Evan Chenge790afc2010-10-11 23:41:41 +00001488 InstrItinData<IIC_VMOVN, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
1489 InstrStage<1, [A9_MUX0], 0>,
1490 InstrStage<1, [A9_DRegsN], 0, Required>,
Evan Cheng2a5d7642010-10-01 20:50:58 +00001491 // Extra latency cycles since wbck is 6 cycles
1492 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +00001493 InstrStage<1, [A9_NPipe]>],
Evan Cheng2a5d7642010-10-01 20:50:58 +00001494 [3, 1]>,
1495 //
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001496 // Double-register FP Unary
Evan Chenge790afc2010-10-11 23:41:41 +00001497 InstrItinData<IIC_VUNAD, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
1498 InstrStage<1, [A9_MUX0], 0>,
1499 InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001500 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001501 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +00001502 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001503 [5, 2]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001504 //
1505 // Quad-register FP Unary
1506 // Result written in N5, but that is relative to the last cycle of multicycle,
1507 // so we use 6 for those cases
Evan Chenge790afc2010-10-11 23:41:41 +00001508 InstrItinData<IIC_VUNAQ, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
1509 InstrStage<1, [A9_MUX0], 0>,
1510 InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001511 // Extra latency cycles since wbck is 7 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001512 InstrStage<8, [A9_DRegsVFP], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +00001513 InstrStage<2, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001514 [6, 2]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001515 //
1516 // Double-register FP Binary
1517 // FIXME: We're using this itin for many instructions and [2, 2] here is too
1518 // optimistic.
Evan Chenge790afc2010-10-11 23:41:41 +00001519 InstrItinData<IIC_VBIND, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001520 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +00001521 InstrStage<1, [A9_DRegsN], 0, Required>,
1522 // Extra latency cycles since wbck is 6 cycles
1523 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +00001524 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001525 [5, 2, 2]>,
Evan Chenge790afc2010-10-11 23:41:41 +00001526
1527 //
1528 // VPADD, etc.
1529 InstrItinData<IIC_VPBIND, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
1530 InstrStage<1, [A9_MUX0], 0>,
1531 InstrStage<1, [A9_DRegsN], 0, Required>,
1532 // Extra latency cycles since wbck is 6 cycles
1533 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
1534 InstrStage<1, [A9_NPipe]>],
1535 [5, 1, 1]>,
1536 //
1537 // Double-register FP VMUL
1538 InstrItinData<IIC_VFMULD, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
1539 InstrStage<1, [A9_MUX0], 0>,
1540 InstrStage<1, [A9_DRegsN], 0, Required>,
1541 // Extra latency cycles since wbck is 6 cycles
1542 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
1543 InstrStage<1, [A9_NPipe]>],
1544 [5, 2, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001545 //
1546 // Quad-register FP Binary
1547 // Result written in N5, but that is relative to the last cycle of multicycle,
1548 // so we use 6 for those cases
1549 // FIXME: We're using this itin for many instructions and [2, 2] here is too
1550 // optimistic.
Evan Chenge790afc2010-10-11 23:41:41 +00001551 InstrItinData<IIC_VBINQ, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001552 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +00001553 InstrStage<1, [A9_DRegsN], 0, Required>,
1554 // Extra latency cycles since wbck is 7 cycles
1555 InstrStage<8, [A9_DRegsVFP], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +00001556 InstrStage<2, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001557 [6, 2, 2]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001558 //
Evan Chenge790afc2010-10-11 23:41:41 +00001559 // Quad-register FP VMUL
1560 InstrItinData<IIC_VFMULQ, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
1561 InstrStage<1, [A9_MUX0], 0>,
1562 InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001563 // Extra latency cycles since wbck is 7 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001564 InstrStage<8, [A9_DRegsVFP], 0, Reserved>,
Evan Chenge790afc2010-10-11 23:41:41 +00001565 InstrStage<1, [A9_NPipe]>],
1566 [6, 2, 1]>,
1567 //
1568 // Double-register FP Multiple-Accumulate
1569 InstrItinData<IIC_VMACD, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001570 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +00001571 InstrStage<1, [A9_DRegsN], 0, Required>,
1572 // Extra latency cycles since wbck is 7 cycles
1573 InstrStage<8, [A9_DRegsVFP], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +00001574 InstrStage<2, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001575 [6, 3, 2, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001576 //
1577 // Quad-register FP Multiple-Accumulate
1578 // Result written in N9, but that is relative to the last cycle of multicycle,
1579 // so we use 10 for those cases
Evan Chenge790afc2010-10-11 23:41:41 +00001580 InstrItinData<IIC_VMACQ, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
1581 InstrStage<1, [A9_MUX0], 0>,
1582 InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001583 // Extra latency cycles since wbck is 9 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001584 InstrStage<10, [A9_DRegsVFP], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +00001585 InstrStage<4, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001586 [8, 4, 2, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001587 //
1588 // Double-register Reciprical Step
Evan Chenge790afc2010-10-11 23:41:41 +00001589 InstrItinData<IIC_VRECSD, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001590 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +00001591 InstrStage<1, [A9_DRegsN], 0, Required>,
1592 // Extra latency cycles since wbck is 10 cycles
1593 InstrStage<11, [A9_DRegsVFP], 0, Reserved>,
1594 InstrStage<1, [A9_NPipe]>],
1595 [9, 2, 2]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001596 //
1597 // Quad-register Reciprical Step
Evan Chenge790afc2010-10-11 23:41:41 +00001598 InstrItinData<IIC_VRECSQ, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001599 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +00001600 InstrStage<1, [A9_DRegsN], 0, Required>,
1601 // Extra latency cycles since wbck is 11 cycles
1602 InstrStage<12, [A9_DRegsVFP], 0, Reserved>,
1603 InstrStage<2, [A9_NPipe]>],
1604 [10, 2, 2]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001605 //
1606 // Double-register Permute
Evan Chenge790afc2010-10-11 23:41:41 +00001607 InstrItinData<IIC_VPERMD, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
1608 InstrStage<1, [A9_MUX0], 0>,
1609 InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001610 // Extra latency cycles since wbck is 6 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001611 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +00001612 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001613 [2, 2, 1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001614 //
1615 // Quad-register Permute
1616 // Result written in N2, but that is relative to the last cycle of multicycle,
1617 // so we use 3 for those cases
Evan Chenge790afc2010-10-11 23:41:41 +00001618 InstrItinData<IIC_VPERMQ, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
1619 InstrStage<1, [A9_MUX0], 0>,
1620 InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001621 // Extra latency cycles since wbck is 7 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001622 InstrStage<8, [A9_DRegsVFP], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +00001623 InstrStage<2, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001624 [3, 3, 1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001625 //
1626 // Quad-register Permute (3 cycle issue)
1627 // Result written in N2, but that is relative to the last cycle of multicycle,
1628 // so we use 4 for those cases
Evan Chenge790afc2010-10-11 23:41:41 +00001629 InstrItinData<IIC_VPERMQ3, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
1630 InstrStage<1, [A9_MUX0], 0>,
1631 InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001632 // Extra latency cycles since wbck is 8 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001633 InstrStage<9, [A9_DRegsVFP], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +00001634 InstrStage<3, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001635 [4, 4, 1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001636
1637 //
1638 // Double-register VEXT
Evan Chenge790afc2010-10-11 23:41:41 +00001639 InstrItinData<IIC_VEXTD, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001640 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +00001641 InstrStage<1, [A9_DRegsN], 0, Required>,
1642 // Extra latency cycles since wbck is 6 cycles
1643 InstrStage<7, [A9_DRegsVFP], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +00001644 InstrStage<1, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001645 [2, 1, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001646 //
1647 // Quad-register VEXT
Evan Chenge790afc2010-10-11 23:41:41 +00001648 InstrItinData<IIC_VEXTQ, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
Evan Chenga3178152010-10-01 22:52:29 +00001649 InstrStage<1, [A9_MUX0], 0>,
Evan Chenge790afc2010-10-11 23:41:41 +00001650 InstrStage<1, [A9_DRegsN], 0, Required>,
1651 // Extra latency cycles since wbck is 7 cycles
1652 InstrStage<8, [A9_DRegsVFP], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +00001653 InstrStage<2, [A9_NPipe]>],
Evan Chenge790afc2010-10-11 23:41:41 +00001654 [3, 1, 2]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001655 //
1656 // VTB
Evan Chenge790afc2010-10-11 23:41:41 +00001657 InstrItinData<IIC_VTB1, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
1658 InstrStage<1, [A9_MUX0], 0>,
1659 InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001660 // Extra latency cycles since wbck is 7 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001661 InstrStage<8, [A9_DRegsVFP], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +00001662 InstrStage<2, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001663 [3, 2, 1]>,
Evan Chenge790afc2010-10-11 23:41:41 +00001664 InstrItinData<IIC_VTB2, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
1665 InstrStage<1, [A9_MUX0], 0>,
1666 InstrStage<2, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001667 // Extra latency cycles since wbck is 7 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001668 InstrStage<8, [A9_DRegsVFP], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +00001669 InstrStage<2, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001670 [3, 2, 2, 1]>,
Evan Chenge790afc2010-10-11 23:41:41 +00001671 InstrItinData<IIC_VTB3, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
1672 InstrStage<1, [A9_MUX0], 0>,
1673 InstrStage<2, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001674 // Extra latency cycles since wbck is 8 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001675 InstrStage<9, [A9_DRegsVFP], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +00001676 InstrStage<3, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001677 [4, 2, 2, 3, 1]>,
Evan Chenge790afc2010-10-11 23:41:41 +00001678 InstrItinData<IIC_VTB4, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
1679 InstrStage<1, [A9_MUX0], 0>,
1680 InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001681 // Extra latency cycles since wbck is 8 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001682 InstrStage<9, [A9_DRegsVFP], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +00001683 InstrStage<3, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001684 [4, 2, 2, 3, 3, 1]>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001685 //
1686 // VTBX
Evan Chenge790afc2010-10-11 23:41:41 +00001687 InstrItinData<IIC_VTBX1, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
1688 InstrStage<1, [A9_MUX0], 0>,
1689 InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001690 // Extra latency cycles since wbck is 7 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001691 InstrStage<8, [A9_DRegsVFP], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +00001692 InstrStage<2, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001693 [3, 1, 2, 1]>,
Evan Chenge790afc2010-10-11 23:41:41 +00001694 InstrItinData<IIC_VTBX2, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
1695 InstrStage<1, [A9_MUX0], 0>,
1696 InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001697 // Extra latency cycles since wbck is 7 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001698 InstrStage<8, [A9_DRegsVFP], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +00001699 InstrStage<2, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001700 [3, 1, 2, 2, 1]>,
Evan Chenge790afc2010-10-11 23:41:41 +00001701 InstrItinData<IIC_VTBX3, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
1702 InstrStage<1, [A9_MUX0], 0>,
1703 InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001704 // Extra latency cycles since wbck is 8 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001705 InstrStage<9, [A9_DRegsVFP], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +00001706 InstrStage<3, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001707 [4, 1, 2, 2, 3, 1]>,
Evan Chenge790afc2010-10-11 23:41:41 +00001708 InstrItinData<IIC_VTBX4, [InstrStage<1, [A9_Issue0, A9_Issue1], 0>,
1709 InstrStage<1, [A9_MUX0], 0>,
1710 InstrStage<1, [A9_DRegsN], 0, Required>,
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001711 // Extra latency cycles since wbck is 8 cycles
Anton Korobeynikov7d62e332010-04-18 20:31:01 +00001712 InstrStage<9, [A9_DRegsVFP], 0, Reserved>,
Evan Chenga3178152010-10-01 22:52:29 +00001713 InstrStage<2, [A9_NPipe]>],
Evan Cheng89e6f672010-10-01 19:41:46 +00001714 [4, 1, 2, 2, 3, 3, 1]>
Anton Korobeynikov090323a2010-04-07 18:22:11 +00001715]>;