• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1//=- ARMScheduleA8.td - ARM Cortex-A8 Scheduling Definitions -*- tablegen -*-=//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file defines the itinerary class data for the ARM Cortex A8 processors.
11//
12//===----------------------------------------------------------------------===//
13
14//
15// Scheduling information derived from "Cortex-A8 Technical Reference Manual".
16// Functional Units.
17def A8_Pipe0   : FuncUnit; // pipeline 0
18def A8_Pipe1   : FuncUnit; // pipeline 1
19def A8_LSPipe  : FuncUnit; // Load / store pipeline
20def A8_NPipe   : FuncUnit; // NEON ALU/MUL pipe
21def A8_NLSPipe : FuncUnit; // NEON LS pipe
22//
23// Dual issue pipeline represented by A8_Pipe0 | A8_Pipe1
24//
25def CortexA8Itineraries : ProcessorItineraries<
26  [A8_Pipe0, A8_Pipe1, A8_LSPipe, A8_NPipe, A8_NLSPipe],
27  [], [
28  // Two fully-pipelined integer ALU pipelines
29  //
30  // No operand cycles
31  InstrItinData<IIC_iALUx    , [InstrStage<1, [A8_Pipe0, A8_Pipe1]>]>,
32  //
33  // Binary Instructions that produce a result
34  InstrItinData<IIC_iALUi ,[InstrStage<1, [A8_Pipe0, A8_Pipe1]>], [2, 2]>,
35  InstrItinData<IIC_iALUr ,[InstrStage<1, [A8_Pipe0, A8_Pipe1]>], [2, 2, 2]>,
36  InstrItinData<IIC_iALUsi,[InstrStage<1, [A8_Pipe0, A8_Pipe1]>], [2, 2, 1]>,
37  InstrItinData<IIC_iALUsir,[InstrStage<1,[A8_Pipe0, A8_Pipe1]>], [2, 1, 2]>,
38  InstrItinData<IIC_iALUsr,[InstrStage<1, [A8_Pipe0, A8_Pipe1]>], [2, 2, 1, 1]>,
39  //
40  // Bitwise Instructions that produce a result
41  InstrItinData<IIC_iBITi ,[InstrStage<1, [A8_Pipe0, A8_Pipe1]>], [2, 2]>,
42  InstrItinData<IIC_iBITr ,[InstrStage<1, [A8_Pipe0, A8_Pipe1]>], [2, 2, 2]>,
43  InstrItinData<IIC_iBITsi,[InstrStage<1, [A8_Pipe0, A8_Pipe1]>], [2, 2, 1]>,
44  InstrItinData<IIC_iBITsr,[InstrStage<1, [A8_Pipe0, A8_Pipe1]>], [2, 2, 1, 1]>,
45  //
46  // Unary Instructions that produce a result
47  InstrItinData<IIC_iUNAr , [InstrStage<1, [A8_Pipe0, A8_Pipe1]>], [2, 2]>,
48  InstrItinData<IIC_iUNAsi, [InstrStage<1, [A8_Pipe0, A8_Pipe1]>], [2, 1]>,
49  //
50  // Zero and sign extension instructions
51  InstrItinData<IIC_iEXTr , [InstrStage<1, [A8_Pipe0, A8_Pipe1]>], [1, 1]>,
52  InstrItinData<IIC_iEXTAr, [InstrStage<1, [A8_Pipe0, A8_Pipe1]>], [2, 2, 1]>,
53  InstrItinData<IIC_iEXTAsr,[InstrStage<1, [A8_Pipe0, A8_Pipe1]>],[2, 2, 1, 1]>,
54  //
55  // Compare instructions
56  InstrItinData<IIC_iCMPi , [InstrStage<1, [A8_Pipe0, A8_Pipe1]>], [2]>,
57  InstrItinData<IIC_iCMPr , [InstrStage<1, [A8_Pipe0, A8_Pipe1]>], [2, 2]>,
58  InstrItinData<IIC_iCMPsi, [InstrStage<1, [A8_Pipe0, A8_Pipe1]>], [2, 1]>,
59  InstrItinData<IIC_iCMPsr, [InstrStage<1, [A8_Pipe0, A8_Pipe1]>], [2, 1, 1]>,
60  //
61  // Test instructions
62  InstrItinData<IIC_iTSTi , [InstrStage<1, [A8_Pipe0, A8_Pipe1]>], [2]>,
63  InstrItinData<IIC_iTSTr , [InstrStage<1, [A8_Pipe0, A8_Pipe1]>], [2, 2]>,
64  InstrItinData<IIC_iTSTsi, [InstrStage<1, [A8_Pipe0, A8_Pipe1]>], [2, 1]>,
65  InstrItinData<IIC_iTSTsr, [InstrStage<1, [A8_Pipe0, A8_Pipe1]>], [2, 1, 1]>,
66  //
67  // Move instructions, unconditional
68  InstrItinData<IIC_iMOVi , [InstrStage<1, [A8_Pipe0, A8_Pipe1]>], [1]>,
69  InstrItinData<IIC_iMOVr , [InstrStage<1, [A8_Pipe0, A8_Pipe1]>], [1, 1]>,
70  InstrItinData<IIC_iMOVsi, [InstrStage<1, [A8_Pipe0, A8_Pipe1]>], [1, 1]>,
71  InstrItinData<IIC_iMOVsr, [InstrStage<1, [A8_Pipe0, A8_Pipe1]>], [1, 1, 1]>,
72  InstrItinData<IIC_iMOVix2,[InstrStage<1, [A8_Pipe0, A8_Pipe1]>,
73                             InstrStage<1, [A8_Pipe0, A8_Pipe1]>], [2]>,
74  InstrItinData<IIC_iMOVix2addpc,[InstrStage<1, [A8_Pipe0, A8_Pipe1]>,
75                                  InstrStage<1, [A8_Pipe0, A8_Pipe1]>,
76                                  InstrStage<1, [A8_Pipe0, A8_Pipe1]>], [3]>,
77  InstrItinData<IIC_iMOVix2ld,[InstrStage<1, [A8_Pipe0, A8_Pipe1]>,
78                               InstrStage<1, [A8_Pipe0, A8_Pipe1]>,
79                               InstrStage<1, [A8_LSPipe]>], [5]>,
80  //
81  // Move instructions, conditional
82  InstrItinData<IIC_iCMOVi , [InstrStage<1, [A8_Pipe0, A8_Pipe1]>], [2]>,
83  InstrItinData<IIC_iCMOVr , [InstrStage<1, [A8_Pipe0, A8_Pipe1]>], [2, 1]>,
84  InstrItinData<IIC_iCMOVsi, [InstrStage<1, [A8_Pipe0, A8_Pipe1]>], [2, 1]>,
85  InstrItinData<IIC_iCMOVsr, [InstrStage<1, [A8_Pipe0, A8_Pipe1]>], [2, 1, 1]>,
86  InstrItinData<IIC_iCMOVix2,[InstrStage<1, [A8_Pipe0, A8_Pipe1]>,
87                              InstrStage<1, [A8_Pipe0, A8_Pipe1]>], [3, 1]>,
88  //
89  // MVN instructions
90  InstrItinData<IIC_iMVNi , [InstrStage<1, [A8_Pipe0, A8_Pipe1]>], [1]>,
91  InstrItinData<IIC_iMVNr , [InstrStage<1, [A8_Pipe0, A8_Pipe1]>], [1, 1]>,
92  InstrItinData<IIC_iMVNsi, [InstrStage<1, [A8_Pipe0, A8_Pipe1]>], [1, 1]>,
93  InstrItinData<IIC_iMVNsr, [InstrStage<1, [A8_Pipe0, A8_Pipe1]>], [1, 1, 1]>,
94
95  // Integer multiply pipeline
96  // Result written in E5, but that is relative to the last cycle of multicycle,
97  // so we use 6 for those cases
98  //
99  InstrItinData<IIC_iMUL16   , [InstrStage<1, [A8_Pipe0]>], [5, 1, 1]>,
100  InstrItinData<IIC_iMAC16   , [InstrStage<2, [A8_Pipe0]>], [6, 1, 1, 4]>,
101  InstrItinData<IIC_iMUL32   , [InstrStage<2, [A8_Pipe0]>], [6, 1, 1]>,
102  InstrItinData<IIC_iMAC32   , [InstrStage<2, [A8_Pipe0]>], [6, 1, 1, 4]>,
103  InstrItinData<IIC_iMUL64   , [InstrStage<3, [A8_Pipe0]>], [6, 6, 1, 1]>,
104  InstrItinData<IIC_iMAC64   , [InstrStage<3, [A8_Pipe0]>], [6, 6, 1, 1]>,
105
106  // Integer load pipeline
107  //
108  // Immediate offset
109  InstrItinData<IIC_iLoad_i   , [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
110                                 InstrStage<1, [A8_LSPipe]>], [3, 1]>,
111  InstrItinData<IIC_iLoad_bh_i, [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
112                                 InstrStage<1, [A8_LSPipe]>], [3, 1]>,
113  InstrItinData<IIC_iLoad_d_i,  [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
114                                 InstrStage<1, [A8_LSPipe]>], [3, 1]>,
115  //
116  // Register offset
117  InstrItinData<IIC_iLoad_r   , [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
118                                 InstrStage<1, [A8_LSPipe]>], [3, 1, 1]>,
119  InstrItinData<IIC_iLoad_bh_r, [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
120                                 InstrStage<1, [A8_LSPipe]>], [3, 1, 1]>,
121  InstrItinData<IIC_iLoad_d_r , [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
122                                 InstrStage<1, [A8_LSPipe]>], [3, 1, 1]>,
123  //
124  // Scaled register offset, issues over 2 cycles
125  // FIXME: lsl by 2 takes 1 cycle.
126  InstrItinData<IIC_iLoad_si  , [InstrStage<2, [A8_Pipe0, A8_Pipe1], 0>,
127                                 InstrStage<1, [A8_LSPipe]>], [4, 1, 1]>,
128  InstrItinData<IIC_iLoad_bh_si,[InstrStage<2, [A8_Pipe0, A8_Pipe1], 0>,
129                                 InstrStage<1, [A8_LSPipe]>], [4, 1, 1]>,
130  //
131  // Immediate offset with update
132  InstrItinData<IIC_iLoad_iu  , [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
133                                 InstrStage<1, [A8_LSPipe]>], [3, 2, 1]>,
134  InstrItinData<IIC_iLoad_bh_iu,[InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
135                                 InstrStage<1, [A8_LSPipe]>], [3, 2, 1]>,
136  //
137  // Register offset with update
138  InstrItinData<IIC_iLoad_ru  , [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
139                                 InstrStage<1, [A8_LSPipe]>], [3, 2, 1, 1]>,
140  InstrItinData<IIC_iLoad_bh_ru,[InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
141                                 InstrStage<1, [A8_LSPipe]>], [3, 2, 1, 1]>,
142  InstrItinData<IIC_iLoad_d_ru, [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
143                                 InstrStage<1, [A8_LSPipe]>], [3, 2, 1, 1]>,
144  //
145  // Scaled register offset with update, issues over 2 cycles
146  InstrItinData<IIC_iLoad_siu , [InstrStage<2, [A8_Pipe0, A8_Pipe1], 0>,
147                                 InstrStage<2, [A8_LSPipe]>], [4, 3, 1, 1]>,
148  InstrItinData<IIC_iLoad_bh_siu,[InstrStage<2, [A8_Pipe0, A8_Pipe1], 0>,
149                                  InstrStage<2, [A8_LSPipe]>], [4, 3, 1, 1]>,
150  //
151  // Load multiple, def is the 5th operand. Pipeline 0 only.
152  // FIXME: A8_LSPipe cycle time is dynamic, this assumes 3 to 4 registers.
153  InstrItinData<IIC_iLoad_m  , [InstrStage<2, [A8_Pipe0], 0>,
154                                InstrStage<2, [A8_LSPipe]>], [1, 1, 1, 1, 3]>,
155  //
156  // Load multiple + update, defs are the 1st and 5th operands.
157  InstrItinData<IIC_iLoad_mu , [InstrStage<3, [A8_Pipe0], 0>,
158                                InstrStage<3, [A8_LSPipe]>], [2, 1, 1, 1, 3]>,
159  //
160  // Load multiple plus branch
161  InstrItinData<IIC_iLoad_mBr, [InstrStage<3, [A8_Pipe0], 0>,
162                                InstrStage<3, [A8_LSPipe]>,
163                                InstrStage<1, [A8_Pipe0, A8_Pipe1]>],
164                               [1, 2, 1, 1, 3]>,
165  //
166  // Pop, def is the 3rd operand.
167  InstrItinData<IIC_iPop  ,    [InstrStage<3, [A8_Pipe0], 0>,
168                                InstrStage<3, [A8_LSPipe]>], [1, 1, 3]>,
169  //
170  // Push, def is the 3th operand.
171  InstrItinData<IIC_iPop_Br,   [InstrStage<3, [A8_Pipe0], 0>,
172                                InstrStage<3, [A8_LSPipe]>,
173                                InstrStage<1, [A8_Pipe0, A8_Pipe1]>],
174                               [1, 1, 3]>,
175
176  //
177  // iLoadi + iALUr for t2LDRpci_pic.
178  InstrItinData<IIC_iLoadiALU, [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
179                                InstrStage<1, [A8_LSPipe]>,
180                                InstrStage<1, [A8_Pipe0, A8_Pipe1]>], [4, 1]>,
181
182
183  // Integer store pipeline
184  //
185  // Immediate offset
186  InstrItinData<IIC_iStore_i  , [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
187                                 InstrStage<1, [A8_LSPipe]>], [3, 1]>,
188  InstrItinData<IIC_iStore_bh_i,[InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
189                                 InstrStage<1, [A8_LSPipe]>], [3, 1]>,
190  InstrItinData<IIC_iStore_d_i, [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
191                                 InstrStage<1, [A8_LSPipe]>], [3, 1]>,
192  //
193  // Register offset
194  InstrItinData<IIC_iStore_r  , [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
195                                 InstrStage<1, [A8_LSPipe]>], [3, 1, 1]>,
196  InstrItinData<IIC_iStore_bh_r,[InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
197                                 InstrStage<1, [A8_LSPipe]>], [3, 1, 1]>,
198  InstrItinData<IIC_iStore_d_r, [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
199                                 InstrStage<1, [A8_LSPipe]>], [3, 1, 1]>,
200  //
201  // Scaled register offset, issues over 2 cycles
202  InstrItinData<IIC_iStore_si , [InstrStage<2, [A8_Pipe0, A8_Pipe1], 0>,
203                                 InstrStage<2, [A8_LSPipe]>], [3, 1, 1]>,
204  InstrItinData<IIC_iStore_bh_si,[InstrStage<2, [A8_Pipe0, A8_Pipe1], 0>,
205                                  InstrStage<2, [A8_LSPipe]>], [3, 1, 1]>,
206  //
207  // Immediate offset with update
208  InstrItinData<IIC_iStore_iu , [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
209                                 InstrStage<1, [A8_LSPipe]>], [2, 3, 1]>,
210  InstrItinData<IIC_iStore_bh_iu,[InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
211                                 InstrStage<1, [A8_LSPipe]>], [2, 3, 1]>,
212  //
213  // Register offset with update
214  InstrItinData<IIC_iStore_ru  , [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
215                                  InstrStage<1, [A8_LSPipe]>], [2, 3, 1, 1]>,
216  InstrItinData<IIC_iStore_bh_ru,[InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
217                                  InstrStage<1, [A8_LSPipe]>], [2, 3, 1, 1]>,
218  InstrItinData<IIC_iStore_d_ru, [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
219                                  InstrStage<1, [A8_LSPipe]>], [2, 3, 1, 1]>,
220  //
221  // Scaled register offset with update, issues over 2 cycles
222  InstrItinData<IIC_iStore_siu, [InstrStage<2, [A8_Pipe0, A8_Pipe1], 0>,
223                                 InstrStage<2, [A8_LSPipe]>], [3, 3, 1, 1]>,
224  InstrItinData<IIC_iStore_bh_siu,[InstrStage<2, [A8_Pipe0, A8_Pipe1], 0>,
225                                   InstrStage<2, [A8_LSPipe]>], [3, 3, 1, 1]>,
226  //
227  // Store multiple. Pipeline 0 only.
228  // FIXME: A8_LSPipe cycle time is dynamic, this assumes 3 to 4 registers.
229  InstrItinData<IIC_iStore_m , [InstrStage<2, [A8_Pipe0], 0>,
230                                InstrStage<2, [A8_LSPipe]>]>,
231  //
232  // Store multiple + update
233  InstrItinData<IIC_iStore_mu, [InstrStage<2, [A8_Pipe0], 0>,
234                                InstrStage<2, [A8_LSPipe]>], [2]>,
235
236  //
237  // Preload
238  InstrItinData<IIC_Preload, [InstrStage<1, [A8_Pipe0, A8_Pipe1]>], [2, 2]>,
239
240  // Branch
241  //
242  // no delay slots, so the latency of a branch is unimportant
243  InstrItinData<IIC_Br      , [InstrStage<1, [A8_Pipe0, A8_Pipe1]>]>,
244
245  // VFP
246  // Issue through integer pipeline, and execute in NEON unit. We assume
247  // RunFast mode so that NFP pipeline is used for single-precision when
248  // possible.
249  //
250  // FP Special Register to Integer Register File Move
251  InstrItinData<IIC_fpSTAT , [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
252                              InstrStage<1, [A8_NLSPipe]>], [20]>,
253  //
254  // Single-precision FP Unary
255  InstrItinData<IIC_fpUNA32 , [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
256                               InstrStage<1, [A8_NPipe]>], [7, 1]>,
257  //
258  // Double-precision FP Unary
259  InstrItinData<IIC_fpUNA64 , [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
260                               InstrStage<4, [A8_NPipe], 0>,
261                               InstrStage<4, [A8_NLSPipe]>], [4, 1]>,
262  //
263  // Single-precision FP Compare
264  InstrItinData<IIC_fpCMP32 , [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
265                               InstrStage<1, [A8_NPipe]>], [1, 1]>,
266  //
267  // Double-precision FP Compare
268  InstrItinData<IIC_fpCMP64 , [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
269                               InstrStage<4, [A8_NPipe], 0>,
270                               InstrStage<4, [A8_NLSPipe]>], [4, 1]>,
271  //
272  // Single to Double FP Convert
273  InstrItinData<IIC_fpCVTSD , [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
274                               InstrStage<7, [A8_NPipe], 0>,
275                               InstrStage<7, [A8_NLSPipe]>], [7, 1]>,
276  //
277  // Double to Single FP Convert
278  InstrItinData<IIC_fpCVTDS , [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
279                               InstrStage<5, [A8_NPipe], 0>,
280                               InstrStage<5, [A8_NLSPipe]>], [5, 1]>,
281  //
282  // Single-Precision FP to Integer Convert
283  InstrItinData<IIC_fpCVTSI , [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
284                               InstrStage<1, [A8_NPipe]>], [7, 1]>,
285  //
286  // Double-Precision FP to Integer Convert
287  InstrItinData<IIC_fpCVTDI , [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
288                               InstrStage<8, [A8_NPipe], 0>,
289                               InstrStage<8, [A8_NLSPipe]>], [8, 1]>,
290  //
291  // Integer to Single-Precision FP Convert
292  InstrItinData<IIC_fpCVTIS , [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
293                               InstrStage<1, [A8_NPipe]>], [7, 1]>,
294  //
295  // Integer to Double-Precision FP Convert
296  InstrItinData<IIC_fpCVTID , [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
297                               InstrStage<8, [A8_NPipe], 0>,
298                               InstrStage<8, [A8_NLSPipe]>], [8, 1]>,
299  //
300  // Single-precision FP ALU
301  InstrItinData<IIC_fpALU32 , [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
302                               InstrStage<1, [A8_NPipe]>], [7, 1, 1]>,
303  //
304  // Double-precision FP ALU
305  InstrItinData<IIC_fpALU64 , [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
306                               InstrStage<9, [A8_NPipe], 0>,
307                               InstrStage<9, [A8_NLSPipe]>], [9, 1, 1]>,
308  //
309  // Single-precision FP Multiply
310  InstrItinData<IIC_fpMUL32 , [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
311                               InstrStage<1, [A8_NPipe]>], [7, 1, 1]>,
312  //
313  // Double-precision FP Multiply
314  InstrItinData<IIC_fpMUL64 , [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
315                               InstrStage<11, [A8_NPipe], 0>,
316                               InstrStage<11, [A8_NLSPipe]>], [11, 1, 1]>,
317  //
318  // Single-precision FP MAC
319  InstrItinData<IIC_fpMAC32 , [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
320                               InstrStage<1, [A8_NPipe]>], [7, 2, 1, 1]>,
321  //
322  // Double-precision FP MAC
323  InstrItinData<IIC_fpMAC64 , [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
324                               InstrStage<19, [A8_NPipe], 0>,
325                               InstrStage<19, [A8_NLSPipe]>], [19, 2, 1, 1]>,
326  //
327  // Single-precision FP DIV
328  InstrItinData<IIC_fpDIV32 , [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
329                               InstrStage<20, [A8_NPipe], 0>,
330                               InstrStage<20, [A8_NLSPipe]>], [20, 1, 1]>,
331  //
332  // Double-precision FP DIV
333  InstrItinData<IIC_fpDIV64 , [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
334                               InstrStage<29, [A8_NPipe], 0>,
335                               InstrStage<29, [A8_NLSPipe]>], [29, 1, 1]>,
336  //
337  // Single-precision FP SQRT
338  InstrItinData<IIC_fpSQRT32, [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
339                               InstrStage<19, [A8_NPipe], 0>,
340                               InstrStage<19, [A8_NLSPipe]>], [19, 1]>,
341  //
342  // Double-precision FP SQRT
343  InstrItinData<IIC_fpSQRT64, [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
344                               InstrStage<29, [A8_NPipe], 0>,
345                               InstrStage<29, [A8_NLSPipe]>], [29, 1]>,
346
347  //
348  // Integer to Single-precision Move
349  InstrItinData<IIC_fpMOVIS,  [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
350                               InstrStage<1, [A8_NPipe]>],
351                              [2, 1]>,
352  //
353  // Integer to Double-precision Move
354  InstrItinData<IIC_fpMOVID,  [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
355                               InstrStage<1, [A8_NPipe]>],
356                              [2, 1, 1]>,
357  //
358  // Single-precision to Integer Move
359  InstrItinData<IIC_fpMOVSI,  [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
360                               InstrStage<1, [A8_NPipe]>],
361                              [20, 1]>,
362  //
363  // Double-precision to Integer Move
364  InstrItinData<IIC_fpMOVDI,  [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
365                               InstrStage<1, [A8_NPipe]>],
366                              [20, 20, 1]>,
367
368  //
369  // Single-precision FP Load
370  InstrItinData<IIC_fpLoad32, [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
371                               InstrStage<1, [A8_NLSPipe], 0>,
372                               InstrStage<1, [A8_LSPipe]>],
373                              [2, 1]>,
374  //
375  // Double-precision FP Load
376  InstrItinData<IIC_fpLoad64, [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
377                               InstrStage<1, [A8_NLSPipe], 0>,
378                               InstrStage<1, [A8_LSPipe]>],
379                              [2, 1]>,
380  //
381  // FP Load Multiple
382  // FIXME: A8_LSPipe cycle time is dynamic, this assumes 3 to 4 registers.
383  InstrItinData<IIC_fpLoad_m, [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
384                               InstrStage<1, [A8_NLSPipe], 0>,
385                               InstrStage<1, [A8_LSPipe]>,
386                               InstrStage<1, [A8_NLSPipe], 0>,
387                               InstrStage<1, [A8_LSPipe]>], [1, 1, 1, 2]>,
388  //
389  // FP Load Multiple + update
390  InstrItinData<IIC_fpLoad_mu,[InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
391                               InstrStage<1, [A8_NLSPipe], 0>,
392                               InstrStage<1, [A8_LSPipe]>,
393                               InstrStage<1, [A8_NLSPipe], 0>,
394                               InstrStage<1, [A8_LSPipe]>], [2, 1, 1, 1, 2]>,
395  //
396  // Single-precision FP Store
397  InstrItinData<IIC_fpStore32,[InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
398                               InstrStage<1, [A8_NLSPipe], 0>,
399                               InstrStage<1, [A8_LSPipe]>],
400                              [1, 1]>,
401  //
402  // Double-precision FP Store
403  InstrItinData<IIC_fpStore64,[InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
404                               InstrStage<1, [A8_NLSPipe], 0>,
405                               InstrStage<1, [A8_LSPipe]>],
406                              [1, 1]>,
407  //
408  // FP Store Multiple
409  InstrItinData<IIC_fpStore_m,[InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
410                               InstrStage<1, [A8_NLSPipe], 0>,
411                               InstrStage<1, [A8_LSPipe]>,
412                               InstrStage<1, [A8_NLSPipe], 0>,
413                               InstrStage<1, [A8_LSPipe]>], [1, 1, 1, 1]>,
414  //
415  // FP Store Multiple + update
416  InstrItinData<IIC_fpStore_mu,[InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
417                                InstrStage<1, [A8_NLSPipe], 0>,
418                                InstrStage<1, [A8_LSPipe]>,
419                                InstrStage<1, [A8_NLSPipe], 0>,
420                                InstrStage<1, [A8_LSPipe]>], [2, 1, 1, 1, 1]>,
421
422  // NEON
423  // Issue through integer pipeline, and execute in NEON unit.
424  //
425  // VLD1
426  InstrItinData<IIC_VLD1,     [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
427                               InstrStage<2, [A8_NLSPipe], 0>,
428                               InstrStage<2, [A8_LSPipe]>],
429                              [2, 1]>,
430  // VLD1x2
431  InstrItinData<IIC_VLD1x2,   [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
432                               InstrStage<2, [A8_NLSPipe], 0>,
433                               InstrStage<2, [A8_LSPipe]>],
434                              [2, 2, 1]>,
435  //
436  // VLD1x3
437  InstrItinData<IIC_VLD1x3,   [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
438                               InstrStage<3, [A8_NLSPipe], 0>,
439                               InstrStage<3, [A8_LSPipe]>],
440                              [2, 2, 3, 1]>,
441  //
442  // VLD1x4
443  InstrItinData<IIC_VLD1x4,   [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
444                               InstrStage<3, [A8_NLSPipe], 0>,
445                               InstrStage<3, [A8_LSPipe]>],
446                              [2, 2, 3, 3, 1]>,
447  //
448  // VLD1u
449  InstrItinData<IIC_VLD1u,    [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
450                               InstrStage<2, [A8_NLSPipe], 0>,
451                               InstrStage<2, [A8_LSPipe]>],
452                              [2, 2, 1]>,
453  //
454  // VLD1x2u
455  InstrItinData<IIC_VLD1x2u,  [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
456                               InstrStage<2, [A8_NLSPipe], 0>,
457                               InstrStage<2, [A8_LSPipe]>],
458                              [2, 2, 2, 1]>,
459  //
460  // VLD1x3u
461  InstrItinData<IIC_VLD1x3u,  [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
462                               InstrStage<3, [A8_NLSPipe], 0>,
463                               InstrStage<3, [A8_LSPipe]>],
464                              [2, 2, 3, 2, 1]>,
465  //
466  // VLD1x4u
467  InstrItinData<IIC_VLD1x4u,  [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
468                               InstrStage<3, [A8_NLSPipe], 0>,
469                               InstrStage<3, [A8_LSPipe]>],
470                              [2, 2, 3, 3, 2, 1]>,
471  //
472  // VLD1ln
473  InstrItinData<IIC_VLD1ln,   [InstrStage<1, [A8_Pipe0, A8_Pipe1]>,
474                               InstrStage<3, [A8_NLSPipe], 0>,
475                               InstrStage<3, [A8_LSPipe]>],
476                              [3, 1, 1, 1]>,
477  //
478  // VLD1lnu
479  InstrItinData<IIC_VLD1lnu,  [InstrStage<1, [A8_Pipe0, A8_Pipe1]>,
480                               InstrStage<3, [A8_NLSPipe], 0>,
481                               InstrStage<3, [A8_LSPipe]>],
482                              [3, 2, 1, 1, 1, 1]>,
483  //
484  // VLD1dup
485  InstrItinData<IIC_VLD1dup,  [InstrStage<1, [A8_Pipe0, A8_Pipe1]>,
486                               InstrStage<2, [A8_NLSPipe], 0>,
487                               InstrStage<2, [A8_LSPipe]>],
488                              [2, 1]>,
489  //
490  // VLD1dupu
491  InstrItinData<IIC_VLD1dupu, [InstrStage<1, [A8_Pipe0, A8_Pipe1]>,
492                               InstrStage<2, [A8_NLSPipe], 0>,
493                               InstrStage<2, [A8_LSPipe]>],
494                              [2, 2, 1, 1]>,
495  //
496  // VLD2
497  InstrItinData<IIC_VLD2,     [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
498                               InstrStage<2, [A8_NLSPipe], 0>,
499                               InstrStage<2, [A8_LSPipe]>],
500                              [2, 2, 1]>,
501  //
502  // VLD2x2
503  InstrItinData<IIC_VLD2x2,   [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
504                               InstrStage<3, [A8_NLSPipe], 0>,
505                               InstrStage<3, [A8_LSPipe]>],
506                              [2, 2, 3, 3, 1]>,
507  //
508  // VLD2ln
509  InstrItinData<IIC_VLD2ln,   [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
510                               InstrStage<3, [A8_NLSPipe], 0>,
511                               InstrStage<3, [A8_LSPipe]>],
512                              [3, 3, 1, 1, 1, 1]>,
513  //
514  // VLD2u
515  InstrItinData<IIC_VLD2u,    [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
516                               InstrStage<2, [A8_NLSPipe], 0>,
517                               InstrStage<2, [A8_LSPipe]>],
518                              [2, 2, 2, 1, 1, 1]>,
519  //
520  // VLD2x2u
521  InstrItinData<IIC_VLD2x2u,  [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
522                               InstrStage<3, [A8_NLSPipe], 0>,
523                               InstrStage<3, [A8_LSPipe]>],
524                              [2, 2, 3, 3, 2, 1]>,
525  //
526  // VLD2lnu
527  InstrItinData<IIC_VLD2lnu,  [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
528                               InstrStage<3, [A8_NLSPipe], 0>,
529                               InstrStage<3, [A8_LSPipe]>],
530                              [3, 3, 2, 1, 1, 1, 1, 1]>,
531  //
532  // VLD2dup
533  InstrItinData<IIC_VLD2dup,  [InstrStage<1, [A8_Pipe0, A8_Pipe1]>,
534                               InstrStage<2, [A8_NLSPipe], 0>,
535                               InstrStage<2, [A8_LSPipe]>],
536                              [2, 2, 1]>,
537  //
538  // VLD2dupu
539  InstrItinData<IIC_VLD2dupu, [InstrStage<1, [A8_Pipe0, A8_Pipe1]>,
540                               InstrStage<2, [A8_NLSPipe], 0>,
541                               InstrStage<2, [A8_LSPipe]>],
542                              [2, 2, 2, 1, 1]>,
543  //
544  // VLD3
545  InstrItinData<IIC_VLD3,     [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
546                               InstrStage<4, [A8_NLSPipe], 0>,
547                               InstrStage<4, [A8_LSPipe]>],
548                              [3, 3, 4, 1]>,
549  //
550  // VLD3ln
551  InstrItinData<IIC_VLD3ln,   [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
552                               InstrStage<5, [A8_NLSPipe], 0>,
553                               InstrStage<5, [A8_LSPipe]>],
554                              [4, 4, 5, 1, 1, 1, 1, 2]>,
555  //
556  // VLD3u
557  InstrItinData<IIC_VLD3u,    [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
558                               InstrStage<4, [A8_NLSPipe], 0>,
559                               InstrStage<4, [A8_LSPipe]>],
560                              [3, 3, 4, 2, 1]>,
561  //
562  // VLD3lnu
563  InstrItinData<IIC_VLD3lnu,  [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
564                               InstrStage<5, [A8_NLSPipe], 0>,
565                               InstrStage<5, [A8_LSPipe]>],
566                              [4, 4, 5, 2, 1, 1, 1, 1, 1, 2]>,
567  //
568  // VLD3dup
569  InstrItinData<IIC_VLD3dup,  [InstrStage<1, [A8_Pipe0, A8_Pipe1]>,
570                               InstrStage<3, [A8_NLSPipe], 0>,
571                               InstrStage<3, [A8_LSPipe]>],
572                              [2, 2, 3, 1]>,
573  //
574  // VLD3dupu
575  InstrItinData<IIC_VLD3dupu, [InstrStage<1, [A8_Pipe0, A8_Pipe1]>,
576                               InstrStage<3, [A8_NLSPipe], 0>,
577                               InstrStage<3, [A8_LSPipe]>],
578                              [2, 2, 3, 2, 1, 1]>,
579  //
580  // VLD4
581  InstrItinData<IIC_VLD4,     [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
582                               InstrStage<4, [A8_NLSPipe], 0>,
583                               InstrStage<4, [A8_LSPipe]>],
584                              [3, 3, 4, 4, 1]>,
585  //
586  // VLD4ln
587  InstrItinData<IIC_VLD4ln,   [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
588                               InstrStage<5, [A8_NLSPipe], 0>,
589                               InstrStage<5, [A8_LSPipe]>],
590                              [4, 4, 5, 5, 1, 1, 1, 1, 2, 2]>,
591  //
592  // VLD4u
593  InstrItinData<IIC_VLD4u,    [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
594                               InstrStage<4, [A8_NLSPipe], 0>,
595                               InstrStage<4, [A8_LSPipe]>],
596                              [3, 3, 4, 4, 2, 1]>,
597  //
598  // VLD4lnu
599  InstrItinData<IIC_VLD4lnu,  [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
600                               InstrStage<5, [A8_NLSPipe], 0>,
601                               InstrStage<5, [A8_LSPipe]>],
602                              [4, 4, 5, 5, 2, 1, 1, 1, 1, 1, 2, 2]>,
603  //
604  // VLD4dup
605  InstrItinData<IIC_VLD4dup,  [InstrStage<1, [A8_Pipe0, A8_Pipe1]>,
606                               InstrStage<3, [A8_NLSPipe], 0>,
607                               InstrStage<3, [A8_LSPipe]>],
608                              [2, 2, 3, 3, 1]>,
609  //
610  // VLD4dupu
611  InstrItinData<IIC_VLD4dupu, [InstrStage<1, [A8_Pipe0, A8_Pipe1]>,
612                               InstrStage<3, [A8_NLSPipe], 0>,
613                               InstrStage<3, [A8_LSPipe]>],
614                              [2, 2, 3, 3, 2, 1, 1]>,
615  //
616  // VST1
617  InstrItinData<IIC_VST1,     [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
618                               InstrStage<2, [A8_NLSPipe], 0>,
619                               InstrStage<2, [A8_LSPipe]>],
620                              [1, 1, 1]>,
621  //
622  // VST1x2
623  InstrItinData<IIC_VST1x2,   [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
624                               InstrStage<2, [A8_NLSPipe], 0>,
625                               InstrStage<2, [A8_LSPipe]>],
626                              [1, 1, 1, 1]>,
627  //
628  // VST1x3
629  InstrItinData<IIC_VST1x3,   [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
630                               InstrStage<3, [A8_NLSPipe], 0>,
631                               InstrStage<3, [A8_LSPipe]>],
632                              [1, 1, 1, 1, 2]>,
633  //
634  // VST1x4
635  InstrItinData<IIC_VST1x4,   [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
636                               InstrStage<3, [A8_NLSPipe], 0>,
637                               InstrStage<3, [A8_LSPipe]>],
638                              [1, 1, 1, 1, 2, 2]>,
639  //
640  // VST1u
641  InstrItinData<IIC_VST1u,    [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
642                               InstrStage<2, [A8_NLSPipe], 0>,
643                               InstrStage<2, [A8_LSPipe]>],
644                              [2, 1, 1, 1, 1]>,
645  //
646  // VST1x2u
647  InstrItinData<IIC_VST1x2u,  [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
648                               InstrStage<2, [A8_NLSPipe], 0>,
649                               InstrStage<2, [A8_LSPipe]>],
650                              [2, 1, 1, 1, 1, 1]>,
651  //
652  // VST1x3u
653  InstrItinData<IIC_VST1x3u,  [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
654                               InstrStage<3, [A8_NLSPipe], 0>,
655                               InstrStage<3, [A8_LSPipe]>],
656                              [2, 1, 1, 1, 1, 1, 2]>,
657  //
658  // VST1x4u
659  InstrItinData<IIC_VST1x4u,  [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
660                               InstrStage<3, [A8_NLSPipe], 0>,
661                               InstrStage<3, [A8_LSPipe]>],
662                              [2, 1, 1, 1, 1, 1, 2, 2]>,
663  //
664  // VST1ln
665  InstrItinData<IIC_VST1ln,   [InstrStage<1, [A8_Pipe0, A8_Pipe1]>,
666                               InstrStage<2, [A8_NLSPipe], 0>,
667                               InstrStage<2, [A8_LSPipe]>],
668                              [1, 1, 1]>,
669  //
670  // VST1lnu
671  InstrItinData<IIC_VST1lnu,  [InstrStage<1, [A8_Pipe0, A8_Pipe1]>,
672                               InstrStage<2, [A8_NLSPipe], 0>,
673                               InstrStage<2, [A8_LSPipe]>],
674                              [2, 1, 1, 1, 1]>,
675  //
676  // VST2
677  InstrItinData<IIC_VST2,     [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
678                               InstrStage<2, [A8_NLSPipe], 0>,
679                               InstrStage<2, [A8_LSPipe]>],
680                              [1, 1, 1, 1]>,
681  //
682  // VST2x2
683  InstrItinData<IIC_VST2x2,   [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
684                               InstrStage<4, [A8_NLSPipe], 0>,
685                               InstrStage<4, [A8_LSPipe]>],
686                              [1, 1, 1, 1, 2, 2]>,
687  //
688  // VST2u
689  InstrItinData<IIC_VST2u,    [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
690                               InstrStage<2, [A8_NLSPipe], 0>,
691                               InstrStage<2, [A8_LSPipe]>],
692                              [2, 1, 1, 1, 1, 1]>,
693  //
694  // VST2x2u
695  InstrItinData<IIC_VST2x2u,  [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
696                               InstrStage<4, [A8_NLSPipe], 0>,
697                               InstrStage<4, [A8_LSPipe]>],
698                              [2, 1, 1, 1, 1, 1, 2, 2]>,
699  //
700  // VST2ln
701  InstrItinData<IIC_VST2ln,   [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
702                               InstrStage<2, [A8_NLSPipe], 0>,
703                               InstrStage<2, [A8_LSPipe]>],
704                              [1, 1, 1, 1]>,
705  //
706  // VST2lnu
707  InstrItinData<IIC_VST2lnu,  [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
708                               InstrStage<2, [A8_NLSPipe], 0>,
709                               InstrStage<2, [A8_LSPipe]>],
710                              [2, 1, 1, 1, 1, 1]>,
711  //
712  // VST3
713  InstrItinData<IIC_VST3,     [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
714                               InstrStage<3, [A8_NLSPipe], 0>,
715                               InstrStage<3, [A8_LSPipe]>],
716                              [1, 1, 1, 1, 2]>,
717  //
718  // VST3u
719  InstrItinData<IIC_VST3u,    [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
720                               InstrStage<3, [A8_NLSPipe], 0>,
721                               InstrStage<3, [A8_LSPipe]>],
722                              [2, 1, 1, 1, 1, 1, 2]>,
723  //
724  // VST3ln
725  InstrItinData<IIC_VST3ln,   [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
726                               InstrStage<3, [A8_NLSPipe], 0>,
727                               InstrStage<3, [A8_LSPipe]>],
728                              [1, 1, 1, 1, 2]>,
729  //
730  // VST3lnu
731  InstrItinData<IIC_VST3lnu,  [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
732                               InstrStage<3, [A8_NLSPipe], 0>,
733                               InstrStage<3, [A8_LSPipe]>],
734                              [2, 1, 1, 1, 1, 1, 2]>,
735  //
736  // VST4
737  InstrItinData<IIC_VST4,     [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
738                               InstrStage<4, [A8_NLSPipe], 0>,
739                               InstrStage<4, [A8_LSPipe]>],
740                              [1, 1, 1, 1, 2, 2]>,
741  //
742  // VST4u
743  InstrItinData<IIC_VST4u,    [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
744                               InstrStage<4, [A8_NLSPipe], 0>,
745                               InstrStage<4, [A8_LSPipe]>],
746                              [2, 1, 1, 1, 1, 1, 2, 2]>,
747  //
748  // VST4ln
749  InstrItinData<IIC_VST4ln,   [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
750                               InstrStage<4, [A8_NLSPipe], 0>,
751                               InstrStage<4, [A8_LSPipe]>],
752                              [1, 1, 1, 1, 2, 2]>,
753  //
754  // VST4lnu
755  InstrItinData<IIC_VST4lnu,  [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
756                               InstrStage<4, [A8_NLSPipe], 0>,
757                               InstrStage<4, [A8_LSPipe]>],
758                              [2, 1, 1, 1, 1, 1, 2, 2]>,
759  //
760  // Double-register FP Unary
761  InstrItinData<IIC_VUNAD,    [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
762                               InstrStage<1, [A8_NPipe]>], [5, 2]>,
763  //
764  // Quad-register FP Unary
765  // Result written in N5, but that is relative to the last cycle of multicycle,
766  // so we use 6 for those cases
767  InstrItinData<IIC_VUNAQ,    [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
768                               InstrStage<2, [A8_NPipe]>], [6, 2]>,
769  //
770  // Double-register FP Binary
771  InstrItinData<IIC_VBIND,    [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
772                               InstrStage<1, [A8_NPipe]>], [5, 2, 2]>,
773  //
774  // VPADD, etc.
775  InstrItinData<IIC_VPBIND,   [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
776                               InstrStage<1, [A8_NPipe]>], [5, 2, 2]>,
777  //
778  // Double-register FP VMUL
779  InstrItinData<IIC_VFMULD,   [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
780                               InstrStage<1, [A8_NPipe]>], [5, 2, 1]>,
781
782  //
783  // Quad-register FP Binary
784  // Result written in N5, but that is relative to the last cycle of multicycle,
785  // so we use 6 for those cases
786  InstrItinData<IIC_VBINQ,    [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
787                               InstrStage<2, [A8_NPipe]>], [6, 2, 2]>,
788  //
789  // Quad-register FP VMUL
790  InstrItinData<IIC_VFMULQ,   [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
791                               InstrStage<1, [A8_NPipe]>], [6, 2, 1]>,
792  //
793  // Move
794  InstrItinData<IIC_VMOV,     [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
795                               InstrStage<1, [A8_NPipe]>], [1, 1]>,
796  //
797  // Move Immediate
798  InstrItinData<IIC_VMOVImm,  [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
799                               InstrStage<1, [A8_NPipe]>], [3]>,
800  //
801  // Double-register Permute Move
802  InstrItinData<IIC_VMOVD,    [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
803                               InstrStage<1, [A8_NLSPipe]>], [2, 1]>,
804  //
805  // Quad-register Permute Move
806  // Result written in N2, but that is relative to the last cycle of multicycle,
807  // so we use 3 for those cases
808  InstrItinData<IIC_VMOVQ,    [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
809                               InstrStage<2, [A8_NLSPipe]>], [3, 1]>,
810  //
811  // Integer to Single-precision Move
812  InstrItinData<IIC_VMOVIS ,  [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
813                               InstrStage<1, [A8_NLSPipe]>], [2, 1]>,
814  //
815  // Integer to Double-precision Move
816  InstrItinData<IIC_VMOVID ,  [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
817                               InstrStage<1, [A8_NLSPipe]>], [2, 1, 1]>,
818  //
819  // Single-precision to Integer Move
820  InstrItinData<IIC_VMOVSI ,  [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
821                               InstrStage<1, [A8_NLSPipe]>], [20, 1]>,
822  //
823  // Double-precision to Integer Move
824  InstrItinData<IIC_VMOVDI ,  [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
825                               InstrStage<1, [A8_NLSPipe]>], [20, 20, 1]>,
826  //
827  // Integer to Lane Move
828  InstrItinData<IIC_VMOVISL , [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
829                               InstrStage<2, [A8_NLSPipe]>], [3, 1, 1]>,
830  //
831  // Vector narrow move
832  InstrItinData<IIC_VMOVN   , [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
833                               InstrStage<1, [A8_NPipe]>], [2, 1]>,
834  //
835  // Double-register Permute
836  InstrItinData<IIC_VPERMD,   [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
837                               InstrStage<1, [A8_NLSPipe]>], [2, 2, 1, 1]>,
838  //
839  // Quad-register Permute
840  // Result written in N2, but that is relative to the last cycle of multicycle,
841  // so we use 3 for those cases
842  InstrItinData<IIC_VPERMQ,   [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
843                               InstrStage<2, [A8_NLSPipe]>], [3, 3, 1, 1]>,
844  //
845  // Quad-register Permute (3 cycle issue)
846  // Result written in N2, but that is relative to the last cycle of multicycle,
847  // so we use 4 for those cases
848  InstrItinData<IIC_VPERMQ3,  [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
849                               InstrStage<1, [A8_NLSPipe]>,
850                               InstrStage<1, [A8_NPipe], 0>,
851                               InstrStage<2, [A8_NLSPipe]>], [4, 4, 1, 1]>,
852  //
853  // Double-register FP Multiple-Accumulate
854  InstrItinData<IIC_VMACD,    [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
855                               InstrStage<1, [A8_NPipe]>], [9, 3, 2, 2]>,
856  //
857  // Quad-register FP Multiple-Accumulate
858  // Result written in N9, but that is relative to the last cycle of multicycle,
859  // so we use 10 for those cases
860  InstrItinData<IIC_VMACQ,    [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
861                               InstrStage<2, [A8_NPipe]>], [10, 3, 2, 2]>,
862  //
863  // Double-register Reciprical Step
864  InstrItinData<IIC_VRECSD,   [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
865                               InstrStage<1, [A8_NPipe]>], [9, 2, 2]>,
866  //
867  // Quad-register Reciprical Step
868  InstrItinData<IIC_VRECSQ,   [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
869                               InstrStage<2, [A8_NPipe]>], [10, 2, 2]>,
870  //
871  // Double-register Integer Count
872  InstrItinData<IIC_VCNTiD,   [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
873                               InstrStage<1, [A8_NPipe]>], [3, 2, 2]>,
874  //
875  // Quad-register Integer Count
876  // Result written in N3, but that is relative to the last cycle of multicycle,
877  // so we use 4 for those cases
878  InstrItinData<IIC_VCNTiQ,   [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
879                               InstrStage<2, [A8_NPipe]>], [4, 2, 2]>,
880  //
881  // Double-register Integer Unary
882  InstrItinData<IIC_VUNAiD,   [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
883                               InstrStage<1, [A8_NPipe]>], [4, 2]>,
884  //
885  // Quad-register Integer Unary
886  InstrItinData<IIC_VUNAiQ,   [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
887                               InstrStage<1, [A8_NPipe]>], [4, 2]>,
888  //
889  // Double-register Integer Q-Unary
890  InstrItinData<IIC_VQUNAiD,  [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
891                               InstrStage<1, [A8_NPipe]>], [4, 1]>,
892  //
893  // Quad-register Integer CountQ-Unary
894  InstrItinData<IIC_VQUNAiQ,  [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
895                               InstrStage<1, [A8_NPipe]>], [4, 1]>,
896  //
897  // Double-register Integer Binary
898  InstrItinData<IIC_VBINiD,   [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
899                               InstrStage<1, [A8_NPipe]>], [3, 2, 2]>,
900  //
901  // Quad-register Integer Binary
902  InstrItinData<IIC_VBINiQ,   [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
903                               InstrStage<1, [A8_NPipe]>], [3, 2, 2]>,
904  //
905  // Double-register Integer Binary (4 cycle)
906  InstrItinData<IIC_VBINi4D,  [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
907                               InstrStage<1, [A8_NPipe]>], [4, 2, 1]>,
908  //
909  // Quad-register Integer Binary (4 cycle)
910  InstrItinData<IIC_VBINi4Q,  [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
911                               InstrStage<1, [A8_NPipe]>], [4, 2, 1]>,
912
913  //
914  // Double-register Integer Subtract
915  InstrItinData<IIC_VSUBiD,   [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
916                               InstrStage<1, [A8_NPipe]>], [3, 2, 1]>,
917  //
918  // Quad-register Integer Subtract
919  InstrItinData<IIC_VSUBiQ,   [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
920                               InstrStage<1, [A8_NPipe]>], [3, 2, 1]>,
921  //
922  // Double-register Integer Subtract
923  InstrItinData<IIC_VSUBi4D,  [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
924                               InstrStage<1, [A8_NPipe]>], [4, 2, 1]>,
925  //
926  // Quad-register Integer Subtract
927  InstrItinData<IIC_VSUBi4Q,  [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
928                               InstrStage<1, [A8_NPipe]>], [4, 2, 1]>,
929  //
930  // Double-register Integer Shift
931  InstrItinData<IIC_VSHLiD,   [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
932                               InstrStage<1, [A8_NPipe]>], [3, 1, 1]>,
933  //
934  // Quad-register Integer Shift
935  InstrItinData<IIC_VSHLiQ,   [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
936                               InstrStage<2, [A8_NPipe]>], [4, 1, 1]>,
937  //
938  // Double-register Integer Shift (4 cycle)
939  InstrItinData<IIC_VSHLi4D,   [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
940                               InstrStage<1, [A8_NPipe]>], [4, 1, 1]>,
941  //
942  // Quad-register Integer Shift (4 cycle)
943  InstrItinData<IIC_VSHLi4Q,   [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
944                               InstrStage<2, [A8_NPipe]>], [5, 1, 1]>,
945  //
946  // Double-register Integer Pair Add Long
947  InstrItinData<IIC_VPALiD,   [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
948                               InstrStage<1, [A8_NPipe]>], [6, 3, 1]>,
949  //
950  // Quad-register Integer Pair Add Long
951  InstrItinData<IIC_VPALiQ,   [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
952                               InstrStage<2, [A8_NPipe]>], [7, 3, 1]>,
953  //
954  // Double-register Absolute Difference and Accumulate
955  InstrItinData<IIC_VABAD,    [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
956                               InstrStage<1, [A8_NPipe]>], [6, 3, 2, 1]>,
957  //
958  // Quad-register Absolute Difference and Accumulate
959  InstrItinData<IIC_VABAQ,    [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
960                               InstrStage<2, [A8_NPipe]>], [6, 3, 2, 1]>,
961
962  //
963  // Double-register Integer Multiply (.8, .16)
964  InstrItinData<IIC_VMULi16D, [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
965                               InstrStage<1, [A8_NPipe]>], [6, 2, 2]>,
966  //
967  // Double-register Integer Multiply (.32)
968  InstrItinData<IIC_VMULi32D, [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
969                               InstrStage<2, [A8_NPipe]>], [7, 2, 1]>,
970  //
971  // Quad-register Integer Multiply (.8, .16)
972  InstrItinData<IIC_VMULi16Q, [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
973                               InstrStage<2, [A8_NPipe]>], [7, 2, 2]>,
974  //
975  // Quad-register Integer Multiply (.32)
976  InstrItinData<IIC_VMULi32Q, [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
977                               InstrStage<1, [A8_NPipe]>,
978                               InstrStage<2, [A8_NLSPipe], 0>,
979                               InstrStage<3, [A8_NPipe]>], [9, 2, 1]>,
980  //
981  // Double-register Integer Multiply-Accumulate (.8, .16)
982  InstrItinData<IIC_VMACi16D, [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
983                               InstrStage<1, [A8_NPipe]>], [6, 3, 2, 2]>,
984  //
985  // Double-register Integer Multiply-Accumulate (.32)
986  InstrItinData<IIC_VMACi32D, [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
987                               InstrStage<2, [A8_NPipe]>], [7, 3, 2, 1]>,
988  //
989  // Quad-register Integer Multiply-Accumulate (.8, .16)
990  InstrItinData<IIC_VMACi16Q, [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
991                               InstrStage<2, [A8_NPipe]>], [7, 3, 2, 2]>,
992  //
993  // Quad-register Integer Multiply-Accumulate (.32)
994  InstrItinData<IIC_VMACi32Q, [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
995                               InstrStage<1, [A8_NPipe]>,
996                               InstrStage<2, [A8_NLSPipe], 0>,
997                               InstrStage<3, [A8_NPipe]>], [9, 3, 2, 1]>,
998  //
999  // Double-register VEXT
1000  InstrItinData<IIC_VEXTD,    [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
1001                               InstrStage<1, [A8_NLSPipe]>], [2, 1, 1]>,
1002  //
1003  // Quad-register VEXT
1004  InstrItinData<IIC_VEXTQ,    [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
1005                               InstrStage<2, [A8_NLSPipe]>], [3, 1, 1]>,
1006  //
1007  // VTB
1008  InstrItinData<IIC_VTB1,     [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
1009                               InstrStage<2, [A8_NLSPipe]>], [3, 2, 1]>,
1010  InstrItinData<IIC_VTB2,     [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
1011                               InstrStage<2, [A8_NLSPipe]>], [3, 2, 2, 1]>,
1012  InstrItinData<IIC_VTB3,     [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
1013                               InstrStage<1, [A8_NLSPipe]>,
1014                               InstrStage<1, [A8_NPipe], 0>,
1015                               InstrStage<2, [A8_NLSPipe]>], [4, 2, 2, 3, 1]>,
1016  InstrItinData<IIC_VTB4,     [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
1017                               InstrStage<1, [A8_NLSPipe]>,
1018                               InstrStage<1, [A8_NPipe], 0>,
1019                               InstrStage<2, [A8_NLSPipe]>],[4, 2, 2, 3, 3, 1]>,
1020  //
1021  // VTBX
1022  InstrItinData<IIC_VTBX1,    [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
1023                               InstrStage<2, [A8_NLSPipe]>], [3, 1, 2, 1]>,
1024  InstrItinData<IIC_VTBX2,    [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
1025                               InstrStage<2, [A8_NLSPipe]>], [3, 1, 2, 2, 1]>,
1026  InstrItinData<IIC_VTBX3,    [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
1027                               InstrStage<1, [A8_NLSPipe]>,
1028                               InstrStage<1, [A8_NPipe], 0>,
1029                               InstrStage<2, [A8_NLSPipe]>],[4, 1, 2, 2, 3, 1]>,
1030  InstrItinData<IIC_VTBX4,    [InstrStage<1, [A8_Pipe0, A8_Pipe1], 0>,
1031                               InstrStage<1, [A8_NLSPipe]>,
1032                               InstrStage<1, [A8_NPipe], 0>,
1033                            InstrStage<2, [A8_NLSPipe]>], [4, 1, 2, 2, 3, 3, 1]>
1034]>;
1035