You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
keystone/llvm/lib/Target/Hexagon/HexagonGenSubtargetInfo.inc

464 lines
25 KiB

/*===- TableGen'erated file -------------------------------------*- C++ -*-===*\
|* *|
|* Subtarget Enumeration Source Fragment *|
|* *|
|* Automatically generated file, do not edit! *|
|* *|
\*===----------------------------------------------------------------------===*/
#ifdef GET_SUBTARGETINFO_ENUM
#undef GET_SUBTARGETINFO_ENUM
namespace llvm_ks {
namespace Hexagon {
enum : uint64_t {
ArchV4 = 0,
ArchV5 = 1,
ArchV55 = 2,
ArchV60 = 3,
ExtensionHVX = 4,
ExtensionHVXDbl = 5
};
}
} // end llvm namespace
#endif // GET_SUBTARGETINFO_ENUM
#ifdef GET_SUBTARGETINFO_MC_DESC
#undef GET_SUBTARGETINFO_MC_DESC
namespace llvm_ks {
// Sorted (by key) array of values for CPU features.
extern const llvm_ks::SubtargetFeatureKV HexagonFeatureKV[] = {
{ "hvx", "Hexagon HVX instructions", { Hexagon::ExtensionHVX }, { } },
{ "hvx-double", "Hexagon HVX Double instructions", { Hexagon::ExtensionHVXDbl }, { } },
{ "v4", "Hexagon V4", { Hexagon::ArchV4 }, { } },
{ "v5", "Hexagon V5", { Hexagon::ArchV5 }, { } },
{ "v55", "Hexagon V55", { Hexagon::ArchV55 }, { } },
{ "v60", "Hexagon V60", { Hexagon::ArchV60 }, { } }
};
// Sorted (by key) array of values for CPU subtype.
extern const llvm_ks::SubtargetFeatureKV HexagonSubTypeKV[] = {
{ "hexagonv4", "Select the hexagonv4 processor", { Hexagon::ArchV4 }, { } },
{ "hexagonv5", "Select the hexagonv5 processor", { Hexagon::ArchV4, Hexagon::ArchV5 }, { } },
{ "hexagonv55", "Select the hexagonv55 processor", { Hexagon::ArchV4, Hexagon::ArchV5, Hexagon::ArchV55 }, { } },
{ "hexagonv60", "Select the hexagonv60 processor", { Hexagon::ArchV4, Hexagon::ArchV5, Hexagon::ArchV55, Hexagon::ArchV60, Hexagon::ExtensionHVX }, { } }
};
#ifdef DBGFIELD
#error "<target>GenSubtargetInfo.inc requires a DBGFIELD macro"
#endif
#ifndef NDEBUG
#define DBGFIELD(x) x,
#else
#define DBGFIELD(x)
#endif
// Functional units for "HexagonItinerariesV4"
namespace HexagonItinerariesV4FU {
const unsigned SLOT0 = 1 << 0;
const unsigned SLOT1 = 1 << 1;
const unsigned SLOT2 = 1 << 2;
const unsigned SLOT3 = 1 << 3;
const unsigned SLOT_ENDLOOP = 1 << 4;
}
// Functional units for "HexagonItinerariesV55"
namespace HexagonItinerariesV55FU {
const unsigned SLOT0 = 1 << 0;
const unsigned SLOT1 = 1 << 1;
const unsigned SLOT2 = 1 << 2;
const unsigned SLOT3 = 1 << 3;
const unsigned SLOT_ENDLOOP = 1 << 4;
}
// Functional units for "HexagonItinerariesV60"
namespace HexagonItinerariesV60FU {
const unsigned SLOT0 = 1 << 0;
const unsigned SLOT1 = 1 << 1;
const unsigned SLOT2 = 1 << 2;
const unsigned SLOT3 = 1 << 3;
const unsigned SLOT_ENDLOOP = 1 << 4;
const unsigned CVI_ST = 1 << 5;
const unsigned CVI_XLANE = 1 << 6;
const unsigned CVI_SHIFT = 1 << 7;
const unsigned CVI_MPY0 = 1 << 8;
const unsigned CVI_MPY1 = 1 << 9;
const unsigned CVI_LD = 1 << 10;
const unsigned CVI_XLSHF = 1 << 11;
const unsigned CVI_MPY01 = 1 << 12;
const unsigned CVI_ALL = 1 << 13;
}
extern const llvm_ks::InstrStage HexagonStages[] = {
{ 0, 0, 0, llvm_ks::InstrStage::Required }, // No itinerary
{ 1, HexagonItinerariesV4FU::SLOT2 | HexagonItinerariesV4FU::SLOT3, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 1
{ 1, HexagonItinerariesV4FU::SLOT0 | HexagonItinerariesV4FU::SLOT1 | HexagonItinerariesV4FU::SLOT2 | HexagonItinerariesV4FU::SLOT3, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 2
{ 1, HexagonItinerariesV4FU::SLOT3, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 3
{ 1, HexagonItinerariesV4FU::SLOT2, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 4
{ 1, HexagonItinerariesV4FU::SLOT0 | HexagonItinerariesV4FU::SLOT1, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 5
{ 1, HexagonItinerariesV4FU::SLOT0, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 6
{ 1, HexagonItinerariesV4FU::SLOT_ENDLOOP, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 7
{ 1, HexagonItinerariesV4FU::SLOT2 | HexagonItinerariesV4FU::SLOT3, 0, (llvm_ks::InstrStage::ReservationKinds)0 }, { 1, HexagonItinerariesV4FU::SLOT2 | HexagonItinerariesV4FU::SLOT3, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 8-9
{ 2, HexagonItinerariesV55FU::SLOT2 | HexagonItinerariesV55FU::SLOT3, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 10
{ 1, HexagonItinerariesV55FU::SLOT2 | HexagonItinerariesV55FU::SLOT3, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 11
{ 1, HexagonItinerariesV55FU::SLOT0 | HexagonItinerariesV55FU::SLOT1 | HexagonItinerariesV55FU::SLOT2 | HexagonItinerariesV55FU::SLOT3, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 12
{ 2, HexagonItinerariesV55FU::SLOT0 | HexagonItinerariesV55FU::SLOT1 | HexagonItinerariesV55FU::SLOT2 | HexagonItinerariesV55FU::SLOT3, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 13
{ 3, HexagonItinerariesV55FU::SLOT3, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 14
{ 3, HexagonItinerariesV55FU::SLOT2 | HexagonItinerariesV55FU::SLOT3, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 15
{ 2, HexagonItinerariesV55FU::SLOT3, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 16
{ 2, HexagonItinerariesV55FU::SLOT2, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 17
{ 3, HexagonItinerariesV55FU::SLOT0 | HexagonItinerariesV55FU::SLOT1, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 18
{ 1, HexagonItinerariesV55FU::SLOT0, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 19
{ 2, HexagonItinerariesV55FU::SLOT_ENDLOOP, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 20
{ 1, HexagonItinerariesV55FU::SLOT2 | HexagonItinerariesV55FU::SLOT3, 0, (llvm_ks::InstrStage::ReservationKinds)0 }, { 1, HexagonItinerariesV55FU::SLOT2 | HexagonItinerariesV55FU::SLOT3, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 21-22
{ 3, HexagonItinerariesV55FU::SLOT0, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 23
{ 2, HexagonItinerariesV55FU::SLOT0 | HexagonItinerariesV55FU::SLOT1, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 24
{ 1, HexagonItinerariesV55FU::SLOT0 | HexagonItinerariesV55FU::SLOT1, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 25
{ 2, HexagonItinerariesV60FU::SLOT2 | HexagonItinerariesV60FU::SLOT3, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 26
{ 1, HexagonItinerariesV60FU::SLOT2 | HexagonItinerariesV60FU::SLOT3, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 27
{ 1, HexagonItinerariesV60FU::SLOT0 | HexagonItinerariesV60FU::SLOT1 | HexagonItinerariesV60FU::SLOT2 | HexagonItinerariesV60FU::SLOT3, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 28
{ 2, HexagonItinerariesV60FU::SLOT0 | HexagonItinerariesV60FU::SLOT1 | HexagonItinerariesV60FU::SLOT2 | HexagonItinerariesV60FU::SLOT3, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 29
{ 3, HexagonItinerariesV60FU::SLOT3, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 30
{ 3, HexagonItinerariesV60FU::SLOT2 | HexagonItinerariesV60FU::SLOT3, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 31
{ 2, HexagonItinerariesV60FU::SLOT3, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 32
{ 2, HexagonItinerariesV60FU::SLOT2, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 33
{ 3, HexagonItinerariesV60FU::SLOT0 | HexagonItinerariesV60FU::SLOT1, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 34
{ 1, HexagonItinerariesV60FU::SLOT0, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 35
{ 2, HexagonItinerariesV60FU::SLOT_ENDLOOP, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 36
{ 4, HexagonItinerariesV60FU::SLOT2 | HexagonItinerariesV60FU::SLOT3, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 37
{ 1, HexagonItinerariesV60FU::SLOT0 | HexagonItinerariesV60FU::SLOT1 | HexagonItinerariesV60FU::SLOT2 | HexagonItinerariesV60FU::SLOT3, 0, (llvm_ks::InstrStage::ReservationKinds)0 }, { 1, HexagonItinerariesV60FU::CVI_XLANE | HexagonItinerariesV60FU::CVI_SHIFT | HexagonItinerariesV60FU::CVI_MPY0 | HexagonItinerariesV60FU::CVI_MPY1, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 38-39
{ 1, HexagonItinerariesV60FU::SLOT2 | HexagonItinerariesV60FU::SLOT3, 0, (llvm_ks::InstrStage::ReservationKinds)0 }, { 1, HexagonItinerariesV60FU::SLOT2 | HexagonItinerariesV60FU::SLOT3, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 40-41
{ 4, HexagonItinerariesV60FU::SLOT0, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 42
{ 2, HexagonItinerariesV60FU::SLOT0 | HexagonItinerariesV60FU::SLOT1, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 43
{ 3, HexagonItinerariesV60FU::SLOT0, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 44
{ 1, HexagonItinerariesV60FU::SLOT0 | HexagonItinerariesV60FU::SLOT1, 0, (llvm_ks::InstrStage::ReservationKinds)0 }, { 1, HexagonItinerariesV60FU::CVI_LD, 0, (llvm_ks::InstrStage::ReservationKinds)0 }, { 1, HexagonItinerariesV60FU::CVI_XLANE | HexagonItinerariesV60FU::CVI_SHIFT | HexagonItinerariesV60FU::CVI_MPY0 | HexagonItinerariesV60FU::CVI_MPY1, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 45-47
{ 1, HexagonItinerariesV60FU::SLOT0 | HexagonItinerariesV60FU::SLOT1, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 48
{ 1, HexagonItinerariesV60FU::SLOT0, 0, (llvm_ks::InstrStage::ReservationKinds)0 }, { 1, HexagonItinerariesV60FU::CVI_ST, 0, (llvm_ks::InstrStage::ReservationKinds)0 }, { 1, HexagonItinerariesV60FU::CVI_XLANE | HexagonItinerariesV60FU::CVI_SHIFT | HexagonItinerariesV60FU::CVI_MPY0 | HexagonItinerariesV60FU::CVI_MPY1, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 49-51
{ 1, HexagonItinerariesV60FU::SLOT2 | HexagonItinerariesV60FU::SLOT3, 0, (llvm_ks::InstrStage::ReservationKinds)0 }, { 1, HexagonItinerariesV60FU::CVI_MPY0 | HexagonItinerariesV60FU::CVI_MPY1, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 52-53
{ 1, HexagonItinerariesV60FU::SLOT0 | HexagonItinerariesV60FU::SLOT1 | HexagonItinerariesV60FU::SLOT2 | HexagonItinerariesV60FU::SLOT3, 0, (llvm_ks::InstrStage::ReservationKinds)0 }, { 1, HexagonItinerariesV60FU::CVI_XLSHF | HexagonItinerariesV60FU::CVI_MPY01, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 54-55
{ 1, HexagonItinerariesV60FU::SLOT0 | HexagonItinerariesV60FU::SLOT1 | HexagonItinerariesV60FU::SLOT2 | HexagonItinerariesV60FU::SLOT3, 0, (llvm_ks::InstrStage::ReservationKinds)0 }, { 1, HexagonItinerariesV60FU::CVI_XLANE, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 56-57
{ 1, HexagonItinerariesV60FU::SLOT0, 0, (llvm_ks::InstrStage::ReservationKinds)0 }, { 1, HexagonItinerariesV60FU::SLOT1, 0, (llvm_ks::InstrStage::ReservationKinds)0 }, { 1, HexagonItinerariesV60FU::CVI_LD, 0, (llvm_ks::InstrStage::ReservationKinds)0 }, { 1, HexagonItinerariesV60FU::CVI_XLANE, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 58-61
{ 1, HexagonItinerariesV60FU::SLOT0 | HexagonItinerariesV60FU::SLOT1, 0, (llvm_ks::InstrStage::ReservationKinds)0 }, { 1, HexagonItinerariesV60FU::CVI_LD, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 62-63
{ 1, HexagonItinerariesV60FU::SLOT0, 0, (llvm_ks::InstrStage::ReservationKinds)0 }, { 1, HexagonItinerariesV60FU::SLOT1, 0, (llvm_ks::InstrStage::ReservationKinds)0 }, { 1, HexagonItinerariesV60FU::CVI_ST, 0, (llvm_ks::InstrStage::ReservationKinds)0 }, { 1, HexagonItinerariesV60FU::CVI_XLANE, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 64-67
{ 1, HexagonItinerariesV60FU::SLOT0, 0, (llvm_ks::InstrStage::ReservationKinds)0 }, { 1, HexagonItinerariesV60FU::CVI_ST, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 68-69
{ 1, HexagonItinerariesV60FU::SLOT2 | HexagonItinerariesV60FU::SLOT3, 0, (llvm_ks::InstrStage::ReservationKinds)0 }, { 1, HexagonItinerariesV60FU::CVI_MPY01, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 70-71
{ 1, HexagonItinerariesV60FU::SLOT0 | HexagonItinerariesV60FU::SLOT1 | HexagonItinerariesV60FU::SLOT2 | HexagonItinerariesV60FU::SLOT3, 0, (llvm_ks::InstrStage::ReservationKinds)0 }, { 1, HexagonItinerariesV60FU::CVI_SHIFT, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 72-73
{ 1, HexagonItinerariesV60FU::SLOT0 | HexagonItinerariesV60FU::SLOT1 | HexagonItinerariesV60FU::SLOT2 | HexagonItinerariesV60FU::SLOT3, 0, (llvm_ks::InstrStage::ReservationKinds)0 }, { 1, HexagonItinerariesV60FU::CVI_XLSHF, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 74-75
{ 1, HexagonItinerariesV60FU::SLOT0 | HexagonItinerariesV60FU::SLOT1 | HexagonItinerariesV60FU::SLOT2 | HexagonItinerariesV60FU::SLOT3, 0, (llvm_ks::InstrStage::ReservationKinds)0 }, { 1, HexagonItinerariesV60FU::CVI_ALL, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 76-77
{ 0, 0, 0, llvm_ks::InstrStage::Required } // End stages
};
static const llvm_ks::InstrItinerary HexagonItinerariesV4[] = {
{ 0, 0, 0, 0, 0 }, // 0 NoInstrModel
{ 1, 1, 2, 0, 0 }, // 1 S_2op_tc_2_SLOT23
{ 1, 1, 2, 0, 0 }, // 2 S_2op_tc_1_SLOT23
{ 1, 2, 3, 0, 0 }, // 3 ALU32_3op_tc_1_SLOT0123
{ 1, 1, 2, 0, 0 }, // 4 ALU64_tc_1_SLOT23
{ 1, 1, 2, 0, 0 }, // 5 ALU64_tc_2_SLOT23
{ 1, 2, 3, 0, 0 }, // 6 ALU32_ADDI_tc_1_SLOT0123
{ 1, 2, 3, 0, 0 }, // 7 ALU32_3op_tc_2_SLOT0123
{ 1, 2, 3, 0, 0 }, // 8 ALU32_2op_tc_1_SLOT0123
{ 1, 3, 4, 0, 0 }, // 9 CR_tc_3x_SLOT3
{ 1, 1, 2, 0, 0 }, // 10 ALU64_tc_2early_SLOT23
{ 1, 1, 2, 0, 0 }, // 11 M_tc_3x_SLOT23
{ 1, 1, 2, 0, 0 }, // 12 S_3op_tc_1_SLOT23
{ 1, 1, 2, 0, 0 }, // 13 S_3op_tc_2early_SLOT23
{ 1, 1, 2, 0, 0 }, // 14 S_3op_tc_2_SLOT23
{ 1, 2, 3, 0, 0 }, // 15 EXTENDER_tc_1_SLOT0123
{ 1, 1, 2, 0, 0 }, // 16 S_3op_tc_3_SLOT23
{ 0, 0, 0, 0, 0 }, // 17 M_tc_3stall_SLOT23
{ 1, 2, 3, 0, 0 }, // 18 PSEUDO
{ 1, 1, 2, 0, 0 }, // 19 CR_tc_2early_SLOT23
{ 1, 1, 2, 0, 0 }, // 20 S_2op_tc_2early_SLOT23
{ 1, 2, 3, 0, 0 }, // 21 ALU32_3op_tc_2early_SLOT0123
{ 1, 2, 3, 0, 0 }, // 22 ALU32_2op_tc_2early_SLOT0123
{ 1, 3, 4, 0, 0 }, // 23 CR_tc_2_SLOT3
{ 1, 4, 5, 0, 0 }, // 24 J_tc_2early_SLOT2
{ 1, 1, 2, 0, 0 }, // 25 J_tc_2early_SLOT23
{ 1, 5, 6, 0, 0 }, // 26 LD_tc_ld_SLOT01
{ 1, 6, 7, 0, 0 }, // 27 DUPLEX
{ 1, 7, 8, 0, 0 }, // 28 J_tc_2early_SLOT0123
{ 1, 1, 2, 0, 0 }, // 29 S_2op_tc_3or4x_SLOT23
{ 1, 1, 2, 0, 0 }, // 30 ALU64_tc_3x_SLOT23
{ 1, 1, 2, 0, 0 }, // 31 M_tc_3or4x_SLOT23
{ 1, 1, 2, 0, 0 }, // 32 M_tc_3_SLOT23
{ 0, 0, 0, 0, 0 }, // 33 CVI_VA
{ 1, 8, 10, 0, 0 }, // 34 PSEUDOM
{ 1, 3, 4, 0, 0 }, // 35 CR_tc_2early_SLOT3
{ 1, 6, 7, 0, 0 }, // 36 NCJ_tc_3or4stall_SLOT0
{ 1, 1, 2, 0, 0 }, // 37 COMPOUND
{ 1, 5, 6, 0, 0 }, // 38 V2LDST_tc_ld_SLOT01
{ 1, 6, 7, 0, 0 }, // 39 LD_tc_ld_SLOT0
{ 1, 6, 7, 0, 0 }, // 40 V4LDST_tc_st_SLOT0
{ 1, 5, 6, 0, 0 }, // 41 V4LDST_tc_ld_SLOT01
{ 1, 6, 7, 0, 0 }, // 42 LD_tc_3or4stall_SLOT0
{ 0, 0, 0, 0, 0 }, // 43 CVI_VM_LD
{ 1, 1, 2, 0, 0 }, // 44 M_tc_2_SLOT23
{ 1, 1, 2, 0, 0 }, // 45 S_3op_tc_3x_SLOT23
{ 1, 6, 7, 0, 0 }, // 46 ST_tc_ld_SLOT0
{ 1, 5, 6, 0, 0 }, // 47 V2LDST_tc_st_SLOT01
{ 1, 5, 6, 0, 0 }, // 48 ST_tc_st_SLOT01
{ 1, 6, 7, 0, 0 }, // 49 V2LDST_tc_st_SLOT0
{ 1, 6, 7, 0, 0 }, // 50 ST_tc_st_SLOT0
{ 1, 5, 6, 0, 0 }, // 51 V4LDST_tc_st_SLOT01
{ 0, 0, 0, 0, 0 }, // 52 CVI_VM_ST
{ 0, 0, 0, 0, 0 }, // 53 PREFIX
{ 0, 0, 0, 0, 0 }, // 54 CVI_VX_LATE
{ 0, 0, 0, 0, 0 }, // 55 CVI_VA_DV
{ 0, 0, 0, 0, 0 }, // 56 CVI_VP_LONG
{ 0, 0, 0, 0, 0 }, // 57 CVI_VM_VP_LDU
{ 0, 0, 0, 0, 0 }, // 58 CVI_VM_CUR_LD
{ 0, 0, 0, 0, 0 }, // 59 CVI_VM_TMP_LD
{ 0, 0, 0, 0, 0 }, // 60 CVI_VM_STU
{ 0, 0, 0, 0, 0 }, // 61 CVI_VM_NEW_ST
{ 0, 0, 0, 0, 0 }, // 62 CVI_VX
{ 0, 0, 0, 0, 0 }, // 63 CVI_VX_DV
{ 0, 0, 0, 0, 0 }, // 64 CVI_VS
{ 0, 0, 0, 0, 0 }, // 65 CVI_VP_VS_LONG_EARLY
{ 0, 0, 0, 0, 0 }, // 66 CVI_VP
{ 0, 0, 0, 0, 0 }, // 67 CVI_VP_VS_LONG
{ 0, 0, 0, 0, 0 }, // 68 CVI_HIST
{ 0, 0, 0, 0, 0 }, // 69 CVI_VX_DV_LONG
{ 0, 0, 0, 0, 0 }, // 70 CVI_VX_LONG
{ 0, 0, 0, 0, 0 }, // 71 CVI_VINLANESAT
{ 0, 0, 0, 0, 0 }, // 72 CVI_VP_VS
{ 1, 6, 7, 0, 0 }, // 73 ST_tc_3stall_SLOT0
{ 0, ~0U, ~0U, ~0U, ~0U } // end marker
};
static const llvm_ks::InstrItinerary HexagonItinerariesV55[] = {
{ 0, 0, 0, 0, 0 }, // 0 NoInstrModel
{ 1, 10, 11, 0, 0 }, // 1 S_2op_tc_2_SLOT23
{ 1, 11, 12, 0, 0 }, // 2 S_2op_tc_1_SLOT23
{ 1, 12, 13, 0, 0 }, // 3 ALU32_3op_tc_1_SLOT0123
{ 1, 11, 12, 0, 0 }, // 4 ALU64_tc_1_SLOT23
{ 1, 10, 11, 0, 0 }, // 5 ALU64_tc_2_SLOT23
{ 1, 12, 13, 0, 0 }, // 6 ALU32_ADDI_tc_1_SLOT0123
{ 1, 13, 14, 0, 0 }, // 7 ALU32_3op_tc_2_SLOT0123
{ 1, 12, 13, 0, 0 }, // 8 ALU32_2op_tc_1_SLOT0123
{ 1, 14, 15, 0, 0 }, // 9 CR_tc_3x_SLOT3
{ 1, 10, 11, 0, 0 }, // 10 ALU64_tc_2early_SLOT23
{ 1, 15, 16, 0, 0 }, // 11 M_tc_3x_SLOT23
{ 1, 11, 12, 0, 0 }, // 12 S_3op_tc_1_SLOT23
{ 1, 10, 11, 0, 0 }, // 13 S_3op_tc_2early_SLOT23
{ 1, 10, 11, 0, 0 }, // 14 S_3op_tc_2_SLOT23
{ 1, 12, 13, 0, 0 }, // 15 EXTENDER_tc_1_SLOT0123
{ 1, 15, 16, 0, 0 }, // 16 S_3op_tc_3_SLOT23
{ 1, 15, 16, 0, 0 }, // 17 M_tc_3stall_SLOT23
{ 1, 12, 13, 0, 0 }, // 18 PSEUDO
{ 1, 10, 11, 0, 0 }, // 19 CR_tc_2early_SLOT23
{ 1, 10, 11, 0, 0 }, // 20 S_2op_tc_2early_SLOT23
{ 1, 13, 14, 0, 0 }, // 21 ALU32_3op_tc_2early_SLOT0123
{ 1, 13, 14, 0, 0 }, // 22 ALU32_2op_tc_2early_SLOT0123
{ 1, 16, 17, 0, 0 }, // 23 CR_tc_2_SLOT3
{ 1, 17, 18, 0, 0 }, // 24 J_tc_2early_SLOT2
{ 1, 10, 11, 0, 0 }, // 25 J_tc_2early_SLOT23
{ 1, 18, 19, 0, 0 }, // 26 LD_tc_ld_SLOT01
{ 1, 19, 20, 0, 0 }, // 27 DUPLEX
{ 1, 20, 21, 0, 0 }, // 28 J_tc_2early_SLOT0123
{ 1, 15, 16, 0, 0 }, // 29 S_2op_tc_3or4x_SLOT23
{ 1, 15, 16, 0, 0 }, // 30 ALU64_tc_3x_SLOT23
{ 1, 15, 16, 0, 0 }, // 31 M_tc_3or4x_SLOT23
{ 1, 15, 16, 0, 0 }, // 32 M_tc_3_SLOT23
{ 0, 0, 0, 0, 0 }, // 33 CVI_VA
{ 1, 21, 23, 0, 0 }, // 34 PSEUDOM
{ 1, 16, 17, 0, 0 }, // 35 CR_tc_2early_SLOT3
{ 1, 23, 24, 0, 0 }, // 36 NCJ_tc_3or4stall_SLOT0
{ 1, 11, 12, 0, 0 }, // 37 COMPOUND
{ 1, 24, 25, 0, 0 }, // 38 V2LDST_tc_ld_SLOT01
{ 1, 23, 24, 0, 0 }, // 39 LD_tc_ld_SLOT0
{ 1, 19, 20, 0, 0 }, // 40 V4LDST_tc_st_SLOT0
{ 1, 18, 19, 0, 0 }, // 41 V4LDST_tc_ld_SLOT01
{ 1, 23, 24, 0, 0 }, // 42 LD_tc_3or4stall_SLOT0
{ 0, 0, 0, 0, 0 }, // 43 CVI_VM_LD
{ 1, 10, 11, 0, 0 }, // 44 M_tc_2_SLOT23
{ 1, 15, 16, 0, 0 }, // 45 S_3op_tc_3x_SLOT23
{ 1, 23, 24, 0, 0 }, // 46 ST_tc_ld_SLOT0
{ 1, 25, 26, 0, 0 }, // 47 V2LDST_tc_st_SLOT01
{ 1, 25, 26, 0, 0 }, // 48 ST_tc_st_SLOT01
{ 1, 19, 20, 0, 0 }, // 49 V2LDST_tc_st_SLOT0
{ 1, 19, 20, 0, 0 }, // 50 ST_tc_st_SLOT0
{ 1, 25, 26, 0, 0 }, // 51 V4LDST_tc_st_SLOT01
{ 0, 0, 0, 0, 0 }, // 52 CVI_VM_ST
{ 1, 12, 13, 0, 0 }, // 53 PREFIX
{ 0, 0, 0, 0, 0 }, // 54 CVI_VX_LATE
{ 0, 0, 0, 0, 0 }, // 55 CVI_VA_DV
{ 0, 0, 0, 0, 0 }, // 56 CVI_VP_LONG
{ 0, 0, 0, 0, 0 }, // 57 CVI_VM_VP_LDU
{ 0, 0, 0, 0, 0 }, // 58 CVI_VM_CUR_LD
{ 0, 0, 0, 0, 0 }, // 59 CVI_VM_TMP_LD
{ 0, 0, 0, 0, 0 }, // 60 CVI_VM_STU
{ 0, 0, 0, 0, 0 }, // 61 CVI_VM_NEW_ST
{ 0, 0, 0, 0, 0 }, // 62 CVI_VX
{ 0, 0, 0, 0, 0 }, // 63 CVI_VX_DV
{ 0, 0, 0, 0, 0 }, // 64 CVI_VS
{ 0, 0, 0, 0, 0 }, // 65 CVI_VP_VS_LONG_EARLY
{ 0, 0, 0, 0, 0 }, // 66 CVI_VP
{ 0, 0, 0, 0, 0 }, // 67 CVI_VP_VS_LONG
{ 0, 0, 0, 0, 0 }, // 68 CVI_HIST
{ 0, 0, 0, 0, 0 }, // 69 CVI_VX_DV_LONG
{ 0, 0, 0, 0, 0 }, // 70 CVI_VX_LONG
{ 0, 0, 0, 0, 0 }, // 71 CVI_VINLANESAT
{ 0, 0, 0, 0, 0 }, // 72 CVI_VP_VS
{ 1, 23, 24, 0, 0 }, // 73 ST_tc_3stall_SLOT0
{ 0, ~0U, ~0U, ~0U, ~0U } // end marker
};
static const llvm_ks::InstrItinerary HexagonItinerariesV60[] = {
{ 0, 0, 0, 0, 0 }, // 0 NoInstrModel
{ 1, 26, 27, 0, 0 }, // 1 S_2op_tc_2_SLOT23
{ 1, 27, 28, 0, 0 }, // 2 S_2op_tc_1_SLOT23
{ 1, 28, 29, 0, 0 }, // 3 ALU32_3op_tc_1_SLOT0123
{ 1, 27, 28, 0, 0 }, // 4 ALU64_tc_1_SLOT23
{ 1, 26, 27, 0, 0 }, // 5 ALU64_tc_2_SLOT23
{ 1, 28, 29, 0, 0 }, // 6 ALU32_ADDI_tc_1_SLOT0123
{ 1, 29, 30, 0, 0 }, // 7 ALU32_3op_tc_2_SLOT0123
{ 1, 28, 29, 0, 0 }, // 8 ALU32_2op_tc_1_SLOT0123
{ 1, 30, 31, 0, 0 }, // 9 CR_tc_3x_SLOT3
{ 1, 26, 27, 0, 0 }, // 10 ALU64_tc_2early_SLOT23
{ 1, 31, 32, 0, 0 }, // 11 M_tc_3x_SLOT23
{ 1, 27, 28, 0, 0 }, // 12 S_3op_tc_1_SLOT23
{ 1, 26, 27, 0, 0 }, // 13 S_3op_tc_2early_SLOT23
{ 1, 26, 27, 0, 0 }, // 14 S_3op_tc_2_SLOT23
{ 1, 28, 29, 0, 0 }, // 15 EXTENDER_tc_1_SLOT0123
{ 1, 31, 32, 0, 0 }, // 16 S_3op_tc_3_SLOT23
{ 1, 31, 32, 0, 0 }, // 17 M_tc_3stall_SLOT23
{ 1, 28, 29, 0, 0 }, // 18 PSEUDO
{ 1, 26, 27, 0, 0 }, // 19 CR_tc_2early_SLOT23
{ 1, 26, 27, 0, 0 }, // 20 S_2op_tc_2early_SLOT23
{ 1, 29, 30, 0, 0 }, // 21 ALU32_3op_tc_2early_SLOT0123
{ 1, 29, 30, 0, 0 }, // 22 ALU32_2op_tc_2early_SLOT0123
{ 1, 32, 33, 0, 0 }, // 23 CR_tc_2_SLOT3
{ 1, 33, 34, 0, 0 }, // 24 J_tc_2early_SLOT2
{ 1, 26, 27, 0, 0 }, // 25 J_tc_2early_SLOT23
{ 1, 34, 35, 0, 0 }, // 26 LD_tc_ld_SLOT01
{ 1, 35, 36, 0, 0 }, // 27 DUPLEX
{ 1, 36, 37, 0, 0 }, // 28 J_tc_2early_SLOT0123
{ 1, 37, 38, 0, 0 }, // 29 S_2op_tc_3or4x_SLOT23
{ 1, 31, 32, 0, 0 }, // 30 ALU64_tc_3x_SLOT23
{ 1, 37, 38, 0, 0 }, // 31 M_tc_3or4x_SLOT23
{ 1, 31, 32, 0, 0 }, // 32 M_tc_3_SLOT23
{ 1, 38, 40, 0, 0 }, // 33 CVI_VA
{ 1, 40, 42, 0, 0 }, // 34 PSEUDOM
{ 1, 32, 33, 0, 0 }, // 35 CR_tc_2early_SLOT3
{ 1, 42, 43, 0, 0 }, // 36 NCJ_tc_3or4stall_SLOT0
{ 1, 27, 28, 0, 0 }, // 37 COMPOUND
{ 1, 43, 44, 0, 0 }, // 38 V2LDST_tc_ld_SLOT01
{ 1, 44, 45, 0, 0 }, // 39 LD_tc_ld_SLOT0
{ 1, 35, 36, 0, 0 }, // 40 V4LDST_tc_st_SLOT0
{ 1, 34, 35, 0, 0 }, // 41 V4LDST_tc_ld_SLOT01
{ 1, 42, 43, 0, 0 }, // 42 LD_tc_3or4stall_SLOT0
{ 1, 45, 48, 0, 0 }, // 43 CVI_VM_LD
{ 1, 26, 27, 0, 0 }, // 44 M_tc_2_SLOT23
{ 1, 31, 32, 0, 0 }, // 45 S_3op_tc_3x_SLOT23
{ 1, 44, 45, 0, 0 }, // 46 ST_tc_ld_SLOT0
{ 1, 48, 49, 0, 0 }, // 47 V2LDST_tc_st_SLOT01
{ 1, 48, 49, 0, 0 }, // 48 ST_tc_st_SLOT01
{ 1, 35, 36, 0, 0 }, // 49 V2LDST_tc_st_SLOT0
{ 1, 35, 36, 0, 0 }, // 50 ST_tc_st_SLOT0
{ 1, 48, 49, 0, 0 }, // 51 V4LDST_tc_st_SLOT01
{ 1, 49, 52, 0, 0 }, // 52 CVI_VM_ST
{ 1, 28, 29, 0, 0 }, // 53 PREFIX
{ 1, 52, 54, 0, 0 }, // 54 CVI_VX_LATE
{ 1, 54, 56, 0, 0 }, // 55 CVI_VA_DV
{ 1, 56, 58, 0, 0 }, // 56 CVI_VP_LONG
{ 1, 58, 62, 0, 0 }, // 57 CVI_VM_VP_LDU
{ 1, 45, 48, 0, 0 }, // 58 CVI_VM_CUR_LD
{ 1, 62, 64, 0, 0 }, // 59 CVI_VM_TMP_LD
{ 1, 64, 68, 0, 0 }, // 60 CVI_VM_STU
{ 1, 68, 70, 0, 0 }, // 61 CVI_VM_NEW_ST
{ 1, 52, 54, 0, 0 }, // 62 CVI_VX
{ 1, 70, 72, 0, 0 }, // 63 CVI_VX_DV
{ 1, 72, 74, 0, 0 }, // 64 CVI_VS
{ 1, 74, 76, 0, 0 }, // 65 CVI_VP_VS_LONG_EARLY
{ 1, 56, 58, 0, 0 }, // 66 CVI_VP
{ 1, 74, 76, 0, 0 }, // 67 CVI_VP_VS_LONG
{ 1, 76, 78, 0, 0 }, // 68 CVI_HIST
{ 1, 70, 72, 0, 0 }, // 69 CVI_VX_DV_LONG
{ 1, 52, 54, 0, 0 }, // 70 CVI_VX_LONG
{ 1, 72, 74, 0, 0 }, // 71 CVI_VINLANESAT
{ 1, 74, 76, 0, 0 }, // 72 CVI_VP_VS
{ 1, 44, 45, 0, 0 }, // 73 ST_tc_3stall_SLOT0
{ 0, ~0U, ~0U, ~0U, ~0U } // end marker
};
// ===============================================================
// Data tables for the new per-operand machine model.
static const llvm_ks::MCSchedModel HexagonModelV4 = {
4, // IssueWidth
MCSchedModel::DefaultMicroOpBufferSize,
MCSchedModel::DefaultLoopMicroOpBufferSize,
1, // LoadLatency
MCSchedModel::DefaultHighLatency,
MCSchedModel::DefaultMispredictPenalty,
0, // PostRAScheduler
1, // CompleteModel
1, // Processor ID
nullptr, nullptr, 0, 0, // No instruction-level machine model.
HexagonItinerariesV4};
static const llvm_ks::MCSchedModel HexagonModelV55 = {
4, // IssueWidth
MCSchedModel::DefaultMicroOpBufferSize,
MCSchedModel::DefaultLoopMicroOpBufferSize,
1, // LoadLatency
MCSchedModel::DefaultHighLatency,
MCSchedModel::DefaultMispredictPenalty,
0, // PostRAScheduler
1, // CompleteModel
2, // Processor ID
nullptr, nullptr, 0, 0, // No instruction-level machine model.
HexagonItinerariesV55};
static const llvm_ks::MCSchedModel HexagonModelV60 = {
4, // IssueWidth
MCSchedModel::DefaultMicroOpBufferSize,
MCSchedModel::DefaultLoopMicroOpBufferSize,
1, // LoadLatency
MCSchedModel::DefaultHighLatency,
MCSchedModel::DefaultMispredictPenalty,
0, // PostRAScheduler
1, // CompleteModel
3, // Processor ID
nullptr, nullptr, 0, 0, // No instruction-level machine model.
HexagonItinerariesV60};
// Sorted (by key) array of itineraries for CPU subtype.
extern const llvm_ks::SubtargetInfoKV HexagonProcSchedKV[] = {
{ "hexagonv4", (const void *)&HexagonModelV4 },
{ "hexagonv5", (const void *)&HexagonModelV4 },
{ "hexagonv55", (const void *)&HexagonModelV55 },
{ "hexagonv60", (const void *)&HexagonModelV60 }
};
#undef DBGFIELD
static inline MCSubtargetInfo *createHexagonMCSubtargetInfoImpl(const Triple &TT, StringRef CPU, StringRef FS) {
return new MCSubtargetInfo(TT, CPU, FS, HexagonFeatureKV, HexagonSubTypeKV,
HexagonProcSchedKV);
}
} // end llvm namespace
#endif // GET_SUBTARGETINFO_MC_DESC
#ifdef GET_SUBTARGETINFO_TARGET_DESC
#undef GET_SUBTARGETINFO_TARGET_DESC
#include "llvm/Support/Debug.h"
#include "llvm/Support/raw_ostream.h"
// ParseSubtargetFeatures - Parses features string setting specified
// subtarget options.
void llvm_ks::HexagonSubtarget::ParseSubtargetFeatures(StringRef CPU, StringRef FS) {
DEBUG(dbgs() << "\nFeatures:" << FS);
DEBUG(dbgs() << "\nCPU:" << CPU << "\n\n");
InitMCProcessorInfo(CPU, FS);
const FeatureBitset& Bits = getFeatureBits();
if (Bits[Hexagon::ArchV4] && HexagonArchVersion < V4) HexagonArchVersion = V4;
if (Bits[Hexagon::ArchV5] && HexagonArchVersion < V5) HexagonArchVersion = V5;
if (Bits[Hexagon::ArchV55] && HexagonArchVersion < V55) HexagonArchVersion = V55;
if (Bits[Hexagon::ArchV60] && HexagonArchVersion < V60) HexagonArchVersion = V60;
if (Bits[Hexagon::ExtensionHVX]) UseHVXOps = true;
if (Bits[Hexagon::ExtensionHVXDbl]) UseHVXDblOps = true;
}
#endif // GET_SUBTARGETINFO_TARGET_DESC