xref: /freebsd/contrib/llvm-project/llvm/lib/Target/ARM/ARMSchedule.td (revision 0b57cec536236d46e3dba9bd041533462f33dbb7)
1*0b57cec5SDimitry Andric//===-- ARMSchedule.td - ARM Scheduling Definitions --------*- tablegen -*-===//
2*0b57cec5SDimitry Andric//
3*0b57cec5SDimitry Andric// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*0b57cec5SDimitry Andric// See https://llvm.org/LICENSE.txt for license information.
5*0b57cec5SDimitry Andric// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*0b57cec5SDimitry Andric//
7*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
8*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
9*0b57cec5SDimitry Andric// Instruction scheduling annotations for in-order and out-of-order CPUs.
10*0b57cec5SDimitry Andric// These annotations are independent of the itinerary class defined below.
11*0b57cec5SDimitry Andric// Here we define the subtarget independent read/write per-operand resources.
12*0b57cec5SDimitry Andric// The subtarget schedule definitions will then map these to the subtarget's
13*0b57cec5SDimitry Andric// resource usages.
14*0b57cec5SDimitry Andric// For example:
15*0b57cec5SDimitry Andric// The instruction cycle timings table might contain an entry for an operation
16*0b57cec5SDimitry Andric// like the following:
17*0b57cec5SDimitry Andric// Rd <- ADD Rn, Rm, <shift> Rs
18*0b57cec5SDimitry Andric//  Uops | Latency from register | Uops - resource requirements - latency
19*0b57cec5SDimitry Andric//  2    | Rn: 1 Rm: 4 Rs: 4     | uop T0, Rm, Rs - P01 - 3
20*0b57cec5SDimitry Andric//       |                       | uopc Rd, Rn, T0 -  P01 - 1
21*0b57cec5SDimitry Andric// This is telling us that the result will be available in destination register
22*0b57cec5SDimitry Andric// Rd after a minimum of three cycles after the result in Rm and Rs is available
23*0b57cec5SDimitry Andric// and one cycle after the result in Rn is available. The micro-ops can execute
24*0b57cec5SDimitry Andric// on resource P01.
25*0b57cec5SDimitry Andric// To model this, we need to express that we need to dispatch two micro-ops,
26*0b57cec5SDimitry Andric// that the resource P01 is needed and that the latency to Rn is different than
27*0b57cec5SDimitry Andric// the latency to Rm and Rs. The scheduler can decrease Rn's producer latency by
28*0b57cec5SDimitry Andric// two.
29*0b57cec5SDimitry Andric// We will do this by assigning (abstract) resources to register defs/uses.
30*0b57cec5SDimitry Andric// ARMSchedule.td:
31*0b57cec5SDimitry Andric//   def WriteALUsr : SchedWrite;
32*0b57cec5SDimitry Andric//   def ReadAdvanceALUsr : ScheRead;
33*0b57cec5SDimitry Andric//
34*0b57cec5SDimitry Andric// ARMInstrInfo.td:
35*0b57cec5SDimitry Andric//   def ADDrs : I<>, Sched<[WriteALUsr, ReadAdvanceALUsr, ReadDefault,
36*0b57cec5SDimitry Andric//                           ReadDefault]> { ...}
37*0b57cec5SDimitry Andric// ReadAdvance read resources allow us to define "pipeline by-passes" or
38*0b57cec5SDimitry Andric// shorter latencies to certain registers as needed in the example above.
39*0b57cec5SDimitry Andric// The "ReadDefault" can be omitted.
40*0b57cec5SDimitry Andric// Next, the subtarget td file assigns resources to the abstract resources
41*0b57cec5SDimitry Andric// defined here.
42*0b57cec5SDimitry Andric// ARMScheduleSubtarget.td:
43*0b57cec5SDimitry Andric//  // Resources.
44*0b57cec5SDimitry Andric//  def P01 : ProcResource<3>; // ALU unit (3 of it).
45*0b57cec5SDimitry Andric//  ...
46*0b57cec5SDimitry Andric//  // Resource usages.
47*0b57cec5SDimitry Andric//  def : WriteRes<WriteALUsr, [P01, P01]> {
48*0b57cec5SDimitry Andric//    Latency = 4; // Latency of 4.
49*0b57cec5SDimitry Andric//    NumMicroOps = 2; // Dispatch 2 micro-ops.
50*0b57cec5SDimitry Andric//    // The two instances of resource P01 are occupied for one cycle. It is one
51*0b57cec5SDimitry Andric//    // cycle because these resources happen to be pipelined.
52*0b57cec5SDimitry Andric//    ResourceCycles = [1, 1];
53*0b57cec5SDimitry Andric//  }
54*0b57cec5SDimitry Andric//  def : ReadAdvance<ReadAdvanceALUsr, 3>;
55*0b57cec5SDimitry Andric
56*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
57*0b57cec5SDimitry Andric// Sched definitions for integer pipeline instructions
58*0b57cec5SDimitry Andric//
59*0b57cec5SDimitry Andric// Basic ALU operation.
60*0b57cec5SDimitry Andricdef WriteALU : SchedWrite;
61*0b57cec5SDimitry Andricdef ReadALU : SchedRead;
62*0b57cec5SDimitry Andric
63*0b57cec5SDimitry Andric// Basic ALU with shifts.
64*0b57cec5SDimitry Andricdef WriteALUsi : SchedWrite; // Shift by immediate.
65*0b57cec5SDimitry Andricdef WriteALUsr : SchedWrite; // Shift by register.
66*0b57cec5SDimitry Andricdef WriteALUSsr : SchedWrite; // Shift by register (flag setting).
67*0b57cec5SDimitry Andricdef ReadALUsr : SchedRead; // Some operands are read later.
68*0b57cec5SDimitry Andric
69*0b57cec5SDimitry Andric// Compares.
70*0b57cec5SDimitry Andricdef WriteCMP : SchedWrite;
71*0b57cec5SDimitry Andricdef WriteCMPsi : SchedWrite;
72*0b57cec5SDimitry Andricdef WriteCMPsr : SchedWrite;
73*0b57cec5SDimitry Andric
74*0b57cec5SDimitry Andric// Multiplys.
75*0b57cec5SDimitry Andricdef WriteMUL16   : SchedWrite; // 16-bit multiply.
76*0b57cec5SDimitry Andricdef WriteMUL32   : SchedWrite; // 32-bit multiply.
77*0b57cec5SDimitry Andricdef WriteMUL64Lo : SchedWrite; // 64-bit result. Low reg.
78*0b57cec5SDimitry Andricdef WriteMUL64Hi : SchedWrite; // 64-bit result. High reg.
79*0b57cec5SDimitry Andricdef ReadMUL  : SchedRead;
80*0b57cec5SDimitry Andric
81*0b57cec5SDimitry Andric// Multiply-accumulates.
82*0b57cec5SDimitry Andricdef WriteMAC16   : SchedWrite; // 16-bit mac.
83*0b57cec5SDimitry Andricdef WriteMAC32   : SchedWrite; // 32-bit mac.
84*0b57cec5SDimitry Andricdef WriteMAC64Lo : SchedWrite; // 64-bit mac. Low reg.
85*0b57cec5SDimitry Andricdef WriteMAC64Hi : SchedWrite; // 64-bit mac. High reg.
86*0b57cec5SDimitry Andricdef ReadMAC : SchedRead;
87*0b57cec5SDimitry Andric
88*0b57cec5SDimitry Andric// Divisions.
89*0b57cec5SDimitry Andricdef WriteDIV : SchedWrite;
90*0b57cec5SDimitry Andric
91*0b57cec5SDimitry Andric// Loads/Stores.
92*0b57cec5SDimitry Andricdef WriteLd : SchedWrite;
93*0b57cec5SDimitry Andricdef WritePreLd : SchedWrite;
94*0b57cec5SDimitry Andricdef WriteST : SchedWrite;
95*0b57cec5SDimitry Andric
96*0b57cec5SDimitry Andric// Branches.
97*0b57cec5SDimitry Andricdef WriteBr : SchedWrite;
98*0b57cec5SDimitry Andricdef WriteBrL : SchedWrite;
99*0b57cec5SDimitry Andricdef WriteBrTbl : SchedWrite;
100*0b57cec5SDimitry Andric
101*0b57cec5SDimitry Andric// Noop.
102*0b57cec5SDimitry Andricdef WriteNoop : SchedWrite;
103*0b57cec5SDimitry Andric
104*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
105*0b57cec5SDimitry Andric// Sched definitions for floating-point and neon instructions
106*0b57cec5SDimitry Andric//
107*0b57cec5SDimitry Andric// Floating point conversions
108*0b57cec5SDimitry Andricdef WriteFPCVT : SchedWrite;
109*0b57cec5SDimitry Andricdef WriteFPMOV : SchedWrite; // FP -> GPR and vice-versa
110*0b57cec5SDimitry Andric
111*0b57cec5SDimitry Andric// ALU operations (32/64-bit)
112*0b57cec5SDimitry Andricdef WriteFPALU32 : SchedWrite;
113*0b57cec5SDimitry Andricdef WriteFPALU64 : SchedWrite;
114*0b57cec5SDimitry Andric
115*0b57cec5SDimitry Andric// Multiplication
116*0b57cec5SDimitry Andricdef WriteFPMUL32 : SchedWrite;
117*0b57cec5SDimitry Andricdef WriteFPMUL64 : SchedWrite;
118*0b57cec5SDimitry Andricdef ReadFPMUL    : SchedRead; // multiplier read
119*0b57cec5SDimitry Andricdef ReadFPMAC    : SchedRead; // accumulator read
120*0b57cec5SDimitry Andric
121*0b57cec5SDimitry Andric// Multiply-accumulate
122*0b57cec5SDimitry Andricdef WriteFPMAC32 : SchedWrite;
123*0b57cec5SDimitry Andricdef WriteFPMAC64 : SchedWrite;
124*0b57cec5SDimitry Andric
125*0b57cec5SDimitry Andric// Division
126*0b57cec5SDimitry Andricdef WriteFPDIV32 : SchedWrite;
127*0b57cec5SDimitry Andricdef WriteFPDIV64 : SchedWrite;
128*0b57cec5SDimitry Andric
129*0b57cec5SDimitry Andric// Square-root
130*0b57cec5SDimitry Andricdef WriteFPSQRT32 : SchedWrite;
131*0b57cec5SDimitry Andricdef WriteFPSQRT64 : SchedWrite;
132*0b57cec5SDimitry Andric
133*0b57cec5SDimitry Andric// Vector load and stores
134*0b57cec5SDimitry Andricdef WriteVLD1 : SchedWrite;
135*0b57cec5SDimitry Andricdef WriteVLD2 : SchedWrite;
136*0b57cec5SDimitry Andricdef WriteVLD3 : SchedWrite;
137*0b57cec5SDimitry Andricdef WriteVLD4 : SchedWrite;
138*0b57cec5SDimitry Andricdef WriteVST1 : SchedWrite;
139*0b57cec5SDimitry Andricdef WriteVST2 : SchedWrite;
140*0b57cec5SDimitry Andricdef WriteVST3 : SchedWrite;
141*0b57cec5SDimitry Andricdef WriteVST4 : SchedWrite;
142*0b57cec5SDimitry Andric
143*0b57cec5SDimitry Andric
144*0b57cec5SDimitry Andric// Define TII for use in SchedVariant Predicates.
145*0b57cec5SDimitry Andricdef : PredicateProlog<[{
146*0b57cec5SDimitry Andric  const ARMBaseInstrInfo *TII =
147*0b57cec5SDimitry Andric    static_cast<const ARMBaseInstrInfo*>(SchedModel->getInstrInfo());
148*0b57cec5SDimitry Andric  (void)TII;
149*0b57cec5SDimitry Andric  const ARMSubtarget *STI =
150*0b57cec5SDimitry Andric    static_cast<const ARMSubtarget*>(SchedModel->getSubtargetInfo());
151*0b57cec5SDimitry Andric  (void)STI;
152*0b57cec5SDimitry Andric}]>;
153*0b57cec5SDimitry Andric
154*0b57cec5SDimitry Andricdef IsPredicatedPred : SchedPredicate<[{TII->isPredicated(*MI)}]>;
155*0b57cec5SDimitry Andric
156*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
157*0b57cec5SDimitry Andric// Instruction Itinerary classes used for ARM
158*0b57cec5SDimitry Andric//
159*0b57cec5SDimitry Andricdef IIC_iALUx      : InstrItinClass;
160*0b57cec5SDimitry Andricdef IIC_iALUi      : InstrItinClass;
161*0b57cec5SDimitry Andricdef IIC_iALUr      : InstrItinClass;
162*0b57cec5SDimitry Andricdef IIC_iALUsi     : InstrItinClass;
163*0b57cec5SDimitry Andricdef IIC_iALUsir    : InstrItinClass;
164*0b57cec5SDimitry Andricdef IIC_iALUsr     : InstrItinClass;
165*0b57cec5SDimitry Andricdef IIC_iBITi      : InstrItinClass;
166*0b57cec5SDimitry Andricdef IIC_iBITr      : InstrItinClass;
167*0b57cec5SDimitry Andricdef IIC_iBITsi     : InstrItinClass;
168*0b57cec5SDimitry Andricdef IIC_iBITsr     : InstrItinClass;
169*0b57cec5SDimitry Andricdef IIC_iUNAr      : InstrItinClass;
170*0b57cec5SDimitry Andricdef IIC_iUNAsi     : InstrItinClass;
171*0b57cec5SDimitry Andricdef IIC_iEXTr      : InstrItinClass;
172*0b57cec5SDimitry Andricdef IIC_iEXTAr     : InstrItinClass;
173*0b57cec5SDimitry Andricdef IIC_iEXTAsr    : InstrItinClass;
174*0b57cec5SDimitry Andricdef IIC_iCMPi      : InstrItinClass;
175*0b57cec5SDimitry Andricdef IIC_iCMPr      : InstrItinClass;
176*0b57cec5SDimitry Andricdef IIC_iCMPsi     : InstrItinClass;
177*0b57cec5SDimitry Andricdef IIC_iCMPsr     : InstrItinClass;
178*0b57cec5SDimitry Andricdef IIC_iTSTi      : InstrItinClass;
179*0b57cec5SDimitry Andricdef IIC_iTSTr      : InstrItinClass;
180*0b57cec5SDimitry Andricdef IIC_iTSTsi     : InstrItinClass;
181*0b57cec5SDimitry Andricdef IIC_iTSTsr     : InstrItinClass;
182*0b57cec5SDimitry Andricdef IIC_iMOVi      : InstrItinClass;
183*0b57cec5SDimitry Andricdef IIC_iMOVr      : InstrItinClass;
184*0b57cec5SDimitry Andricdef IIC_iMOVsi     : InstrItinClass;
185*0b57cec5SDimitry Andricdef IIC_iMOVsr     : InstrItinClass;
186*0b57cec5SDimitry Andricdef IIC_iMOVix2    : InstrItinClass;
187*0b57cec5SDimitry Andricdef IIC_iMOVix2addpc : InstrItinClass;
188*0b57cec5SDimitry Andricdef IIC_iMOVix2ld  : InstrItinClass;
189*0b57cec5SDimitry Andricdef IIC_iMVNi      : InstrItinClass;
190*0b57cec5SDimitry Andricdef IIC_iMVNr      : InstrItinClass;
191*0b57cec5SDimitry Andricdef IIC_iMVNsi     : InstrItinClass;
192*0b57cec5SDimitry Andricdef IIC_iMVNsr     : InstrItinClass;
193*0b57cec5SDimitry Andricdef IIC_iCMOVi     : InstrItinClass;
194*0b57cec5SDimitry Andricdef IIC_iCMOVr     : InstrItinClass;
195*0b57cec5SDimitry Andricdef IIC_iCMOVsi    : InstrItinClass;
196*0b57cec5SDimitry Andricdef IIC_iCMOVsr    : InstrItinClass;
197*0b57cec5SDimitry Andricdef IIC_iCMOVix2   : InstrItinClass;
198*0b57cec5SDimitry Andricdef IIC_iMUL16     : InstrItinClass;
199*0b57cec5SDimitry Andricdef IIC_iMAC16     : InstrItinClass;
200*0b57cec5SDimitry Andricdef IIC_iMUL32     : InstrItinClass;
201*0b57cec5SDimitry Andricdef IIC_iMAC32     : InstrItinClass;
202*0b57cec5SDimitry Andricdef IIC_iMUL64     : InstrItinClass;
203*0b57cec5SDimitry Andricdef IIC_iMAC64     : InstrItinClass;
204*0b57cec5SDimitry Andricdef IIC_iDIV     : InstrItinClass;
205*0b57cec5SDimitry Andricdef IIC_iLoad_i    : InstrItinClass;
206*0b57cec5SDimitry Andricdef IIC_iLoad_r    : InstrItinClass;
207*0b57cec5SDimitry Andricdef IIC_iLoad_si   : InstrItinClass;
208*0b57cec5SDimitry Andricdef IIC_iLoad_iu   : InstrItinClass;
209*0b57cec5SDimitry Andricdef IIC_iLoad_ru   : InstrItinClass;
210*0b57cec5SDimitry Andricdef IIC_iLoad_siu  : InstrItinClass;
211*0b57cec5SDimitry Andricdef IIC_iLoad_bh_i   : InstrItinClass;
212*0b57cec5SDimitry Andricdef IIC_iLoad_bh_r   : InstrItinClass;
213*0b57cec5SDimitry Andricdef IIC_iLoad_bh_si  : InstrItinClass;
214*0b57cec5SDimitry Andricdef IIC_iLoad_bh_iu  : InstrItinClass;
215*0b57cec5SDimitry Andricdef IIC_iLoad_bh_ru  : InstrItinClass;
216*0b57cec5SDimitry Andricdef IIC_iLoad_bh_siu : InstrItinClass;
217*0b57cec5SDimitry Andricdef IIC_iLoad_d_i  : InstrItinClass;
218*0b57cec5SDimitry Andricdef IIC_iLoad_d_r  : InstrItinClass;
219*0b57cec5SDimitry Andricdef IIC_iLoad_d_ru : InstrItinClass;
220*0b57cec5SDimitry Andricdef IIC_iLoad_m    : InstrItinClass;
221*0b57cec5SDimitry Andricdef IIC_iLoad_mu   : InstrItinClass;
222*0b57cec5SDimitry Andricdef IIC_iLoad_mBr  : InstrItinClass;
223*0b57cec5SDimitry Andricdef IIC_iPop       : InstrItinClass;
224*0b57cec5SDimitry Andricdef IIC_iPop_Br    : InstrItinClass;
225*0b57cec5SDimitry Andricdef IIC_iLoadiALU  : InstrItinClass;
226*0b57cec5SDimitry Andricdef IIC_iStore_i   : InstrItinClass;
227*0b57cec5SDimitry Andricdef IIC_iStore_r   : InstrItinClass;
228*0b57cec5SDimitry Andricdef IIC_iStore_si  : InstrItinClass;
229*0b57cec5SDimitry Andricdef IIC_iStore_iu  : InstrItinClass;
230*0b57cec5SDimitry Andricdef IIC_iStore_ru  : InstrItinClass;
231*0b57cec5SDimitry Andricdef IIC_iStore_siu : InstrItinClass;
232*0b57cec5SDimitry Andricdef IIC_iStore_bh_i   : InstrItinClass;
233*0b57cec5SDimitry Andricdef IIC_iStore_bh_r   : InstrItinClass;
234*0b57cec5SDimitry Andricdef IIC_iStore_bh_si  : InstrItinClass;
235*0b57cec5SDimitry Andricdef IIC_iStore_bh_iu  : InstrItinClass;
236*0b57cec5SDimitry Andricdef IIC_iStore_bh_ru  : InstrItinClass;
237*0b57cec5SDimitry Andricdef IIC_iStore_bh_siu : InstrItinClass;
238*0b57cec5SDimitry Andricdef IIC_iStore_d_i   : InstrItinClass;
239*0b57cec5SDimitry Andricdef IIC_iStore_d_r   : InstrItinClass;
240*0b57cec5SDimitry Andricdef IIC_iStore_d_ru  : InstrItinClass;
241*0b57cec5SDimitry Andricdef IIC_iStore_m   : InstrItinClass;
242*0b57cec5SDimitry Andricdef IIC_iStore_mu  : InstrItinClass;
243*0b57cec5SDimitry Andricdef IIC_Preload    : InstrItinClass;
244*0b57cec5SDimitry Andricdef IIC_Br         : InstrItinClass;
245*0b57cec5SDimitry Andricdef IIC_fpSTAT     : InstrItinClass;
246*0b57cec5SDimitry Andricdef IIC_fpUNA16    : InstrItinClass;
247*0b57cec5SDimitry Andricdef IIC_fpUNA32    : InstrItinClass;
248*0b57cec5SDimitry Andricdef IIC_fpUNA64    : InstrItinClass;
249*0b57cec5SDimitry Andricdef IIC_fpCMP16    : InstrItinClass;
250*0b57cec5SDimitry Andricdef IIC_fpCMP32    : InstrItinClass;
251*0b57cec5SDimitry Andricdef IIC_fpCMP64    : InstrItinClass;
252*0b57cec5SDimitry Andricdef IIC_fpCVTSD    : InstrItinClass;
253*0b57cec5SDimitry Andricdef IIC_fpCVTDS    : InstrItinClass;
254*0b57cec5SDimitry Andricdef IIC_fpCVTSH    : InstrItinClass;
255*0b57cec5SDimitry Andricdef IIC_fpCVTHS    : InstrItinClass;
256*0b57cec5SDimitry Andricdef IIC_fpCVTIH    : InstrItinClass;
257*0b57cec5SDimitry Andricdef IIC_fpCVTIS    : InstrItinClass;
258*0b57cec5SDimitry Andricdef IIC_fpCVTID    : InstrItinClass;
259*0b57cec5SDimitry Andricdef IIC_fpCVTHI    : InstrItinClass;
260*0b57cec5SDimitry Andricdef IIC_fpCVTSI    : InstrItinClass;
261*0b57cec5SDimitry Andricdef IIC_fpCVTDI    : InstrItinClass;
262*0b57cec5SDimitry Andricdef IIC_fpMOVIS    : InstrItinClass;
263*0b57cec5SDimitry Andricdef IIC_fpMOVID    : InstrItinClass;
264*0b57cec5SDimitry Andricdef IIC_fpMOVSI    : InstrItinClass;
265*0b57cec5SDimitry Andricdef IIC_fpMOVDI    : InstrItinClass;
266*0b57cec5SDimitry Andricdef IIC_fpALU16    : InstrItinClass;
267*0b57cec5SDimitry Andricdef IIC_fpALU32    : InstrItinClass;
268*0b57cec5SDimitry Andricdef IIC_fpALU64    : InstrItinClass;
269*0b57cec5SDimitry Andricdef IIC_fpMUL16    : InstrItinClass;
270*0b57cec5SDimitry Andricdef IIC_fpMUL32    : InstrItinClass;
271*0b57cec5SDimitry Andricdef IIC_fpMUL64    : InstrItinClass;
272*0b57cec5SDimitry Andricdef IIC_fpMAC16    : InstrItinClass;
273*0b57cec5SDimitry Andricdef IIC_fpMAC32    : InstrItinClass;
274*0b57cec5SDimitry Andricdef IIC_fpMAC64    : InstrItinClass;
275*0b57cec5SDimitry Andricdef IIC_fpFMAC16   : InstrItinClass;
276*0b57cec5SDimitry Andricdef IIC_fpFMAC32   : InstrItinClass;
277*0b57cec5SDimitry Andricdef IIC_fpFMAC64   : InstrItinClass;
278*0b57cec5SDimitry Andricdef IIC_fpDIV16    : InstrItinClass;
279*0b57cec5SDimitry Andricdef IIC_fpDIV32    : InstrItinClass;
280*0b57cec5SDimitry Andricdef IIC_fpDIV64    : InstrItinClass;
281*0b57cec5SDimitry Andricdef IIC_fpSQRT16   : InstrItinClass;
282*0b57cec5SDimitry Andricdef IIC_fpSQRT32   : InstrItinClass;
283*0b57cec5SDimitry Andricdef IIC_fpSQRT64   : InstrItinClass;
284*0b57cec5SDimitry Andricdef IIC_fpLoad16   : InstrItinClass;
285*0b57cec5SDimitry Andricdef IIC_fpLoad32   : InstrItinClass;
286*0b57cec5SDimitry Andricdef IIC_fpLoad64   : InstrItinClass;
287*0b57cec5SDimitry Andricdef IIC_fpLoad_m   : InstrItinClass;
288*0b57cec5SDimitry Andricdef IIC_fpLoad_mu  : InstrItinClass;
289*0b57cec5SDimitry Andricdef IIC_fpStore16  : InstrItinClass;
290*0b57cec5SDimitry Andricdef IIC_fpStore32  : InstrItinClass;
291*0b57cec5SDimitry Andricdef IIC_fpStore64  : InstrItinClass;
292*0b57cec5SDimitry Andricdef IIC_fpStore_m  : InstrItinClass;
293*0b57cec5SDimitry Andricdef IIC_fpStore_mu : InstrItinClass;
294*0b57cec5SDimitry Andricdef IIC_VLD1       : InstrItinClass;
295*0b57cec5SDimitry Andricdef IIC_VLD1x2     : InstrItinClass;
296*0b57cec5SDimitry Andricdef IIC_VLD1x3     : InstrItinClass;
297*0b57cec5SDimitry Andricdef IIC_VLD1x4     : InstrItinClass;
298*0b57cec5SDimitry Andricdef IIC_VLD1u      : InstrItinClass;
299*0b57cec5SDimitry Andricdef IIC_VLD1x2u    : InstrItinClass;
300*0b57cec5SDimitry Andricdef IIC_VLD1x3u    : InstrItinClass;
301*0b57cec5SDimitry Andricdef IIC_VLD1x4u    : InstrItinClass;
302*0b57cec5SDimitry Andricdef IIC_VLD1ln     : InstrItinClass;
303*0b57cec5SDimitry Andricdef IIC_VLD1lnu    : InstrItinClass;
304*0b57cec5SDimitry Andricdef IIC_VLD1dup    : InstrItinClass;
305*0b57cec5SDimitry Andricdef IIC_VLD1dupu   : InstrItinClass;
306*0b57cec5SDimitry Andricdef IIC_VLD2       : InstrItinClass;
307*0b57cec5SDimitry Andricdef IIC_VLD2x2     : InstrItinClass;
308*0b57cec5SDimitry Andricdef IIC_VLD2u      : InstrItinClass;
309*0b57cec5SDimitry Andricdef IIC_VLD2x2u    : InstrItinClass;
310*0b57cec5SDimitry Andricdef IIC_VLD2ln     : InstrItinClass;
311*0b57cec5SDimitry Andricdef IIC_VLD2lnu    : InstrItinClass;
312*0b57cec5SDimitry Andricdef IIC_VLD2dup    : InstrItinClass;
313*0b57cec5SDimitry Andricdef IIC_VLD2dupu   : InstrItinClass;
314*0b57cec5SDimitry Andricdef IIC_VLD3       : InstrItinClass;
315*0b57cec5SDimitry Andricdef IIC_VLD3ln     : InstrItinClass;
316*0b57cec5SDimitry Andricdef IIC_VLD3u      : InstrItinClass;
317*0b57cec5SDimitry Andricdef IIC_VLD3lnu    : InstrItinClass;
318*0b57cec5SDimitry Andricdef IIC_VLD3dup    : InstrItinClass;
319*0b57cec5SDimitry Andricdef IIC_VLD3dupu   : InstrItinClass;
320*0b57cec5SDimitry Andricdef IIC_VLD4       : InstrItinClass;
321*0b57cec5SDimitry Andricdef IIC_VLD4ln     : InstrItinClass;
322*0b57cec5SDimitry Andricdef IIC_VLD4u      : InstrItinClass;
323*0b57cec5SDimitry Andricdef IIC_VLD4lnu    : InstrItinClass;
324*0b57cec5SDimitry Andricdef IIC_VLD4dup    : InstrItinClass;
325*0b57cec5SDimitry Andricdef IIC_VLD4dupu   : InstrItinClass;
326*0b57cec5SDimitry Andricdef IIC_VST1       : InstrItinClass;
327*0b57cec5SDimitry Andricdef IIC_VST1x2     : InstrItinClass;
328*0b57cec5SDimitry Andricdef IIC_VST1x3     : InstrItinClass;
329*0b57cec5SDimitry Andricdef IIC_VST1x4     : InstrItinClass;
330*0b57cec5SDimitry Andricdef IIC_VST1u      : InstrItinClass;
331*0b57cec5SDimitry Andricdef IIC_VST1x2u    : InstrItinClass;
332*0b57cec5SDimitry Andricdef IIC_VST1x3u    : InstrItinClass;
333*0b57cec5SDimitry Andricdef IIC_VST1x4u    : InstrItinClass;
334*0b57cec5SDimitry Andricdef IIC_VST1ln     : InstrItinClass;
335*0b57cec5SDimitry Andricdef IIC_VST1lnu    : InstrItinClass;
336*0b57cec5SDimitry Andricdef IIC_VST2       : InstrItinClass;
337*0b57cec5SDimitry Andricdef IIC_VST2x2     : InstrItinClass;
338*0b57cec5SDimitry Andricdef IIC_VST2u      : InstrItinClass;
339*0b57cec5SDimitry Andricdef IIC_VST2x2u    : InstrItinClass;
340*0b57cec5SDimitry Andricdef IIC_VST2ln     : InstrItinClass;
341*0b57cec5SDimitry Andricdef IIC_VST2lnu    : InstrItinClass;
342*0b57cec5SDimitry Andricdef IIC_VST3       : InstrItinClass;
343*0b57cec5SDimitry Andricdef IIC_VST3u      : InstrItinClass;
344*0b57cec5SDimitry Andricdef IIC_VST3ln     : InstrItinClass;
345*0b57cec5SDimitry Andricdef IIC_VST3lnu    : InstrItinClass;
346*0b57cec5SDimitry Andricdef IIC_VST4       : InstrItinClass;
347*0b57cec5SDimitry Andricdef IIC_VST4u      : InstrItinClass;
348*0b57cec5SDimitry Andricdef IIC_VST4ln     : InstrItinClass;
349*0b57cec5SDimitry Andricdef IIC_VST4lnu    : InstrItinClass;
350*0b57cec5SDimitry Andricdef IIC_VUNAD      : InstrItinClass;
351*0b57cec5SDimitry Andricdef IIC_VUNAQ      : InstrItinClass;
352*0b57cec5SDimitry Andricdef IIC_VBIND      : InstrItinClass;
353*0b57cec5SDimitry Andricdef IIC_VBINQ      : InstrItinClass;
354*0b57cec5SDimitry Andricdef IIC_VPBIND     : InstrItinClass;
355*0b57cec5SDimitry Andricdef IIC_VFMULD     : InstrItinClass;
356*0b57cec5SDimitry Andricdef IIC_VFMULQ     : InstrItinClass;
357*0b57cec5SDimitry Andricdef IIC_VMOV       : InstrItinClass;
358*0b57cec5SDimitry Andricdef IIC_VMOVImm    : InstrItinClass;
359*0b57cec5SDimitry Andricdef IIC_VMOVD      : InstrItinClass;
360*0b57cec5SDimitry Andricdef IIC_VMOVQ      : InstrItinClass;
361*0b57cec5SDimitry Andricdef IIC_VMOVIS     : InstrItinClass;
362*0b57cec5SDimitry Andricdef IIC_VMOVID     : InstrItinClass;
363*0b57cec5SDimitry Andricdef IIC_VMOVISL    : InstrItinClass;
364*0b57cec5SDimitry Andricdef IIC_VMOVSI     : InstrItinClass;
365*0b57cec5SDimitry Andricdef IIC_VMOVDI     : InstrItinClass;
366*0b57cec5SDimitry Andricdef IIC_VMOVN      : InstrItinClass;
367*0b57cec5SDimitry Andricdef IIC_VPERMD     : InstrItinClass;
368*0b57cec5SDimitry Andricdef IIC_VPERMQ     : InstrItinClass;
369*0b57cec5SDimitry Andricdef IIC_VPERMQ3    : InstrItinClass;
370*0b57cec5SDimitry Andricdef IIC_VMACD      : InstrItinClass;
371*0b57cec5SDimitry Andricdef IIC_VMACQ      : InstrItinClass;
372*0b57cec5SDimitry Andricdef IIC_VFMACD     : InstrItinClass;
373*0b57cec5SDimitry Andricdef IIC_VFMACQ     : InstrItinClass;
374*0b57cec5SDimitry Andricdef IIC_VRECSD     : InstrItinClass;
375*0b57cec5SDimitry Andricdef IIC_VRECSQ     : InstrItinClass;
376*0b57cec5SDimitry Andricdef IIC_VCNTiD     : InstrItinClass;
377*0b57cec5SDimitry Andricdef IIC_VCNTiQ     : InstrItinClass;
378*0b57cec5SDimitry Andricdef IIC_VUNAiD     : InstrItinClass;
379*0b57cec5SDimitry Andricdef IIC_VUNAiQ     : InstrItinClass;
380*0b57cec5SDimitry Andricdef IIC_VQUNAiD    : InstrItinClass;
381*0b57cec5SDimitry Andricdef IIC_VQUNAiQ    : InstrItinClass;
382*0b57cec5SDimitry Andricdef IIC_VBINiD     : InstrItinClass;
383*0b57cec5SDimitry Andricdef IIC_VBINiQ     : InstrItinClass;
384*0b57cec5SDimitry Andricdef IIC_VSUBiD     : InstrItinClass;
385*0b57cec5SDimitry Andricdef IIC_VSUBiQ     : InstrItinClass;
386*0b57cec5SDimitry Andricdef IIC_VBINi4D    : InstrItinClass;
387*0b57cec5SDimitry Andricdef IIC_VBINi4Q    : InstrItinClass;
388*0b57cec5SDimitry Andricdef IIC_VSUBi4D    : InstrItinClass;
389*0b57cec5SDimitry Andricdef IIC_VSUBi4Q    : InstrItinClass;
390*0b57cec5SDimitry Andricdef IIC_VABAD      : InstrItinClass;
391*0b57cec5SDimitry Andricdef IIC_VABAQ      : InstrItinClass;
392*0b57cec5SDimitry Andricdef IIC_VSHLiD     : InstrItinClass;
393*0b57cec5SDimitry Andricdef IIC_VSHLiQ     : InstrItinClass;
394*0b57cec5SDimitry Andricdef IIC_VSHLi4D    : InstrItinClass;
395*0b57cec5SDimitry Andricdef IIC_VSHLi4Q    : InstrItinClass;
396*0b57cec5SDimitry Andricdef IIC_VPALiD     : InstrItinClass;
397*0b57cec5SDimitry Andricdef IIC_VPALiQ     : InstrItinClass;
398*0b57cec5SDimitry Andricdef IIC_VMULi16D   : InstrItinClass;
399*0b57cec5SDimitry Andricdef IIC_VMULi32D   : InstrItinClass;
400*0b57cec5SDimitry Andricdef IIC_VMULi16Q   : InstrItinClass;
401*0b57cec5SDimitry Andricdef IIC_VMULi32Q   : InstrItinClass;
402*0b57cec5SDimitry Andricdef IIC_VMACi16D   : InstrItinClass;
403*0b57cec5SDimitry Andricdef IIC_VMACi32D   : InstrItinClass;
404*0b57cec5SDimitry Andricdef IIC_VMACi16Q   : InstrItinClass;
405*0b57cec5SDimitry Andricdef IIC_VMACi32Q   : InstrItinClass;
406*0b57cec5SDimitry Andricdef IIC_VEXTD      : InstrItinClass;
407*0b57cec5SDimitry Andricdef IIC_VEXTQ      : InstrItinClass;
408*0b57cec5SDimitry Andricdef IIC_VTB1       : InstrItinClass;
409*0b57cec5SDimitry Andricdef IIC_VTB2       : InstrItinClass;
410*0b57cec5SDimitry Andricdef IIC_VTB3       : InstrItinClass;
411*0b57cec5SDimitry Andricdef IIC_VTB4       : InstrItinClass;
412*0b57cec5SDimitry Andricdef IIC_VTBX1      : InstrItinClass;
413*0b57cec5SDimitry Andricdef IIC_VTBX2      : InstrItinClass;
414*0b57cec5SDimitry Andricdef IIC_VTBX3      : InstrItinClass;
415*0b57cec5SDimitry Andricdef IIC_VTBX4      : InstrItinClass;
416*0b57cec5SDimitry Andricdef IIC_VDOTPROD   : InstrItinClass;
417*0b57cec5SDimitry Andric
418*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
419*0b57cec5SDimitry Andric// Processor instruction itineraries.
420*0b57cec5SDimitry Andric
421*0b57cec5SDimitry Andricinclude "ARMScheduleV6.td"
422*0b57cec5SDimitry Andricinclude "ARMScheduleA8.td"
423*0b57cec5SDimitry Andricinclude "ARMScheduleA9.td"
424*0b57cec5SDimitry Andricinclude "ARMScheduleSwift.td"
425*0b57cec5SDimitry Andricinclude "ARMScheduleR52.td"
426*0b57cec5SDimitry Andricinclude "ARMScheduleA57.td"
427*0b57cec5SDimitry Andricinclude "ARMScheduleM4.td"
428