/src/keystone/llvm/lib/Target/Hexagon/HexagonGenSubtargetInfo.inc
Line | Count | Source |
1 | | /*===- TableGen'erated file -------------------------------------*- C++ -*-===*\ |
2 | | |* *| |
3 | | |* Subtarget Enumeration Source Fragment *| |
4 | | |* *| |
5 | | |* Automatically generated file, do not edit! *| |
6 | | |* *| |
7 | | \*===----------------------------------------------------------------------===*/ |
8 | | |
9 | | |
10 | | #ifdef GET_SUBTARGETINFO_ENUM |
11 | | #undef GET_SUBTARGETINFO_ENUM |
12 | | namespace llvm_ks { |
13 | | namespace Hexagon { |
14 | | enum : uint64_t { |
15 | | ArchV4 = 0, |
16 | | ArchV5 = 1, |
17 | | ArchV55 = 2, |
18 | | ArchV60 = 3, |
19 | | ExtensionHVX = 4, |
20 | | ExtensionHVXDbl = 5 |
21 | | }; |
22 | | } |
23 | | } // end llvm namespace |
24 | | #endif // GET_SUBTARGETINFO_ENUM |
25 | | |
26 | | |
27 | | #ifdef GET_SUBTARGETINFO_MC_DESC |
28 | | #undef GET_SUBTARGETINFO_MC_DESC |
29 | | namespace llvm_ks { |
30 | | // Sorted (by key) array of values for CPU features. |
31 | | extern const llvm_ks::SubtargetFeatureKV HexagonFeatureKV[] = { |
32 | | { "hvx", "Hexagon HVX instructions", { Hexagon::ExtensionHVX }, { } }, |
33 | | { "hvx-double", "Hexagon HVX Double instructions", { Hexagon::ExtensionHVXDbl }, { } }, |
34 | | { "v4", "Hexagon V4", { Hexagon::ArchV4 }, { } }, |
35 | | { "v5", "Hexagon V5", { Hexagon::ArchV5 }, { } }, |
36 | | { "v55", "Hexagon V55", { Hexagon::ArchV55 }, { } }, |
37 | | { "v60", "Hexagon V60", { Hexagon::ArchV60 }, { } } |
38 | | }; |
39 | | |
40 | | // Sorted (by key) array of values for CPU subtype. |
41 | | extern const llvm_ks::SubtargetFeatureKV HexagonSubTypeKV[] = { |
42 | | { "hexagonv4", "Select the hexagonv4 processor", { Hexagon::ArchV4 }, { } }, |
43 | | { "hexagonv5", "Select the hexagonv5 processor", { Hexagon::ArchV4, Hexagon::ArchV5 }, { } }, |
44 | | { "hexagonv55", "Select the hexagonv55 processor", { Hexagon::ArchV4, Hexagon::ArchV5, Hexagon::ArchV55 }, { } }, |
45 | | { "hexagonv60", "Select the hexagonv60 processor", { Hexagon::ArchV4, Hexagon::ArchV5, Hexagon::ArchV55, Hexagon::ArchV60, Hexagon::ExtensionHVX }, { } } |
46 | | }; |
47 | | |
48 | | #ifdef DBGFIELD |
49 | | #error "<target>GenSubtargetInfo.inc requires a DBGFIELD macro" |
50 | | #endif |
51 | | #ifndef NDEBUG |
52 | | #define DBGFIELD(x) x, |
53 | | #else |
54 | | #define DBGFIELD(x) |
55 | | #endif |
56 | | |
57 | | // Functional units for "HexagonItinerariesV4" |
58 | | namespace HexagonItinerariesV4FU { |
59 | | const unsigned SLOT0 = 1 << 0; |
60 | | const unsigned SLOT1 = 1 << 1; |
61 | | const unsigned SLOT2 = 1 << 2; |
62 | | const unsigned SLOT3 = 1 << 3; |
63 | | const unsigned SLOT_ENDLOOP = 1 << 4; |
64 | | } |
65 | | |
66 | | // Functional units for "HexagonItinerariesV55" |
67 | | namespace HexagonItinerariesV55FU { |
68 | | const unsigned SLOT0 = 1 << 0; |
69 | | const unsigned SLOT1 = 1 << 1; |
70 | | const unsigned SLOT2 = 1 << 2; |
71 | | const unsigned SLOT3 = 1 << 3; |
72 | | const unsigned SLOT_ENDLOOP = 1 << 4; |
73 | | } |
74 | | |
75 | | // Functional units for "HexagonItinerariesV60" |
76 | | namespace HexagonItinerariesV60FU { |
77 | | const unsigned SLOT0 = 1 << 0; |
78 | | const unsigned SLOT1 = 1 << 1; |
79 | | const unsigned SLOT2 = 1 << 2; |
80 | | const unsigned SLOT3 = 1 << 3; |
81 | | const unsigned SLOT_ENDLOOP = 1 << 4; |
82 | | const unsigned CVI_ST = 1 << 5; |
83 | | const unsigned CVI_XLANE = 1 << 6; |
84 | | const unsigned CVI_SHIFT = 1 << 7; |
85 | | const unsigned CVI_MPY0 = 1 << 8; |
86 | | const unsigned CVI_MPY1 = 1 << 9; |
87 | | const unsigned CVI_LD = 1 << 10; |
88 | | const unsigned CVI_XLSHF = 1 << 11; |
89 | | const unsigned CVI_MPY01 = 1 << 12; |
90 | | const unsigned CVI_ALL = 1 << 13; |
91 | | } |
92 | | |
93 | | extern const llvm_ks::InstrStage HexagonStages[] = { |
94 | | { 0, 0, 0, llvm_ks::InstrStage::Required }, // No itinerary |
95 | | { 1, HexagonItinerariesV4FU::SLOT2 | HexagonItinerariesV4FU::SLOT3, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 1 |
96 | | { 1, HexagonItinerariesV4FU::SLOT0 | HexagonItinerariesV4FU::SLOT1 | HexagonItinerariesV4FU::SLOT2 | HexagonItinerariesV4FU::SLOT3, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 2 |
97 | | { 1, HexagonItinerariesV4FU::SLOT3, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 3 |
98 | | { 1, HexagonItinerariesV4FU::SLOT2, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 4 |
99 | | { 1, HexagonItinerariesV4FU::SLOT0 | HexagonItinerariesV4FU::SLOT1, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 5 |
100 | | { 1, HexagonItinerariesV4FU::SLOT0, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 6 |
101 | | { 1, HexagonItinerariesV4FU::SLOT_ENDLOOP, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 7 |
102 | | { 1, HexagonItinerariesV4FU::SLOT2 | HexagonItinerariesV4FU::SLOT3, 0, (llvm_ks::InstrStage::ReservationKinds)0 }, { 1, HexagonItinerariesV4FU::SLOT2 | HexagonItinerariesV4FU::SLOT3, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 8-9 |
103 | | { 2, HexagonItinerariesV55FU::SLOT2 | HexagonItinerariesV55FU::SLOT3, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 10 |
104 | | { 1, HexagonItinerariesV55FU::SLOT2 | HexagonItinerariesV55FU::SLOT3, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 11 |
105 | | { 1, HexagonItinerariesV55FU::SLOT0 | HexagonItinerariesV55FU::SLOT1 | HexagonItinerariesV55FU::SLOT2 | HexagonItinerariesV55FU::SLOT3, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 12 |
106 | | { 2, HexagonItinerariesV55FU::SLOT0 | HexagonItinerariesV55FU::SLOT1 | HexagonItinerariesV55FU::SLOT2 | HexagonItinerariesV55FU::SLOT3, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 13 |
107 | | { 3, HexagonItinerariesV55FU::SLOT3, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 14 |
108 | | { 3, HexagonItinerariesV55FU::SLOT2 | HexagonItinerariesV55FU::SLOT3, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 15 |
109 | | { 2, HexagonItinerariesV55FU::SLOT3, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 16 |
110 | | { 2, HexagonItinerariesV55FU::SLOT2, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 17 |
111 | | { 3, HexagonItinerariesV55FU::SLOT0 | HexagonItinerariesV55FU::SLOT1, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 18 |
112 | | { 1, HexagonItinerariesV55FU::SLOT0, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 19 |
113 | | { 2, HexagonItinerariesV55FU::SLOT_ENDLOOP, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 20 |
114 | | { 1, HexagonItinerariesV55FU::SLOT2 | HexagonItinerariesV55FU::SLOT3, 0, (llvm_ks::InstrStage::ReservationKinds)0 }, { 1, HexagonItinerariesV55FU::SLOT2 | HexagonItinerariesV55FU::SLOT3, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 21-22 |
115 | | { 3, HexagonItinerariesV55FU::SLOT0, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 23 |
116 | | { 2, HexagonItinerariesV55FU::SLOT0 | HexagonItinerariesV55FU::SLOT1, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 24 |
117 | | { 1, HexagonItinerariesV55FU::SLOT0 | HexagonItinerariesV55FU::SLOT1, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 25 |
118 | | { 2, HexagonItinerariesV60FU::SLOT2 | HexagonItinerariesV60FU::SLOT3, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 26 |
119 | | { 1, HexagonItinerariesV60FU::SLOT2 | HexagonItinerariesV60FU::SLOT3, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 27 |
120 | | { 1, HexagonItinerariesV60FU::SLOT0 | HexagonItinerariesV60FU::SLOT1 | HexagonItinerariesV60FU::SLOT2 | HexagonItinerariesV60FU::SLOT3, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 28 |
121 | | { 2, HexagonItinerariesV60FU::SLOT0 | HexagonItinerariesV60FU::SLOT1 | HexagonItinerariesV60FU::SLOT2 | HexagonItinerariesV60FU::SLOT3, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 29 |
122 | | { 3, HexagonItinerariesV60FU::SLOT3, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 30 |
123 | | { 3, HexagonItinerariesV60FU::SLOT2 | HexagonItinerariesV60FU::SLOT3, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 31 |
124 | | { 2, HexagonItinerariesV60FU::SLOT3, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 32 |
125 | | { 2, HexagonItinerariesV60FU::SLOT2, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 33 |
126 | | { 3, HexagonItinerariesV60FU::SLOT0 | HexagonItinerariesV60FU::SLOT1, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 34 |
127 | | { 1, HexagonItinerariesV60FU::SLOT0, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 35 |
128 | | { 2, HexagonItinerariesV60FU::SLOT_ENDLOOP, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 36 |
129 | | { 4, HexagonItinerariesV60FU::SLOT2 | HexagonItinerariesV60FU::SLOT3, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 37 |
130 | | { 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 |
131 | | { 1, HexagonItinerariesV60FU::SLOT2 | HexagonItinerariesV60FU::SLOT3, 0, (llvm_ks::InstrStage::ReservationKinds)0 }, { 1, HexagonItinerariesV60FU::SLOT2 | HexagonItinerariesV60FU::SLOT3, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 40-41 |
132 | | { 4, HexagonItinerariesV60FU::SLOT0, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 42 |
133 | | { 2, HexagonItinerariesV60FU::SLOT0 | HexagonItinerariesV60FU::SLOT1, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 43 |
134 | | { 3, HexagonItinerariesV60FU::SLOT0, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 44 |
135 | | { 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 |
136 | | { 1, HexagonItinerariesV60FU::SLOT0 | HexagonItinerariesV60FU::SLOT1, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 48 |
137 | | { 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 |
138 | | { 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 |
139 | | { 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 |
140 | | { 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 |
141 | | { 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 |
142 | | { 1, HexagonItinerariesV60FU::SLOT0 | HexagonItinerariesV60FU::SLOT1, 0, (llvm_ks::InstrStage::ReservationKinds)0 }, { 1, HexagonItinerariesV60FU::CVI_LD, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 62-63 |
143 | | { 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 |
144 | | { 1, HexagonItinerariesV60FU::SLOT0, 0, (llvm_ks::InstrStage::ReservationKinds)0 }, { 1, HexagonItinerariesV60FU::CVI_ST, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 68-69 |
145 | | { 1, HexagonItinerariesV60FU::SLOT2 | HexagonItinerariesV60FU::SLOT3, 0, (llvm_ks::InstrStage::ReservationKinds)0 }, { 1, HexagonItinerariesV60FU::CVI_MPY01, -1, (llvm_ks::InstrStage::ReservationKinds)0 }, // 70-71 |
146 | | { 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 |
147 | | { 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 |
148 | | { 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 |
149 | | { 0, 0, 0, llvm_ks::InstrStage::Required } // End stages |
150 | | }; |
151 | | |
152 | | static const llvm_ks::InstrItinerary HexagonItinerariesV4[] = { |
153 | | { 0, 0, 0, 0, 0 }, // 0 NoInstrModel |
154 | | { 1, 1, 2, 0, 0 }, // 1 S_2op_tc_2_SLOT23 |
155 | | { 1, 1, 2, 0, 0 }, // 2 S_2op_tc_1_SLOT23 |
156 | | { 1, 2, 3, 0, 0 }, // 3 ALU32_3op_tc_1_SLOT0123 |
157 | | { 1, 1, 2, 0, 0 }, // 4 ALU64_tc_1_SLOT23 |
158 | | { 1, 1, 2, 0, 0 }, // 5 ALU64_tc_2_SLOT23 |
159 | | { 1, 2, 3, 0, 0 }, // 6 ALU32_ADDI_tc_1_SLOT0123 |
160 | | { 1, 2, 3, 0, 0 }, // 7 ALU32_3op_tc_2_SLOT0123 |
161 | | { 1, 2, 3, 0, 0 }, // 8 ALU32_2op_tc_1_SLOT0123 |
162 | | { 1, 3, 4, 0, 0 }, // 9 CR_tc_3x_SLOT3 |
163 | | { 1, 1, 2, 0, 0 }, // 10 ALU64_tc_2early_SLOT23 |
164 | | { 1, 1, 2, 0, 0 }, // 11 M_tc_3x_SLOT23 |
165 | | { 1, 1, 2, 0, 0 }, // 12 S_3op_tc_1_SLOT23 |
166 | | { 1, 1, 2, 0, 0 }, // 13 S_3op_tc_2early_SLOT23 |
167 | | { 1, 1, 2, 0, 0 }, // 14 S_3op_tc_2_SLOT23 |
168 | | { 1, 2, 3, 0, 0 }, // 15 EXTENDER_tc_1_SLOT0123 |
169 | | { 1, 1, 2, 0, 0 }, // 16 S_3op_tc_3_SLOT23 |
170 | | { 0, 0, 0, 0, 0 }, // 17 M_tc_3stall_SLOT23 |
171 | | { 1, 2, 3, 0, 0 }, // 18 PSEUDO |
172 | | { 1, 1, 2, 0, 0 }, // 19 CR_tc_2early_SLOT23 |
173 | | { 1, 1, 2, 0, 0 }, // 20 S_2op_tc_2early_SLOT23 |
174 | | { 1, 2, 3, 0, 0 }, // 21 ALU32_3op_tc_2early_SLOT0123 |
175 | | { 1, 2, 3, 0, 0 }, // 22 ALU32_2op_tc_2early_SLOT0123 |
176 | | { 1, 3, 4, 0, 0 }, // 23 CR_tc_2_SLOT3 |
177 | | { 1, 4, 5, 0, 0 }, // 24 J_tc_2early_SLOT2 |
178 | | { 1, 1, 2, 0, 0 }, // 25 J_tc_2early_SLOT23 |
179 | | { 1, 5, 6, 0, 0 }, // 26 LD_tc_ld_SLOT01 |
180 | | { 1, 6, 7, 0, 0 }, // 27 DUPLEX |
181 | | { 1, 7, 8, 0, 0 }, // 28 J_tc_2early_SLOT0123 |
182 | | { 1, 1, 2, 0, 0 }, // 29 S_2op_tc_3or4x_SLOT23 |
183 | | { 1, 1, 2, 0, 0 }, // 30 ALU64_tc_3x_SLOT23 |
184 | | { 1, 1, 2, 0, 0 }, // 31 M_tc_3or4x_SLOT23 |
185 | | { 1, 1, 2, 0, 0 }, // 32 M_tc_3_SLOT23 |
186 | | { 0, 0, 0, 0, 0 }, // 33 CVI_VA |
187 | | { 1, 8, 10, 0, 0 }, // 34 PSEUDOM |
188 | | { 1, 3, 4, 0, 0 }, // 35 CR_tc_2early_SLOT3 |
189 | | { 1, 6, 7, 0, 0 }, // 36 NCJ_tc_3or4stall_SLOT0 |
190 | | { 1, 1, 2, 0, 0 }, // 37 COMPOUND |
191 | | { 1, 5, 6, 0, 0 }, // 38 V2LDST_tc_ld_SLOT01 |
192 | | { 1, 6, 7, 0, 0 }, // 39 LD_tc_ld_SLOT0 |
193 | | { 1, 6, 7, 0, 0 }, // 40 V4LDST_tc_st_SLOT0 |
194 | | { 1, 5, 6, 0, 0 }, // 41 V4LDST_tc_ld_SLOT01 |
195 | | { 1, 6, 7, 0, 0 }, // 42 LD_tc_3or4stall_SLOT0 |
196 | | { 0, 0, 0, 0, 0 }, // 43 CVI_VM_LD |
197 | | { 1, 1, 2, 0, 0 }, // 44 M_tc_2_SLOT23 |
198 | | { 1, 1, 2, 0, 0 }, // 45 S_3op_tc_3x_SLOT23 |
199 | | { 1, 6, 7, 0, 0 }, // 46 ST_tc_ld_SLOT0 |
200 | | { 1, 5, 6, 0, 0 }, // 47 V2LDST_tc_st_SLOT01 |
201 | | { 1, 5, 6, 0, 0 }, // 48 ST_tc_st_SLOT01 |
202 | | { 1, 6, 7, 0, 0 }, // 49 V2LDST_tc_st_SLOT0 |
203 | | { 1, 6, 7, 0, 0 }, // 50 ST_tc_st_SLOT0 |
204 | | { 1, 5, 6, 0, 0 }, // 51 V4LDST_tc_st_SLOT01 |
205 | | { 0, 0, 0, 0, 0 }, // 52 CVI_VM_ST |
206 | | { 0, 0, 0, 0, 0 }, // 53 PREFIX |
207 | | { 0, 0, 0, 0, 0 }, // 54 CVI_VX_LATE |
208 | | { 0, 0, 0, 0, 0 }, // 55 CVI_VA_DV |
209 | | { 0, 0, 0, 0, 0 }, // 56 CVI_VP_LONG |
210 | | { 0, 0, 0, 0, 0 }, // 57 CVI_VM_VP_LDU |
211 | | { 0, 0, 0, 0, 0 }, // 58 CVI_VM_CUR_LD |
212 | | { 0, 0, 0, 0, 0 }, // 59 CVI_VM_TMP_LD |
213 | | { 0, 0, 0, 0, 0 }, // 60 CVI_VM_STU |
214 | | { 0, 0, 0, 0, 0 }, // 61 CVI_VM_NEW_ST |
215 | | { 0, 0, 0, 0, 0 }, // 62 CVI_VX |
216 | | { 0, 0, 0, 0, 0 }, // 63 CVI_VX_DV |
217 | | { 0, 0, 0, 0, 0 }, // 64 CVI_VS |
218 | | { 0, 0, 0, 0, 0 }, // 65 CVI_VP_VS_LONG_EARLY |
219 | | { 0, 0, 0, 0, 0 }, // 66 CVI_VP |
220 | | { 0, 0, 0, 0, 0 }, // 67 CVI_VP_VS_LONG |
221 | | { 0, 0, 0, 0, 0 }, // 68 CVI_HIST |
222 | | { 0, 0, 0, 0, 0 }, // 69 CVI_VX_DV_LONG |
223 | | { 0, 0, 0, 0, 0 }, // 70 CVI_VX_LONG |
224 | | { 0, 0, 0, 0, 0 }, // 71 CVI_VINLANESAT |
225 | | { 0, 0, 0, 0, 0 }, // 72 CVI_VP_VS |
226 | | { 1, 6, 7, 0, 0 }, // 73 ST_tc_3stall_SLOT0 |
227 | | { 0, ~0U, ~0U, ~0U, ~0U } // end marker |
228 | | }; |
229 | | |
230 | | static const llvm_ks::InstrItinerary HexagonItinerariesV55[] = { |
231 | | { 0, 0, 0, 0, 0 }, // 0 NoInstrModel |
232 | | { 1, 10, 11, 0, 0 }, // 1 S_2op_tc_2_SLOT23 |
233 | | { 1, 11, 12, 0, 0 }, // 2 S_2op_tc_1_SLOT23 |
234 | | { 1, 12, 13, 0, 0 }, // 3 ALU32_3op_tc_1_SLOT0123 |
235 | | { 1, 11, 12, 0, 0 }, // 4 ALU64_tc_1_SLOT23 |
236 | | { 1, 10, 11, 0, 0 }, // 5 ALU64_tc_2_SLOT23 |
237 | | { 1, 12, 13, 0, 0 }, // 6 ALU32_ADDI_tc_1_SLOT0123 |
238 | | { 1, 13, 14, 0, 0 }, // 7 ALU32_3op_tc_2_SLOT0123 |
239 | | { 1, 12, 13, 0, 0 }, // 8 ALU32_2op_tc_1_SLOT0123 |
240 | | { 1, 14, 15, 0, 0 }, // 9 CR_tc_3x_SLOT3 |
241 | | { 1, 10, 11, 0, 0 }, // 10 ALU64_tc_2early_SLOT23 |
242 | | { 1, 15, 16, 0, 0 }, // 11 M_tc_3x_SLOT23 |
243 | | { 1, 11, 12, 0, 0 }, // 12 S_3op_tc_1_SLOT23 |
244 | | { 1, 10, 11, 0, 0 }, // 13 S_3op_tc_2early_SLOT23 |
245 | | { 1, 10, 11, 0, 0 }, // 14 S_3op_tc_2_SLOT23 |
246 | | { 1, 12, 13, 0, 0 }, // 15 EXTENDER_tc_1_SLOT0123 |
247 | | { 1, 15, 16, 0, 0 }, // 16 S_3op_tc_3_SLOT23 |
248 | | { 1, 15, 16, 0, 0 }, // 17 M_tc_3stall_SLOT23 |
249 | | { 1, 12, 13, 0, 0 }, // 18 PSEUDO |
250 | | { 1, 10, 11, 0, 0 }, // 19 CR_tc_2early_SLOT23 |
251 | | { 1, 10, 11, 0, 0 }, // 20 S_2op_tc_2early_SLOT23 |
252 | | { 1, 13, 14, 0, 0 }, // 21 ALU32_3op_tc_2early_SLOT0123 |
253 | | { 1, 13, 14, 0, 0 }, // 22 ALU32_2op_tc_2early_SLOT0123 |
254 | | { 1, 16, 17, 0, 0 }, // 23 CR_tc_2_SLOT3 |
255 | | { 1, 17, 18, 0, 0 }, // 24 J_tc_2early_SLOT2 |
256 | | { 1, 10, 11, 0, 0 }, // 25 J_tc_2early_SLOT23 |
257 | | { 1, 18, 19, 0, 0 }, // 26 LD_tc_ld_SLOT01 |
258 | | { 1, 19, 20, 0, 0 }, // 27 DUPLEX |
259 | | { 1, 20, 21, 0, 0 }, // 28 J_tc_2early_SLOT0123 |
260 | | { 1, 15, 16, 0, 0 }, // 29 S_2op_tc_3or4x_SLOT23 |
261 | | { 1, 15, 16, 0, 0 }, // 30 ALU64_tc_3x_SLOT23 |
262 | | { 1, 15, 16, 0, 0 }, // 31 M_tc_3or4x_SLOT23 |
263 | | { 1, 15, 16, 0, 0 }, // 32 M_tc_3_SLOT23 |
264 | | { 0, 0, 0, 0, 0 }, // 33 CVI_VA |
265 | | { 1, 21, 23, 0, 0 }, // 34 PSEUDOM |
266 | | { 1, 16, 17, 0, 0 }, // 35 CR_tc_2early_SLOT3 |
267 | | { 1, 23, 24, 0, 0 }, // 36 NCJ_tc_3or4stall_SLOT0 |
268 | | { 1, 11, 12, 0, 0 }, // 37 COMPOUND |
269 | | { 1, 24, 25, 0, 0 }, // 38 V2LDST_tc_ld_SLOT01 |
270 | | { 1, 23, 24, 0, 0 }, // 39 LD_tc_ld_SLOT0 |
271 | | { 1, 19, 20, 0, 0 }, // 40 V4LDST_tc_st_SLOT0 |
272 | | { 1, 18, 19, 0, 0 }, // 41 V4LDST_tc_ld_SLOT01 |
273 | | { 1, 23, 24, 0, 0 }, // 42 LD_tc_3or4stall_SLOT0 |
274 | | { 0, 0, 0, 0, 0 }, // 43 CVI_VM_LD |
275 | | { 1, 10, 11, 0, 0 }, // 44 M_tc_2_SLOT23 |
276 | | { 1, 15, 16, 0, 0 }, // 45 S_3op_tc_3x_SLOT23 |
277 | | { 1, 23, 24, 0, 0 }, // 46 ST_tc_ld_SLOT0 |
278 | | { 1, 25, 26, 0, 0 }, // 47 V2LDST_tc_st_SLOT01 |
279 | | { 1, 25, 26, 0, 0 }, // 48 ST_tc_st_SLOT01 |
280 | | { 1, 19, 20, 0, 0 }, // 49 V2LDST_tc_st_SLOT0 |
281 | | { 1, 19, 20, 0, 0 }, // 50 ST_tc_st_SLOT0 |
282 | | { 1, 25, 26, 0, 0 }, // 51 V4LDST_tc_st_SLOT01 |
283 | | { 0, 0, 0, 0, 0 }, // 52 CVI_VM_ST |
284 | | { 1, 12, 13, 0, 0 }, // 53 PREFIX |
285 | | { 0, 0, 0, 0, 0 }, // 54 CVI_VX_LATE |
286 | | { 0, 0, 0, 0, 0 }, // 55 CVI_VA_DV |
287 | | { 0, 0, 0, 0, 0 }, // 56 CVI_VP_LONG |
288 | | { 0, 0, 0, 0, 0 }, // 57 CVI_VM_VP_LDU |
289 | | { 0, 0, 0, 0, 0 }, // 58 CVI_VM_CUR_LD |
290 | | { 0, 0, 0, 0, 0 }, // 59 CVI_VM_TMP_LD |
291 | | { 0, 0, 0, 0, 0 }, // 60 CVI_VM_STU |
292 | | { 0, 0, 0, 0, 0 }, // 61 CVI_VM_NEW_ST |
293 | | { 0, 0, 0, 0, 0 }, // 62 CVI_VX |
294 | | { 0, 0, 0, 0, 0 }, // 63 CVI_VX_DV |
295 | | { 0, 0, 0, 0, 0 }, // 64 CVI_VS |
296 | | { 0, 0, 0, 0, 0 }, // 65 CVI_VP_VS_LONG_EARLY |
297 | | { 0, 0, 0, 0, 0 }, // 66 CVI_VP |
298 | | { 0, 0, 0, 0, 0 }, // 67 CVI_VP_VS_LONG |
299 | | { 0, 0, 0, 0, 0 }, // 68 CVI_HIST |
300 | | { 0, 0, 0, 0, 0 }, // 69 CVI_VX_DV_LONG |
301 | | { 0, 0, 0, 0, 0 }, // 70 CVI_VX_LONG |
302 | | { 0, 0, 0, 0, 0 }, // 71 CVI_VINLANESAT |
303 | | { 0, 0, 0, 0, 0 }, // 72 CVI_VP_VS |
304 | | { 1, 23, 24, 0, 0 }, // 73 ST_tc_3stall_SLOT0 |
305 | | { 0, ~0U, ~0U, ~0U, ~0U } // end marker |
306 | | }; |
307 | | |
308 | | static const llvm_ks::InstrItinerary HexagonItinerariesV60[] = { |
309 | | { 0, 0, 0, 0, 0 }, // 0 NoInstrModel |
310 | | { 1, 26, 27, 0, 0 }, // 1 S_2op_tc_2_SLOT23 |
311 | | { 1, 27, 28, 0, 0 }, // 2 S_2op_tc_1_SLOT23 |
312 | | { 1, 28, 29, 0, 0 }, // 3 ALU32_3op_tc_1_SLOT0123 |
313 | | { 1, 27, 28, 0, 0 }, // 4 ALU64_tc_1_SLOT23 |
314 | | { 1, 26, 27, 0, 0 }, // 5 ALU64_tc_2_SLOT23 |
315 | | { 1, 28, 29, 0, 0 }, // 6 ALU32_ADDI_tc_1_SLOT0123 |
316 | | { 1, 29, 30, 0, 0 }, // 7 ALU32_3op_tc_2_SLOT0123 |
317 | | { 1, 28, 29, 0, 0 }, // 8 ALU32_2op_tc_1_SLOT0123 |
318 | | { 1, 30, 31, 0, 0 }, // 9 CR_tc_3x_SLOT3 |
319 | | { 1, 26, 27, 0, 0 }, // 10 ALU64_tc_2early_SLOT23 |
320 | | { 1, 31, 32, 0, 0 }, // 11 M_tc_3x_SLOT23 |
321 | | { 1, 27, 28, 0, 0 }, // 12 S_3op_tc_1_SLOT23 |
322 | | { 1, 26, 27, 0, 0 }, // 13 S_3op_tc_2early_SLOT23 |
323 | | { 1, 26, 27, 0, 0 }, // 14 S_3op_tc_2_SLOT23 |
324 | | { 1, 28, 29, 0, 0 }, // 15 EXTENDER_tc_1_SLOT0123 |
325 | | { 1, 31, 32, 0, 0 }, // 16 S_3op_tc_3_SLOT23 |
326 | | { 1, 31, 32, 0, 0 }, // 17 M_tc_3stall_SLOT23 |
327 | | { 1, 28, 29, 0, 0 }, // 18 PSEUDO |
328 | | { 1, 26, 27, 0, 0 }, // 19 CR_tc_2early_SLOT23 |
329 | | { 1, 26, 27, 0, 0 }, // 20 S_2op_tc_2early_SLOT23 |
330 | | { 1, 29, 30, 0, 0 }, // 21 ALU32_3op_tc_2early_SLOT0123 |
331 | | { 1, 29, 30, 0, 0 }, // 22 ALU32_2op_tc_2early_SLOT0123 |
332 | | { 1, 32, 33, 0, 0 }, // 23 CR_tc_2_SLOT3 |
333 | | { 1, 33, 34, 0, 0 }, // 24 J_tc_2early_SLOT2 |
334 | | { 1, 26, 27, 0, 0 }, // 25 J_tc_2early_SLOT23 |
335 | | { 1, 34, 35, 0, 0 }, // 26 LD_tc_ld_SLOT01 |
336 | | { 1, 35, 36, 0, 0 }, // 27 DUPLEX |
337 | | { 1, 36, 37, 0, 0 }, // 28 J_tc_2early_SLOT0123 |
338 | | { 1, 37, 38, 0, 0 }, // 29 S_2op_tc_3or4x_SLOT23 |
339 | | { 1, 31, 32, 0, 0 }, // 30 ALU64_tc_3x_SLOT23 |
340 | | { 1, 37, 38, 0, 0 }, // 31 M_tc_3or4x_SLOT23 |
341 | | { 1, 31, 32, 0, 0 }, // 32 M_tc_3_SLOT23 |
342 | | { 1, 38, 40, 0, 0 }, // 33 CVI_VA |
343 | | { 1, 40, 42, 0, 0 }, // 34 PSEUDOM |
344 | | { 1, 32, 33, 0, 0 }, // 35 CR_tc_2early_SLOT3 |
345 | | { 1, 42, 43, 0, 0 }, // 36 NCJ_tc_3or4stall_SLOT0 |
346 | | { 1, 27, 28, 0, 0 }, // 37 COMPOUND |
347 | | { 1, 43, 44, 0, 0 }, // 38 V2LDST_tc_ld_SLOT01 |
348 | | { 1, 44, 45, 0, 0 }, // 39 LD_tc_ld_SLOT0 |
349 | | { 1, 35, 36, 0, 0 }, // 40 V4LDST_tc_st_SLOT0 |
350 | | { 1, 34, 35, 0, 0 }, // 41 V4LDST_tc_ld_SLOT01 |
351 | | { 1, 42, 43, 0, 0 }, // 42 LD_tc_3or4stall_SLOT0 |
352 | | { 1, 45, 48, 0, 0 }, // 43 CVI_VM_LD |
353 | | { 1, 26, 27, 0, 0 }, // 44 M_tc_2_SLOT23 |
354 | | { 1, 31, 32, 0, 0 }, // 45 S_3op_tc_3x_SLOT23 |
355 | | { 1, 44, 45, 0, 0 }, // 46 ST_tc_ld_SLOT0 |
356 | | { 1, 48, 49, 0, 0 }, // 47 V2LDST_tc_st_SLOT01 |
357 | | { 1, 48, 49, 0, 0 }, // 48 ST_tc_st_SLOT01 |
358 | | { 1, 35, 36, 0, 0 }, // 49 V2LDST_tc_st_SLOT0 |
359 | | { 1, 35, 36, 0, 0 }, // 50 ST_tc_st_SLOT0 |
360 | | { 1, 48, 49, 0, 0 }, // 51 V4LDST_tc_st_SLOT01 |
361 | | { 1, 49, 52, 0, 0 }, // 52 CVI_VM_ST |
362 | | { 1, 28, 29, 0, 0 }, // 53 PREFIX |
363 | | { 1, 52, 54, 0, 0 }, // 54 CVI_VX_LATE |
364 | | { 1, 54, 56, 0, 0 }, // 55 CVI_VA_DV |
365 | | { 1, 56, 58, 0, 0 }, // 56 CVI_VP_LONG |
366 | | { 1, 58, 62, 0, 0 }, // 57 CVI_VM_VP_LDU |
367 | | { 1, 45, 48, 0, 0 }, // 58 CVI_VM_CUR_LD |
368 | | { 1, 62, 64, 0, 0 }, // 59 CVI_VM_TMP_LD |
369 | | { 1, 64, 68, 0, 0 }, // 60 CVI_VM_STU |
370 | | { 1, 68, 70, 0, 0 }, // 61 CVI_VM_NEW_ST |
371 | | { 1, 52, 54, 0, 0 }, // 62 CVI_VX |
372 | | { 1, 70, 72, 0, 0 }, // 63 CVI_VX_DV |
373 | | { 1, 72, 74, 0, 0 }, // 64 CVI_VS |
374 | | { 1, 74, 76, 0, 0 }, // 65 CVI_VP_VS_LONG_EARLY |
375 | | { 1, 56, 58, 0, 0 }, // 66 CVI_VP |
376 | | { 1, 74, 76, 0, 0 }, // 67 CVI_VP_VS_LONG |
377 | | { 1, 76, 78, 0, 0 }, // 68 CVI_HIST |
378 | | { 1, 70, 72, 0, 0 }, // 69 CVI_VX_DV_LONG |
379 | | { 1, 52, 54, 0, 0 }, // 70 CVI_VX_LONG |
380 | | { 1, 72, 74, 0, 0 }, // 71 CVI_VINLANESAT |
381 | | { 1, 74, 76, 0, 0 }, // 72 CVI_VP_VS |
382 | | { 1, 44, 45, 0, 0 }, // 73 ST_tc_3stall_SLOT0 |
383 | | { 0, ~0U, ~0U, ~0U, ~0U } // end marker |
384 | | }; |
385 | | |
386 | | // =============================================================== |
387 | | // Data tables for the new per-operand machine model. |
388 | | |
389 | | static const llvm_ks::MCSchedModel HexagonModelV4 = { |
390 | | 4, // IssueWidth |
391 | | MCSchedModel::DefaultMicroOpBufferSize, |
392 | | MCSchedModel::DefaultLoopMicroOpBufferSize, |
393 | | 1, // LoadLatency |
394 | | MCSchedModel::DefaultHighLatency, |
395 | | MCSchedModel::DefaultMispredictPenalty, |
396 | | 0, // PostRAScheduler |
397 | | 1, // CompleteModel |
398 | | 1, // Processor ID |
399 | | nullptr, nullptr, 0, 0, // No instruction-level machine model. |
400 | | HexagonItinerariesV4}; |
401 | | |
402 | | static const llvm_ks::MCSchedModel HexagonModelV55 = { |
403 | | 4, // IssueWidth |
404 | | MCSchedModel::DefaultMicroOpBufferSize, |
405 | | MCSchedModel::DefaultLoopMicroOpBufferSize, |
406 | | 1, // LoadLatency |
407 | | MCSchedModel::DefaultHighLatency, |
408 | | MCSchedModel::DefaultMispredictPenalty, |
409 | | 0, // PostRAScheduler |
410 | | 1, // CompleteModel |
411 | | 2, // Processor ID |
412 | | nullptr, nullptr, 0, 0, // No instruction-level machine model. |
413 | | HexagonItinerariesV55}; |
414 | | |
415 | | static const llvm_ks::MCSchedModel HexagonModelV60 = { |
416 | | 4, // IssueWidth |
417 | | MCSchedModel::DefaultMicroOpBufferSize, |
418 | | MCSchedModel::DefaultLoopMicroOpBufferSize, |
419 | | 1, // LoadLatency |
420 | | MCSchedModel::DefaultHighLatency, |
421 | | MCSchedModel::DefaultMispredictPenalty, |
422 | | 0, // PostRAScheduler |
423 | | 1, // CompleteModel |
424 | | 3, // Processor ID |
425 | | nullptr, nullptr, 0, 0, // No instruction-level machine model. |
426 | | HexagonItinerariesV60}; |
427 | | |
428 | | // Sorted (by key) array of itineraries for CPU subtype. |
429 | | extern const llvm_ks::SubtargetInfoKV HexagonProcSchedKV[] = { |
430 | | { "hexagonv4", (const void *)&HexagonModelV4 }, |
431 | | { "hexagonv5", (const void *)&HexagonModelV4 }, |
432 | | { "hexagonv55", (const void *)&HexagonModelV55 }, |
433 | | { "hexagonv60", (const void *)&HexagonModelV60 } |
434 | | }; |
435 | | #undef DBGFIELD |
436 | 3.00k | static inline MCSubtargetInfo *createHexagonMCSubtargetInfoImpl(const Triple &TT, StringRef CPU, StringRef FS) { |
437 | 3.00k | return new MCSubtargetInfo(TT, CPU, FS, HexagonFeatureKV, HexagonSubTypeKV, |
438 | 3.00k | HexagonProcSchedKV); |
439 | 3.00k | } |
440 | | |
441 | | } // end llvm namespace |
442 | | #endif // GET_SUBTARGETINFO_MC_DESC |
443 | | |
444 | | |
445 | | #ifdef GET_SUBTARGETINFO_TARGET_DESC |
446 | | #undef GET_SUBTARGETINFO_TARGET_DESC |
447 | | #include "llvm/Support/Debug.h" |
448 | | #include "llvm/Support/raw_ostream.h" |
449 | | // ParseSubtargetFeatures - Parses features string setting specified |
450 | | // subtarget options. |
451 | | void llvm_ks::HexagonSubtarget::ParseSubtargetFeatures(StringRef CPU, StringRef FS) { |
452 | | DEBUG(dbgs() << "\nFeatures:" << FS); |
453 | | DEBUG(dbgs() << "\nCPU:" << CPU << "\n\n"); |
454 | | InitMCProcessorInfo(CPU, FS); |
455 | | const FeatureBitset& Bits = getFeatureBits(); |
456 | | if (Bits[Hexagon::ArchV4] && HexagonArchVersion < V4) HexagonArchVersion = V4; |
457 | | if (Bits[Hexagon::ArchV5] && HexagonArchVersion < V5) HexagonArchVersion = V5; |
458 | | if (Bits[Hexagon::ArchV55] && HexagonArchVersion < V55) HexagonArchVersion = V55; |
459 | | if (Bits[Hexagon::ArchV60] && HexagonArchVersion < V60) HexagonArchVersion = V60; |
460 | | if (Bits[Hexagon::ExtensionHVX]) UseHVXOps = true; |
461 | | if (Bits[Hexagon::ExtensionHVXDbl]) UseHVXDblOps = true; |
462 | | } |
463 | | #endif // GET_SUBTARGETINFO_TARGET_DESC |