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