xref: /freebsd/contrib/llvm-project/llvm/lib/Target/ARM/ARMSchedule.td (revision e8d8bef961a50d4dc22501cde4fb9fb0be1b2532)
10b57cec5SDimitry Andric//===-- ARMSchedule.td - ARM Scheduling Definitions --------*- tablegen -*-===//
20b57cec5SDimitry Andric//
30b57cec5SDimitry Andric// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
40b57cec5SDimitry Andric// See https://llvm.org/LICENSE.txt for license information.
50b57cec5SDimitry Andric// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
60b57cec5SDimitry Andric//
70b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
80b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
90b57cec5SDimitry Andric// Instruction scheduling annotations for in-order and out-of-order CPUs.
100b57cec5SDimitry Andric// These annotations are independent of the itinerary class defined below.
110b57cec5SDimitry Andric// Here we define the subtarget independent read/write per-operand resources.
120b57cec5SDimitry Andric// The subtarget schedule definitions will then map these to the subtarget's
130b57cec5SDimitry Andric// resource usages.
140b57cec5SDimitry Andric// For example:
150b57cec5SDimitry Andric// The instruction cycle timings table might contain an entry for an operation
160b57cec5SDimitry Andric// like the following:
170b57cec5SDimitry Andric// Rd <- ADD Rn, Rm, <shift> Rs
180b57cec5SDimitry Andric//  Uops | Latency from register | Uops - resource requirements - latency
190b57cec5SDimitry Andric//  2    | Rn: 1 Rm: 4 Rs: 4     | uop T0, Rm, Rs - P01 - 3
200b57cec5SDimitry Andric//       |                       | uopc Rd, Rn, T0 -  P01 - 1
210b57cec5SDimitry Andric// This is telling us that the result will be available in destination register
220b57cec5SDimitry Andric// Rd after a minimum of three cycles after the result in Rm and Rs is available
230b57cec5SDimitry Andric// and one cycle after the result in Rn is available. The micro-ops can execute
240b57cec5SDimitry Andric// on resource P01.
250b57cec5SDimitry Andric// To model this, we need to express that we need to dispatch two micro-ops,
260b57cec5SDimitry Andric// that the resource P01 is needed and that the latency to Rn is different than
270b57cec5SDimitry Andric// the latency to Rm and Rs. The scheduler can decrease Rn's producer latency by
280b57cec5SDimitry Andric// two.
290b57cec5SDimitry Andric// We will do this by assigning (abstract) resources to register defs/uses.
300b57cec5SDimitry Andric// ARMSchedule.td:
310b57cec5SDimitry Andric//   def WriteALUsr : SchedWrite;
320b57cec5SDimitry Andric//   def ReadAdvanceALUsr : ScheRead;
330b57cec5SDimitry Andric//
340b57cec5SDimitry Andric// ARMInstrInfo.td:
350b57cec5SDimitry Andric//   def ADDrs : I<>, Sched<[WriteALUsr, ReadAdvanceALUsr, ReadDefault,
360b57cec5SDimitry Andric//                           ReadDefault]> { ...}
370b57cec5SDimitry Andric// ReadAdvance read resources allow us to define "pipeline by-passes" or
380b57cec5SDimitry Andric// shorter latencies to certain registers as needed in the example above.
390b57cec5SDimitry Andric// The "ReadDefault" can be omitted.
400b57cec5SDimitry Andric// Next, the subtarget td file assigns resources to the abstract resources
410b57cec5SDimitry Andric// defined here.
420b57cec5SDimitry Andric// ARMScheduleSubtarget.td:
430b57cec5SDimitry Andric//  // Resources.
440b57cec5SDimitry Andric//  def P01 : ProcResource<3>; // ALU unit (3 of it).
450b57cec5SDimitry Andric//  ...
460b57cec5SDimitry Andric//  // Resource usages.
470b57cec5SDimitry Andric//  def : WriteRes<WriteALUsr, [P01, P01]> {
480b57cec5SDimitry Andric//    Latency = 4; // Latency of 4.
490b57cec5SDimitry Andric//    NumMicroOps = 2; // Dispatch 2 micro-ops.
500b57cec5SDimitry Andric//    // The two instances of resource P01 are occupied for one cycle. It is one
510b57cec5SDimitry Andric//    // cycle because these resources happen to be pipelined.
520b57cec5SDimitry Andric//    ResourceCycles = [1, 1];
530b57cec5SDimitry Andric//  }
540b57cec5SDimitry Andric//  def : ReadAdvance<ReadAdvanceALUsr, 3>;
550b57cec5SDimitry Andric
560b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
570b57cec5SDimitry Andric// Sched definitions for integer pipeline instructions
580b57cec5SDimitry Andric//
590b57cec5SDimitry Andric// Basic ALU operation.
600b57cec5SDimitry Andricdef WriteALU : SchedWrite;
610b57cec5SDimitry Andricdef ReadALU : SchedRead;
620b57cec5SDimitry Andric
630b57cec5SDimitry Andric// Basic ALU with shifts.
640b57cec5SDimitry Andricdef WriteALUsi : SchedWrite; // Shift by immediate.
650b57cec5SDimitry Andricdef WriteALUsr : SchedWrite; // Shift by register.
660b57cec5SDimitry Andricdef WriteALUSsr : SchedWrite; // Shift by register (flag setting).
670b57cec5SDimitry Andricdef ReadALUsr : SchedRead; // Some operands are read later.
680b57cec5SDimitry Andric
690b57cec5SDimitry Andric// Compares.
700b57cec5SDimitry Andricdef WriteCMP : SchedWrite;
710b57cec5SDimitry Andricdef WriteCMPsi : SchedWrite;
720b57cec5SDimitry Andricdef WriteCMPsr : SchedWrite;
730b57cec5SDimitry Andric
740b57cec5SDimitry Andric// Multiplys.
750b57cec5SDimitry Andricdef WriteMUL16   : SchedWrite; // 16-bit multiply.
760b57cec5SDimitry Andricdef WriteMUL32   : SchedWrite; // 32-bit multiply.
770b57cec5SDimitry Andricdef WriteMUL64Lo : SchedWrite; // 64-bit result. Low reg.
780b57cec5SDimitry Andricdef WriteMUL64Hi : SchedWrite; // 64-bit result. High reg.
790b57cec5SDimitry Andricdef ReadMUL  : SchedRead;
800b57cec5SDimitry Andric
810b57cec5SDimitry Andric// Multiply-accumulates.
820b57cec5SDimitry Andricdef WriteMAC16   : SchedWrite; // 16-bit mac.
830b57cec5SDimitry Andricdef WriteMAC32   : SchedWrite; // 32-bit mac.
840b57cec5SDimitry Andricdef WriteMAC64Lo : SchedWrite; // 64-bit mac. Low reg.
850b57cec5SDimitry Andricdef WriteMAC64Hi : SchedWrite; // 64-bit mac. High reg.
860b57cec5SDimitry Andricdef ReadMAC : SchedRead;
870b57cec5SDimitry Andric
880b57cec5SDimitry Andric// Divisions.
890b57cec5SDimitry Andricdef WriteDIV : SchedWrite;
900b57cec5SDimitry Andric
910b57cec5SDimitry Andric// Loads/Stores.
920b57cec5SDimitry Andricdef WriteLd : SchedWrite;
930b57cec5SDimitry Andricdef WritePreLd : SchedWrite;
940b57cec5SDimitry Andricdef WriteST : SchedWrite;
950b57cec5SDimitry Andric
960b57cec5SDimitry Andric// Branches.
970b57cec5SDimitry Andricdef WriteBr : SchedWrite;
980b57cec5SDimitry Andricdef WriteBrL : SchedWrite;
990b57cec5SDimitry Andricdef WriteBrTbl : SchedWrite;
1000b57cec5SDimitry Andric
1010b57cec5SDimitry Andric// Noop.
1020b57cec5SDimitry Andricdef WriteNoop : SchedWrite;
1030b57cec5SDimitry Andric
1040b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
1050b57cec5SDimitry Andric// Sched definitions for floating-point and neon instructions
1060b57cec5SDimitry Andric//
1070b57cec5SDimitry Andric// Floating point conversions
1080b57cec5SDimitry Andricdef WriteFPCVT : SchedWrite;
1090b57cec5SDimitry Andricdef WriteFPMOV : SchedWrite; // FP -> GPR and vice-versa
1100b57cec5SDimitry Andric
1110b57cec5SDimitry Andric// ALU operations (32/64-bit)
1120b57cec5SDimitry Andricdef WriteFPALU32 : SchedWrite;
1130b57cec5SDimitry Andricdef WriteFPALU64 : SchedWrite;
1140b57cec5SDimitry Andric
1150b57cec5SDimitry Andric// Multiplication
1160b57cec5SDimitry Andricdef WriteFPMUL32 : SchedWrite;
1170b57cec5SDimitry Andricdef WriteFPMUL64 : SchedWrite;
1180b57cec5SDimitry Andricdef ReadFPMUL    : SchedRead; // multiplier read
1190b57cec5SDimitry Andricdef ReadFPMAC    : SchedRead; // accumulator read
1200b57cec5SDimitry Andric
1210b57cec5SDimitry Andric// Multiply-accumulate
1220b57cec5SDimitry Andricdef WriteFPMAC32 : SchedWrite;
1230b57cec5SDimitry Andricdef WriteFPMAC64 : SchedWrite;
1240b57cec5SDimitry Andric
1250b57cec5SDimitry Andric// Division
1260b57cec5SDimitry Andricdef WriteFPDIV32 : SchedWrite;
1270b57cec5SDimitry Andricdef WriteFPDIV64 : SchedWrite;
1280b57cec5SDimitry Andric
1290b57cec5SDimitry Andric// Square-root
1300b57cec5SDimitry Andricdef WriteFPSQRT32 : SchedWrite;
1310b57cec5SDimitry Andricdef WriteFPSQRT64 : SchedWrite;
1320b57cec5SDimitry Andric
1330b57cec5SDimitry Andric// Vector load and stores
1340b57cec5SDimitry Andricdef WriteVLD1 : SchedWrite;
1350b57cec5SDimitry Andricdef WriteVLD2 : SchedWrite;
1360b57cec5SDimitry Andricdef WriteVLD3 : SchedWrite;
1370b57cec5SDimitry Andricdef WriteVLD4 : SchedWrite;
1380b57cec5SDimitry Andricdef WriteVST1 : SchedWrite;
1390b57cec5SDimitry Andricdef WriteVST2 : SchedWrite;
1400b57cec5SDimitry Andricdef WriteVST3 : SchedWrite;
1410b57cec5SDimitry Andricdef WriteVST4 : SchedWrite;
1420b57cec5SDimitry Andric
1430b57cec5SDimitry Andric
1440b57cec5SDimitry Andric// Define TII for use in SchedVariant Predicates.
1450b57cec5SDimitry Andricdef : PredicateProlog<[{
1460b57cec5SDimitry Andric  const ARMBaseInstrInfo *TII =
1470b57cec5SDimitry Andric    static_cast<const ARMBaseInstrInfo*>(SchedModel->getInstrInfo());
1480b57cec5SDimitry Andric  (void)TII;
1490b57cec5SDimitry Andric  const ARMSubtarget *STI =
1500b57cec5SDimitry Andric    static_cast<const ARMSubtarget*>(SchedModel->getSubtargetInfo());
1510b57cec5SDimitry Andric  (void)STI;
1520b57cec5SDimitry Andric}]>;
1530b57cec5SDimitry Andric
154*e8d8bef9SDimitry Andricdef IsPredicated : CheckFunctionPredicateWithTII<
155*e8d8bef9SDimitry Andric  "ARM_MC::isPredicated",
156*e8d8bef9SDimitry Andric  "isPredicated"
157*e8d8bef9SDimitry Andric>;
158*e8d8bef9SDimitry Andricdef IsPredicatedPred : MCSchedPredicate<IsPredicated>;
159*e8d8bef9SDimitry Andric
160*e8d8bef9SDimitry Andricdef IsCPSRDefined : CheckFunctionPredicateWithTII<
161*e8d8bef9SDimitry Andric  "ARM_MC::isCPSRDefined",
162*e8d8bef9SDimitry Andric  "ARMBaseInstrInfo::isCPSRDefined"
163*e8d8bef9SDimitry Andric>;
164*e8d8bef9SDimitry Andric
165*e8d8bef9SDimitry Andricdef IsCPSRDefinedPred : MCSchedPredicate<IsCPSRDefined>;
166*e8d8bef9SDimitry Andric
167*e8d8bef9SDimitry Andriclet FunctionMapper = "ARM_AM::getAM2ShiftOpc" in {
168*e8d8bef9SDimitry Andric  class CheckAM2NoShift<int n> : CheckImmOperand_s<n, "ARM_AM::no_shift">;
169*e8d8bef9SDimitry Andric  class CheckAM2ShiftLSL<int n> : CheckImmOperand_s<n, "ARM_AM::lsl">;
170*e8d8bef9SDimitry Andric}
171*e8d8bef9SDimitry Andric
172*e8d8bef9SDimitry Andriclet FunctionMapper = "ARM_AM::getAM2Op" in {
173*e8d8bef9SDimitry Andric  class CheckAM2OpAdd<int n> : CheckImmOperand_s<n, "ARM_AM::add"> {}
174*e8d8bef9SDimitry Andric  class CheckAM2OpSub<int n> : CheckImmOperand_s<n, "ARM_AM::sub"> {}
175*e8d8bef9SDimitry Andric}
176*e8d8bef9SDimitry Andric
177*e8d8bef9SDimitry Andriclet FunctionMapper = "ARM_AM::getAM2Offset" in {
178*e8d8bef9SDimitry Andric  class CheckAM2Offset<int n, int of> : CheckImmOperand<n, of> {}
179*e8d8bef9SDimitry Andric}
180*e8d8bef9SDimitry Andric
181*e8d8bef9SDimitry Andricdef IsLDMBaseRegInList : CheckFunctionPredicate<
182*e8d8bef9SDimitry Andric  "ARM_MC::isLDMBaseRegInList", "ARM_MC::isLDMBaseRegInList"
183*e8d8bef9SDimitry Andric>;
184*e8d8bef9SDimitry Andric
185*e8d8bef9SDimitry Andriclet FunctionMapper = "ARM_AM::getAM3Op" in {
186*e8d8bef9SDimitry Andric  class CheckAM3OpSub<int n> : CheckImmOperand_s<n, "ARM_AM::sub"> {}
187*e8d8bef9SDimitry Andric}
188*e8d8bef9SDimitry Andric
189*e8d8bef9SDimitry Andric// LDM, base reg in list
190*e8d8bef9SDimitry Andricdef IsLDMBaseRegInListPred : MCSchedPredicate<IsLDMBaseRegInList>;
191*e8d8bef9SDimitry Andric
192*e8d8bef9SDimitry Andricclass IsRegPCPred<int n> : MCSchedPredicate<CheckRegOperand<n, PC>>;
193*e8d8bef9SDimitry Andric
194*e8d8bef9SDimitry Andricclass BranchWriteRes<int lat, int uops, list<ProcResourceKind> resl,
195*e8d8bef9SDimitry Andric                     list<int> rcl, SchedWriteRes wr> :
196*e8d8bef9SDimitry Andric  SchedWriteRes<!listconcat(wr.ProcResources, resl)> {
197*e8d8bef9SDimitry Andric  let Latency = !add(wr.Latency, lat);
198*e8d8bef9SDimitry Andric  let ResourceCycles = !listconcat(wr.ResourceCycles, rcl);
199*e8d8bef9SDimitry Andric  let NumMicroOps = !add(wr.NumMicroOps, uops);
200*e8d8bef9SDimitry Andric  SchedWriteRes BaseWr = wr;
201*e8d8bef9SDimitry Andric}
202*e8d8bef9SDimitry Andric
203*e8d8bef9SDimitry Andricclass CheckBranchForm<int n, BranchWriteRes br> :
204*e8d8bef9SDimitry Andric  SchedWriteVariant<[
205*e8d8bef9SDimitry Andric    SchedVar<IsRegPCPred<n>, [br]>,
206*e8d8bef9SDimitry Andric    SchedVar<NoSchedPred,    [br.BaseWr]>
207*e8d8bef9SDimitry Andric  ]>;
2080b57cec5SDimitry Andric
2090b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
2100b57cec5SDimitry Andric// Instruction Itinerary classes used for ARM
2110b57cec5SDimitry Andric//
2120b57cec5SDimitry Andricdef IIC_iALUx      : InstrItinClass;
2130b57cec5SDimitry Andricdef IIC_iALUi      : InstrItinClass;
2140b57cec5SDimitry Andricdef IIC_iALUr      : InstrItinClass;
2150b57cec5SDimitry Andricdef IIC_iALUsi     : InstrItinClass;
2160b57cec5SDimitry Andricdef IIC_iALUsir    : InstrItinClass;
2170b57cec5SDimitry Andricdef IIC_iALUsr     : InstrItinClass;
2180b57cec5SDimitry Andricdef IIC_iBITi      : InstrItinClass;
2190b57cec5SDimitry Andricdef IIC_iBITr      : InstrItinClass;
2200b57cec5SDimitry Andricdef IIC_iBITsi     : InstrItinClass;
2210b57cec5SDimitry Andricdef IIC_iBITsr     : InstrItinClass;
2220b57cec5SDimitry Andricdef IIC_iUNAr      : InstrItinClass;
2230b57cec5SDimitry Andricdef IIC_iUNAsi     : InstrItinClass;
2240b57cec5SDimitry Andricdef IIC_iEXTr      : InstrItinClass;
2250b57cec5SDimitry Andricdef IIC_iEXTAr     : InstrItinClass;
2260b57cec5SDimitry Andricdef IIC_iEXTAsr    : InstrItinClass;
2270b57cec5SDimitry Andricdef IIC_iCMPi      : InstrItinClass;
2280b57cec5SDimitry Andricdef IIC_iCMPr      : InstrItinClass;
2290b57cec5SDimitry Andricdef IIC_iCMPsi     : InstrItinClass;
2300b57cec5SDimitry Andricdef IIC_iCMPsr     : InstrItinClass;
2310b57cec5SDimitry Andricdef IIC_iTSTi      : InstrItinClass;
2320b57cec5SDimitry Andricdef IIC_iTSTr      : InstrItinClass;
2330b57cec5SDimitry Andricdef IIC_iTSTsi     : InstrItinClass;
2340b57cec5SDimitry Andricdef IIC_iTSTsr     : InstrItinClass;
2350b57cec5SDimitry Andricdef IIC_iMOVi      : InstrItinClass;
2360b57cec5SDimitry Andricdef IIC_iMOVr      : InstrItinClass;
2370b57cec5SDimitry Andricdef IIC_iMOVsi     : InstrItinClass;
2380b57cec5SDimitry Andricdef IIC_iMOVsr     : InstrItinClass;
2390b57cec5SDimitry Andricdef IIC_iMOVix2    : InstrItinClass;
2400b57cec5SDimitry Andricdef IIC_iMOVix2addpc : InstrItinClass;
2410b57cec5SDimitry Andricdef IIC_iMOVix2ld  : InstrItinClass;
2420b57cec5SDimitry Andricdef IIC_iMVNi      : InstrItinClass;
2430b57cec5SDimitry Andricdef IIC_iMVNr      : InstrItinClass;
2440b57cec5SDimitry Andricdef IIC_iMVNsi     : InstrItinClass;
2450b57cec5SDimitry Andricdef IIC_iMVNsr     : InstrItinClass;
2460b57cec5SDimitry Andricdef IIC_iCMOVi     : InstrItinClass;
2470b57cec5SDimitry Andricdef IIC_iCMOVr     : InstrItinClass;
2480b57cec5SDimitry Andricdef IIC_iCMOVsi    : InstrItinClass;
2490b57cec5SDimitry Andricdef IIC_iCMOVsr    : InstrItinClass;
2500b57cec5SDimitry Andricdef IIC_iCMOVix2   : InstrItinClass;
2510b57cec5SDimitry Andricdef IIC_iMUL16     : InstrItinClass;
2520b57cec5SDimitry Andricdef IIC_iMAC16     : InstrItinClass;
2530b57cec5SDimitry Andricdef IIC_iMUL32     : InstrItinClass;
2540b57cec5SDimitry Andricdef IIC_iMAC32     : InstrItinClass;
2550b57cec5SDimitry Andricdef IIC_iMUL64     : InstrItinClass;
2560b57cec5SDimitry Andricdef IIC_iMAC64     : InstrItinClass;
2570b57cec5SDimitry Andricdef IIC_iDIV     : InstrItinClass;
2580b57cec5SDimitry Andricdef IIC_iLoad_i    : InstrItinClass;
2590b57cec5SDimitry Andricdef IIC_iLoad_r    : InstrItinClass;
2600b57cec5SDimitry Andricdef IIC_iLoad_si   : InstrItinClass;
2610b57cec5SDimitry Andricdef IIC_iLoad_iu   : InstrItinClass;
2620b57cec5SDimitry Andricdef IIC_iLoad_ru   : InstrItinClass;
2630b57cec5SDimitry Andricdef IIC_iLoad_siu  : InstrItinClass;
2640b57cec5SDimitry Andricdef IIC_iLoad_bh_i   : InstrItinClass;
2650b57cec5SDimitry Andricdef IIC_iLoad_bh_r   : InstrItinClass;
2660b57cec5SDimitry Andricdef IIC_iLoad_bh_si  : InstrItinClass;
2670b57cec5SDimitry Andricdef IIC_iLoad_bh_iu  : InstrItinClass;
2680b57cec5SDimitry Andricdef IIC_iLoad_bh_ru  : InstrItinClass;
2690b57cec5SDimitry Andricdef IIC_iLoad_bh_siu : InstrItinClass;
2700b57cec5SDimitry Andricdef IIC_iLoad_d_i  : InstrItinClass;
2710b57cec5SDimitry Andricdef IIC_iLoad_d_r  : InstrItinClass;
2720b57cec5SDimitry Andricdef IIC_iLoad_d_ru : InstrItinClass;
2730b57cec5SDimitry Andricdef IIC_iLoad_m    : InstrItinClass;
2740b57cec5SDimitry Andricdef IIC_iLoad_mu   : InstrItinClass;
2750b57cec5SDimitry Andricdef IIC_iLoad_mBr  : InstrItinClass;
2760b57cec5SDimitry Andricdef IIC_iPop       : InstrItinClass;
2770b57cec5SDimitry Andricdef IIC_iPop_Br    : InstrItinClass;
2780b57cec5SDimitry Andricdef IIC_iLoadiALU  : InstrItinClass;
2790b57cec5SDimitry Andricdef IIC_iStore_i   : InstrItinClass;
2800b57cec5SDimitry Andricdef IIC_iStore_r   : InstrItinClass;
2810b57cec5SDimitry Andricdef IIC_iStore_si  : InstrItinClass;
2820b57cec5SDimitry Andricdef IIC_iStore_iu  : InstrItinClass;
2830b57cec5SDimitry Andricdef IIC_iStore_ru  : InstrItinClass;
2840b57cec5SDimitry Andricdef IIC_iStore_siu : InstrItinClass;
2850b57cec5SDimitry Andricdef IIC_iStore_bh_i   : InstrItinClass;
2860b57cec5SDimitry Andricdef IIC_iStore_bh_r   : InstrItinClass;
2870b57cec5SDimitry Andricdef IIC_iStore_bh_si  : InstrItinClass;
2880b57cec5SDimitry Andricdef IIC_iStore_bh_iu  : InstrItinClass;
2890b57cec5SDimitry Andricdef IIC_iStore_bh_ru  : InstrItinClass;
2900b57cec5SDimitry Andricdef IIC_iStore_bh_siu : InstrItinClass;
2910b57cec5SDimitry Andricdef IIC_iStore_d_i   : InstrItinClass;
2920b57cec5SDimitry Andricdef IIC_iStore_d_r   : InstrItinClass;
2930b57cec5SDimitry Andricdef IIC_iStore_d_ru  : InstrItinClass;
2940b57cec5SDimitry Andricdef IIC_iStore_m   : InstrItinClass;
2950b57cec5SDimitry Andricdef IIC_iStore_mu  : InstrItinClass;
2960b57cec5SDimitry Andricdef IIC_Preload    : InstrItinClass;
2970b57cec5SDimitry Andricdef IIC_Br         : InstrItinClass;
2980b57cec5SDimitry Andricdef IIC_fpSTAT     : InstrItinClass;
2990b57cec5SDimitry Andricdef IIC_fpUNA16    : InstrItinClass;
3000b57cec5SDimitry Andricdef IIC_fpUNA32    : InstrItinClass;
3010b57cec5SDimitry Andricdef IIC_fpUNA64    : InstrItinClass;
3020b57cec5SDimitry Andricdef IIC_fpCMP16    : InstrItinClass;
3030b57cec5SDimitry Andricdef IIC_fpCMP32    : InstrItinClass;
3040b57cec5SDimitry Andricdef IIC_fpCMP64    : InstrItinClass;
3050b57cec5SDimitry Andricdef IIC_fpCVTSD    : InstrItinClass;
3060b57cec5SDimitry Andricdef IIC_fpCVTDS    : InstrItinClass;
3070b57cec5SDimitry Andricdef IIC_fpCVTSH    : InstrItinClass;
3080b57cec5SDimitry Andricdef IIC_fpCVTHS    : InstrItinClass;
3090b57cec5SDimitry Andricdef IIC_fpCVTIH    : InstrItinClass;
3100b57cec5SDimitry Andricdef IIC_fpCVTIS    : InstrItinClass;
3110b57cec5SDimitry Andricdef IIC_fpCVTID    : InstrItinClass;
3120b57cec5SDimitry Andricdef IIC_fpCVTHI    : InstrItinClass;
3130b57cec5SDimitry Andricdef IIC_fpCVTSI    : InstrItinClass;
3140b57cec5SDimitry Andricdef IIC_fpCVTDI    : InstrItinClass;
3150b57cec5SDimitry Andricdef IIC_fpMOVIS    : InstrItinClass;
3160b57cec5SDimitry Andricdef IIC_fpMOVID    : InstrItinClass;
3170b57cec5SDimitry Andricdef IIC_fpMOVSI    : InstrItinClass;
3180b57cec5SDimitry Andricdef IIC_fpMOVDI    : InstrItinClass;
3190b57cec5SDimitry Andricdef IIC_fpALU16    : InstrItinClass;
3200b57cec5SDimitry Andricdef IIC_fpALU32    : InstrItinClass;
3210b57cec5SDimitry Andricdef IIC_fpALU64    : InstrItinClass;
3220b57cec5SDimitry Andricdef IIC_fpMUL16    : InstrItinClass;
3230b57cec5SDimitry Andricdef IIC_fpMUL32    : InstrItinClass;
3240b57cec5SDimitry Andricdef IIC_fpMUL64    : InstrItinClass;
3250b57cec5SDimitry Andricdef IIC_fpMAC16    : InstrItinClass;
3260b57cec5SDimitry Andricdef IIC_fpMAC32    : InstrItinClass;
3270b57cec5SDimitry Andricdef IIC_fpMAC64    : InstrItinClass;
3280b57cec5SDimitry Andricdef IIC_fpFMAC16   : InstrItinClass;
3290b57cec5SDimitry Andricdef IIC_fpFMAC32   : InstrItinClass;
3300b57cec5SDimitry Andricdef IIC_fpFMAC64   : InstrItinClass;
3310b57cec5SDimitry Andricdef IIC_fpDIV16    : InstrItinClass;
3320b57cec5SDimitry Andricdef IIC_fpDIV32    : InstrItinClass;
3330b57cec5SDimitry Andricdef IIC_fpDIV64    : InstrItinClass;
3340b57cec5SDimitry Andricdef IIC_fpSQRT16   : InstrItinClass;
3350b57cec5SDimitry Andricdef IIC_fpSQRT32   : InstrItinClass;
3360b57cec5SDimitry Andricdef IIC_fpSQRT64   : InstrItinClass;
3370b57cec5SDimitry Andricdef IIC_fpLoad16   : InstrItinClass;
3380b57cec5SDimitry Andricdef IIC_fpLoad32   : InstrItinClass;
3390b57cec5SDimitry Andricdef IIC_fpLoad64   : InstrItinClass;
3400b57cec5SDimitry Andricdef IIC_fpLoad_m   : InstrItinClass;
3410b57cec5SDimitry Andricdef IIC_fpLoad_mu  : InstrItinClass;
3420b57cec5SDimitry Andricdef IIC_fpStore16  : InstrItinClass;
3430b57cec5SDimitry Andricdef IIC_fpStore32  : InstrItinClass;
3440b57cec5SDimitry Andricdef IIC_fpStore64  : InstrItinClass;
3450b57cec5SDimitry Andricdef IIC_fpStore_m  : InstrItinClass;
3460b57cec5SDimitry Andricdef IIC_fpStore_mu : InstrItinClass;
3470b57cec5SDimitry Andricdef IIC_VLD1       : InstrItinClass;
3480b57cec5SDimitry Andricdef IIC_VLD1x2     : InstrItinClass;
3490b57cec5SDimitry Andricdef IIC_VLD1x3     : InstrItinClass;
3500b57cec5SDimitry Andricdef IIC_VLD1x4     : InstrItinClass;
3510b57cec5SDimitry Andricdef IIC_VLD1u      : InstrItinClass;
3520b57cec5SDimitry Andricdef IIC_VLD1x2u    : InstrItinClass;
3530b57cec5SDimitry Andricdef IIC_VLD1x3u    : InstrItinClass;
3540b57cec5SDimitry Andricdef IIC_VLD1x4u    : InstrItinClass;
3550b57cec5SDimitry Andricdef IIC_VLD1ln     : InstrItinClass;
3560b57cec5SDimitry Andricdef IIC_VLD1lnu    : InstrItinClass;
3570b57cec5SDimitry Andricdef IIC_VLD1dup    : InstrItinClass;
3580b57cec5SDimitry Andricdef IIC_VLD1dupu   : InstrItinClass;
3590b57cec5SDimitry Andricdef IIC_VLD2       : InstrItinClass;
3600b57cec5SDimitry Andricdef IIC_VLD2x2     : InstrItinClass;
3610b57cec5SDimitry Andricdef IIC_VLD2u      : InstrItinClass;
3620b57cec5SDimitry Andricdef IIC_VLD2x2u    : InstrItinClass;
3630b57cec5SDimitry Andricdef IIC_VLD2ln     : InstrItinClass;
3640b57cec5SDimitry Andricdef IIC_VLD2lnu    : InstrItinClass;
3650b57cec5SDimitry Andricdef IIC_VLD2dup    : InstrItinClass;
3660b57cec5SDimitry Andricdef IIC_VLD2dupu   : InstrItinClass;
3670b57cec5SDimitry Andricdef IIC_VLD3       : InstrItinClass;
3680b57cec5SDimitry Andricdef IIC_VLD3ln     : InstrItinClass;
3690b57cec5SDimitry Andricdef IIC_VLD3u      : InstrItinClass;
3700b57cec5SDimitry Andricdef IIC_VLD3lnu    : InstrItinClass;
3710b57cec5SDimitry Andricdef IIC_VLD3dup    : InstrItinClass;
3720b57cec5SDimitry Andricdef IIC_VLD3dupu   : InstrItinClass;
3730b57cec5SDimitry Andricdef IIC_VLD4       : InstrItinClass;
3740b57cec5SDimitry Andricdef IIC_VLD4ln     : InstrItinClass;
3750b57cec5SDimitry Andricdef IIC_VLD4u      : InstrItinClass;
3760b57cec5SDimitry Andricdef IIC_VLD4lnu    : InstrItinClass;
3770b57cec5SDimitry Andricdef IIC_VLD4dup    : InstrItinClass;
3780b57cec5SDimitry Andricdef IIC_VLD4dupu   : InstrItinClass;
3790b57cec5SDimitry Andricdef IIC_VST1       : InstrItinClass;
3800b57cec5SDimitry Andricdef IIC_VST1x2     : InstrItinClass;
3810b57cec5SDimitry Andricdef IIC_VST1x3     : InstrItinClass;
3820b57cec5SDimitry Andricdef IIC_VST1x4     : InstrItinClass;
3830b57cec5SDimitry Andricdef IIC_VST1u      : InstrItinClass;
3840b57cec5SDimitry Andricdef IIC_VST1x2u    : InstrItinClass;
3850b57cec5SDimitry Andricdef IIC_VST1x3u    : InstrItinClass;
3860b57cec5SDimitry Andricdef IIC_VST1x4u    : InstrItinClass;
3870b57cec5SDimitry Andricdef IIC_VST1ln     : InstrItinClass;
3880b57cec5SDimitry Andricdef IIC_VST1lnu    : InstrItinClass;
3890b57cec5SDimitry Andricdef IIC_VST2       : InstrItinClass;
3900b57cec5SDimitry Andricdef IIC_VST2x2     : InstrItinClass;
3910b57cec5SDimitry Andricdef IIC_VST2u      : InstrItinClass;
3920b57cec5SDimitry Andricdef IIC_VST2x2u    : InstrItinClass;
3930b57cec5SDimitry Andricdef IIC_VST2ln     : InstrItinClass;
3940b57cec5SDimitry Andricdef IIC_VST2lnu    : InstrItinClass;
3950b57cec5SDimitry Andricdef IIC_VST3       : InstrItinClass;
3960b57cec5SDimitry Andricdef IIC_VST3u      : InstrItinClass;
3970b57cec5SDimitry Andricdef IIC_VST3ln     : InstrItinClass;
3980b57cec5SDimitry Andricdef IIC_VST3lnu    : InstrItinClass;
3990b57cec5SDimitry Andricdef IIC_VST4       : InstrItinClass;
4000b57cec5SDimitry Andricdef IIC_VST4u      : InstrItinClass;
4010b57cec5SDimitry Andricdef IIC_VST4ln     : InstrItinClass;
4020b57cec5SDimitry Andricdef IIC_VST4lnu    : InstrItinClass;
4030b57cec5SDimitry Andricdef IIC_VUNAD      : InstrItinClass;
4040b57cec5SDimitry Andricdef IIC_VUNAQ      : InstrItinClass;
4050b57cec5SDimitry Andricdef IIC_VBIND      : InstrItinClass;
4060b57cec5SDimitry Andricdef IIC_VBINQ      : InstrItinClass;
4070b57cec5SDimitry Andricdef IIC_VPBIND     : InstrItinClass;
4080b57cec5SDimitry Andricdef IIC_VFMULD     : InstrItinClass;
4090b57cec5SDimitry Andricdef IIC_VFMULQ     : InstrItinClass;
4100b57cec5SDimitry Andricdef IIC_VMOV       : InstrItinClass;
4110b57cec5SDimitry Andricdef IIC_VMOVImm    : InstrItinClass;
4120b57cec5SDimitry Andricdef IIC_VMOVD      : InstrItinClass;
4130b57cec5SDimitry Andricdef IIC_VMOVQ      : InstrItinClass;
4140b57cec5SDimitry Andricdef IIC_VMOVIS     : InstrItinClass;
4150b57cec5SDimitry Andricdef IIC_VMOVID     : InstrItinClass;
4160b57cec5SDimitry Andricdef IIC_VMOVISL    : InstrItinClass;
4170b57cec5SDimitry Andricdef IIC_VMOVSI     : InstrItinClass;
4180b57cec5SDimitry Andricdef IIC_VMOVDI     : InstrItinClass;
4190b57cec5SDimitry Andricdef IIC_VMOVN      : InstrItinClass;
4200b57cec5SDimitry Andricdef IIC_VPERMD     : InstrItinClass;
4210b57cec5SDimitry Andricdef IIC_VPERMQ     : InstrItinClass;
4220b57cec5SDimitry Andricdef IIC_VPERMQ3    : InstrItinClass;
4230b57cec5SDimitry Andricdef IIC_VMACD      : InstrItinClass;
4240b57cec5SDimitry Andricdef IIC_VMACQ      : InstrItinClass;
4250b57cec5SDimitry Andricdef IIC_VFMACD     : InstrItinClass;
4260b57cec5SDimitry Andricdef IIC_VFMACQ     : InstrItinClass;
4270b57cec5SDimitry Andricdef IIC_VRECSD     : InstrItinClass;
4280b57cec5SDimitry Andricdef IIC_VRECSQ     : InstrItinClass;
4290b57cec5SDimitry Andricdef IIC_VCNTiD     : InstrItinClass;
4300b57cec5SDimitry Andricdef IIC_VCNTiQ     : InstrItinClass;
4310b57cec5SDimitry Andricdef IIC_VUNAiD     : InstrItinClass;
4320b57cec5SDimitry Andricdef IIC_VUNAiQ     : InstrItinClass;
4330b57cec5SDimitry Andricdef IIC_VQUNAiD    : InstrItinClass;
4340b57cec5SDimitry Andricdef IIC_VQUNAiQ    : InstrItinClass;
4350b57cec5SDimitry Andricdef IIC_VBINiD     : InstrItinClass;
4360b57cec5SDimitry Andricdef IIC_VBINiQ     : InstrItinClass;
4370b57cec5SDimitry Andricdef IIC_VSUBiD     : InstrItinClass;
4380b57cec5SDimitry Andricdef IIC_VSUBiQ     : InstrItinClass;
4390b57cec5SDimitry Andricdef IIC_VBINi4D    : InstrItinClass;
4400b57cec5SDimitry Andricdef IIC_VBINi4Q    : InstrItinClass;
4410b57cec5SDimitry Andricdef IIC_VSUBi4D    : InstrItinClass;
4420b57cec5SDimitry Andricdef IIC_VSUBi4Q    : InstrItinClass;
4430b57cec5SDimitry Andricdef IIC_VABAD      : InstrItinClass;
4440b57cec5SDimitry Andricdef IIC_VABAQ      : InstrItinClass;
4450b57cec5SDimitry Andricdef IIC_VSHLiD     : InstrItinClass;
4460b57cec5SDimitry Andricdef IIC_VSHLiQ     : InstrItinClass;
4470b57cec5SDimitry Andricdef IIC_VSHLi4D    : InstrItinClass;
4480b57cec5SDimitry Andricdef IIC_VSHLi4Q    : InstrItinClass;
4490b57cec5SDimitry Andricdef IIC_VPALiD     : InstrItinClass;
4500b57cec5SDimitry Andricdef IIC_VPALiQ     : InstrItinClass;
4510b57cec5SDimitry Andricdef IIC_VMULi16D   : InstrItinClass;
4520b57cec5SDimitry Andricdef IIC_VMULi32D   : InstrItinClass;
4530b57cec5SDimitry Andricdef IIC_VMULi16Q   : InstrItinClass;
4540b57cec5SDimitry Andricdef IIC_VMULi32Q   : InstrItinClass;
4550b57cec5SDimitry Andricdef IIC_VMACi16D   : InstrItinClass;
4560b57cec5SDimitry Andricdef IIC_VMACi32D   : InstrItinClass;
4570b57cec5SDimitry Andricdef IIC_VMACi16Q   : InstrItinClass;
4580b57cec5SDimitry Andricdef IIC_VMACi32Q   : InstrItinClass;
4590b57cec5SDimitry Andricdef IIC_VEXTD      : InstrItinClass;
4600b57cec5SDimitry Andricdef IIC_VEXTQ      : InstrItinClass;
4610b57cec5SDimitry Andricdef IIC_VTB1       : InstrItinClass;
4620b57cec5SDimitry Andricdef IIC_VTB2       : InstrItinClass;
4630b57cec5SDimitry Andricdef IIC_VTB3       : InstrItinClass;
4640b57cec5SDimitry Andricdef IIC_VTB4       : InstrItinClass;
4650b57cec5SDimitry Andricdef IIC_VTBX1      : InstrItinClass;
4660b57cec5SDimitry Andricdef IIC_VTBX2      : InstrItinClass;
4670b57cec5SDimitry Andricdef IIC_VTBX3      : InstrItinClass;
4680b57cec5SDimitry Andricdef IIC_VTBX4      : InstrItinClass;
4690b57cec5SDimitry Andricdef IIC_VDOTPROD   : InstrItinClass;
470