xref: /aosp_15_r20/external/llvm/lib/Target/Hexagon/Hexagon.td (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker//===-- Hexagon.td - Describe the Hexagon Target Machine --*- tablegen -*--===//
2*9880d681SAndroid Build Coastguard Worker//
3*9880d681SAndroid Build Coastguard Worker//                     The LLVM Compiler Infrastructure
4*9880d681SAndroid Build Coastguard Worker//
5*9880d681SAndroid Build Coastguard Worker// This file is distributed under the University of Illinois Open Source
6*9880d681SAndroid Build Coastguard Worker// License. See LICENSE.TXT for details.
7*9880d681SAndroid Build Coastguard Worker//
8*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
9*9880d681SAndroid Build Coastguard Worker//
10*9880d681SAndroid Build Coastguard Worker// This is the top level entry point for the Hexagon target.
11*9880d681SAndroid Build Coastguard Worker//
12*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
13*9880d681SAndroid Build Coastguard Worker
14*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
15*9880d681SAndroid Build Coastguard Worker// Target-independent interfaces which we are implementing
16*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
17*9880d681SAndroid Build Coastguard Worker
18*9880d681SAndroid Build Coastguard Workerinclude "llvm/Target/Target.td"
19*9880d681SAndroid Build Coastguard Worker
20*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
21*9880d681SAndroid Build Coastguard Worker// Hexagon Subtarget features.
22*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
23*9880d681SAndroid Build Coastguard Worker
24*9880d681SAndroid Build Coastguard Worker// Hexagon Architectures
25*9880d681SAndroid Build Coastguard Workerdef ArchV4:  SubtargetFeature<"v4",  "HexagonArchVersion", "V4",  "Hexagon V4">;
26*9880d681SAndroid Build Coastguard Workerdef ArchV5:  SubtargetFeature<"v5",  "HexagonArchVersion", "V5",  "Hexagon V5">;
27*9880d681SAndroid Build Coastguard Workerdef ArchV55: SubtargetFeature<"v55", "HexagonArchVersion", "V55", "Hexagon V55">;
28*9880d681SAndroid Build Coastguard Workerdef ArchV60: SubtargetFeature<"v60", "HexagonArchVersion", "V60", "Hexagon V60">;
29*9880d681SAndroid Build Coastguard Worker
30*9880d681SAndroid Build Coastguard Worker// Hexagon ISA Extensions
31*9880d681SAndroid Build Coastguard Workerdef ExtensionHVX: SubtargetFeature<"hvx", "UseHVXOps",
32*9880d681SAndroid Build Coastguard Worker                                   "true", "Hexagon HVX instructions">;
33*9880d681SAndroid Build Coastguard Workerdef ExtensionHVXDbl: SubtargetFeature<"hvx-double", "UseHVXDblOps",
34*9880d681SAndroid Build Coastguard Worker                                   "true", "Hexagon HVX Double instructions">;
35*9880d681SAndroid Build Coastguard Worker
36*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
37*9880d681SAndroid Build Coastguard Worker// Hexagon Instruction Predicate Definitions.
38*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
39*9880d681SAndroid Build Coastguard Workerdef HasV5T             : Predicate<"HST->hasV5TOps()">;
40*9880d681SAndroid Build Coastguard Workerdef NoV5T              : Predicate<"!HST->hasV5TOps()">;
41*9880d681SAndroid Build Coastguard Workerdef HasV55T            : Predicate<"HST->hasV55TOps()">,
42*9880d681SAndroid Build Coastguard Worker                         AssemblerPredicate<"ArchV55">;
43*9880d681SAndroid Build Coastguard Workerdef HasV60T            : Predicate<"HST->hasV60TOps()">,
44*9880d681SAndroid Build Coastguard Worker                         AssemblerPredicate<"ArchV60">;
45*9880d681SAndroid Build Coastguard Workerdef UseMEMOP           : Predicate<"HST->useMemOps()">;
46*9880d681SAndroid Build Coastguard Workerdef IEEERndNearV5T     : Predicate<"HST->modeIEEERndNear()">;
47*9880d681SAndroid Build Coastguard Workerdef UseHVXDbl          : Predicate<"HST->useHVXDblOps()">,
48*9880d681SAndroid Build Coastguard Worker                         AssemblerPredicate<"ExtensionHVXDbl">;
49*9880d681SAndroid Build Coastguard Workerdef UseHVXSgl          : Predicate<"HST->useHVXSglOps()">;
50*9880d681SAndroid Build Coastguard Workerdef UseHVX             : Predicate<"HST->useHVXSglOps() ||HST->useHVXDblOps()">,
51*9880d681SAndroid Build Coastguard Worker                         AssemblerPredicate<"ExtensionHVX">;
52*9880d681SAndroid Build Coastguard Worker
53*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
54*9880d681SAndroid Build Coastguard Worker// Classes used for relation maps.
55*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
56*9880d681SAndroid Build Coastguard Worker
57*9880d681SAndroid Build Coastguard Workerclass ImmRegShl;
58*9880d681SAndroid Build Coastguard Worker// PredRel - Filter class used to relate non-predicated instructions with their
59*9880d681SAndroid Build Coastguard Worker// predicated forms.
60*9880d681SAndroid Build Coastguard Workerclass PredRel;
61*9880d681SAndroid Build Coastguard Worker// PredNewRel - Filter class used to relate predicated instructions with their
62*9880d681SAndroid Build Coastguard Worker// predicate-new forms.
63*9880d681SAndroid Build Coastguard Workerclass PredNewRel: PredRel;
64*9880d681SAndroid Build Coastguard Worker// ImmRegRel - Filter class used to relate instructions having reg-reg form
65*9880d681SAndroid Build Coastguard Worker// with their reg-imm counterparts.
66*9880d681SAndroid Build Coastguard Workerclass ImmRegRel;
67*9880d681SAndroid Build Coastguard Worker// NewValueRel - Filter class used to relate regular store instructions with
68*9880d681SAndroid Build Coastguard Worker// their new-value store form.
69*9880d681SAndroid Build Coastguard Workerclass NewValueRel: PredNewRel;
70*9880d681SAndroid Build Coastguard Worker// NewValueRel - Filter class used to relate load/store instructions having
71*9880d681SAndroid Build Coastguard Worker// different addressing modes with each other.
72*9880d681SAndroid Build Coastguard Workerclass AddrModeRel: NewValueRel;
73*9880d681SAndroid Build Coastguard Workerclass IntrinsicsRel;
74*9880d681SAndroid Build Coastguard Worker
75*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
76*9880d681SAndroid Build Coastguard Worker// Generate mapping table to relate non-predicate instructions with their
77*9880d681SAndroid Build Coastguard Worker// predicated formats - true and false.
78*9880d681SAndroid Build Coastguard Worker//
79*9880d681SAndroid Build Coastguard Worker
80*9880d681SAndroid Build Coastguard Workerdef getPredOpcode : InstrMapping {
81*9880d681SAndroid Build Coastguard Worker  let FilterClass = "PredRel";
82*9880d681SAndroid Build Coastguard Worker  // Instructions with the same BaseOpcode and isNVStore values form a row.
83*9880d681SAndroid Build Coastguard Worker  let RowFields = ["BaseOpcode", "isNVStore", "PNewValue", "isNT"];
84*9880d681SAndroid Build Coastguard Worker  // Instructions with the same predicate sense form a column.
85*9880d681SAndroid Build Coastguard Worker  let ColFields = ["PredSense"];
86*9880d681SAndroid Build Coastguard Worker  // The key column is the unpredicated instructions.
87*9880d681SAndroid Build Coastguard Worker  let KeyCol = [""];
88*9880d681SAndroid Build Coastguard Worker  // Value columns are PredSense=true and PredSense=false
89*9880d681SAndroid Build Coastguard Worker  let ValueCols = [["true"], ["false"]];
90*9880d681SAndroid Build Coastguard Worker}
91*9880d681SAndroid Build Coastguard Worker
92*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
93*9880d681SAndroid Build Coastguard Worker// Generate mapping table to relate predicate-true instructions with their
94*9880d681SAndroid Build Coastguard Worker// predicate-false forms
95*9880d681SAndroid Build Coastguard Worker//
96*9880d681SAndroid Build Coastguard Workerdef getFalsePredOpcode : InstrMapping {
97*9880d681SAndroid Build Coastguard Worker  let FilterClass = "PredRel";
98*9880d681SAndroid Build Coastguard Worker  let RowFields = ["BaseOpcode", "PNewValue", "isNVStore", "isBrTaken", "isNT"];
99*9880d681SAndroid Build Coastguard Worker  let ColFields = ["PredSense"];
100*9880d681SAndroid Build Coastguard Worker  let KeyCol = ["true"];
101*9880d681SAndroid Build Coastguard Worker  let ValueCols = [["false"]];
102*9880d681SAndroid Build Coastguard Worker}
103*9880d681SAndroid Build Coastguard Worker
104*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
105*9880d681SAndroid Build Coastguard Worker// Generate mapping table to relate predicate-false instructions with their
106*9880d681SAndroid Build Coastguard Worker// predicate-true forms
107*9880d681SAndroid Build Coastguard Worker//
108*9880d681SAndroid Build Coastguard Workerdef getTruePredOpcode : InstrMapping {
109*9880d681SAndroid Build Coastguard Worker  let FilterClass = "PredRel";
110*9880d681SAndroid Build Coastguard Worker  let RowFields = ["BaseOpcode", "PNewValue", "isNVStore", "isBrTaken", "isNT"];
111*9880d681SAndroid Build Coastguard Worker  let ColFields = ["PredSense"];
112*9880d681SAndroid Build Coastguard Worker  let KeyCol = ["false"];
113*9880d681SAndroid Build Coastguard Worker  let ValueCols = [["true"]];
114*9880d681SAndroid Build Coastguard Worker}
115*9880d681SAndroid Build Coastguard Worker
116*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
117*9880d681SAndroid Build Coastguard Worker// Generate mapping table to relate predicated instructions with their .new
118*9880d681SAndroid Build Coastguard Worker// format.
119*9880d681SAndroid Build Coastguard Worker//
120*9880d681SAndroid Build Coastguard Workerdef getPredNewOpcode : InstrMapping {
121*9880d681SAndroid Build Coastguard Worker  let FilterClass = "PredNewRel";
122*9880d681SAndroid Build Coastguard Worker  let RowFields = ["BaseOpcode", "PredSense", "isNVStore", "isBrTaken"];
123*9880d681SAndroid Build Coastguard Worker  let ColFields = ["PNewValue"];
124*9880d681SAndroid Build Coastguard Worker  let KeyCol = [""];
125*9880d681SAndroid Build Coastguard Worker  let ValueCols = [["new"]];
126*9880d681SAndroid Build Coastguard Worker}
127*9880d681SAndroid Build Coastguard Worker
128*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
129*9880d681SAndroid Build Coastguard Worker// Generate mapping table to relate .new predicated instructions with their old
130*9880d681SAndroid Build Coastguard Worker// format.
131*9880d681SAndroid Build Coastguard Worker//
132*9880d681SAndroid Build Coastguard Workerdef getPredOldOpcode : InstrMapping {
133*9880d681SAndroid Build Coastguard Worker  let FilterClass = "PredNewRel";
134*9880d681SAndroid Build Coastguard Worker  let RowFields = ["BaseOpcode", "PredSense", "isNVStore"];
135*9880d681SAndroid Build Coastguard Worker  let ColFields = ["PNewValue"];
136*9880d681SAndroid Build Coastguard Worker  let KeyCol = ["new"];
137*9880d681SAndroid Build Coastguard Worker  let ValueCols = [[""]];
138*9880d681SAndroid Build Coastguard Worker}
139*9880d681SAndroid Build Coastguard Worker
140*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
141*9880d681SAndroid Build Coastguard Worker// Generate mapping table to relate store instructions with their new-value
142*9880d681SAndroid Build Coastguard Worker// format.
143*9880d681SAndroid Build Coastguard Worker//
144*9880d681SAndroid Build Coastguard Workerdef getNewValueOpcode : InstrMapping {
145*9880d681SAndroid Build Coastguard Worker  let FilterClass = "NewValueRel";
146*9880d681SAndroid Build Coastguard Worker  let RowFields = ["BaseOpcode", "PredSense", "PNewValue", "addrMode", "isNT"];
147*9880d681SAndroid Build Coastguard Worker  let ColFields = ["NValueST"];
148*9880d681SAndroid Build Coastguard Worker  let KeyCol = ["false"];
149*9880d681SAndroid Build Coastguard Worker  let ValueCols = [["true"]];
150*9880d681SAndroid Build Coastguard Worker}
151*9880d681SAndroid Build Coastguard Worker
152*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
153*9880d681SAndroid Build Coastguard Worker// Generate mapping table to relate new-value store instructions with their old
154*9880d681SAndroid Build Coastguard Worker// format.
155*9880d681SAndroid Build Coastguard Worker//
156*9880d681SAndroid Build Coastguard Workerdef getNonNVStore : InstrMapping {
157*9880d681SAndroid Build Coastguard Worker  let FilterClass = "NewValueRel";
158*9880d681SAndroid Build Coastguard Worker  let RowFields = ["BaseOpcode", "PredSense", "PNewValue", "addrMode", "isNT"];
159*9880d681SAndroid Build Coastguard Worker  let ColFields = ["NValueST"];
160*9880d681SAndroid Build Coastguard Worker  let KeyCol = ["true"];
161*9880d681SAndroid Build Coastguard Worker  let ValueCols = [["false"]];
162*9880d681SAndroid Build Coastguard Worker}
163*9880d681SAndroid Build Coastguard Worker
164*9880d681SAndroid Build Coastguard Workerdef getBaseWithImmOffset : InstrMapping {
165*9880d681SAndroid Build Coastguard Worker  let FilterClass = "AddrModeRel";
166*9880d681SAndroid Build Coastguard Worker  let RowFields = ["CextOpcode", "PredSense", "PNewValue", "isNVStore",
167*9880d681SAndroid Build Coastguard Worker                   "isFloat"];
168*9880d681SAndroid Build Coastguard Worker  let ColFields = ["addrMode"];
169*9880d681SAndroid Build Coastguard Worker  let KeyCol = ["Absolute"];
170*9880d681SAndroid Build Coastguard Worker  let ValueCols = [["BaseImmOffset"]];
171*9880d681SAndroid Build Coastguard Worker}
172*9880d681SAndroid Build Coastguard Worker
173*9880d681SAndroid Build Coastguard Workerdef getAbsoluteForm : InstrMapping {
174*9880d681SAndroid Build Coastguard Worker  let FilterClass = "AddrModeRel";
175*9880d681SAndroid Build Coastguard Worker  let RowFields = ["CextOpcode", "PredSense", "PNewValue", "isNVStore",
176*9880d681SAndroid Build Coastguard Worker                   "isFloat"];
177*9880d681SAndroid Build Coastguard Worker  let ColFields = ["addrMode"];
178*9880d681SAndroid Build Coastguard Worker  let KeyCol = ["BaseImmOffset"];
179*9880d681SAndroid Build Coastguard Worker  let ValueCols = [["Absolute"]];
180*9880d681SAndroid Build Coastguard Worker}
181*9880d681SAndroid Build Coastguard Worker
182*9880d681SAndroid Build Coastguard Workerdef getBaseWithRegOffset : InstrMapping {
183*9880d681SAndroid Build Coastguard Worker  let FilterClass = "AddrModeRel";
184*9880d681SAndroid Build Coastguard Worker  let RowFields = ["CextOpcode", "PredSense", "PNewValue", "isNVStore"];
185*9880d681SAndroid Build Coastguard Worker  let ColFields = ["addrMode"];
186*9880d681SAndroid Build Coastguard Worker  let KeyCol = ["BaseImmOffset"];
187*9880d681SAndroid Build Coastguard Worker  let ValueCols = [["BaseRegOffset"]];
188*9880d681SAndroid Build Coastguard Worker}
189*9880d681SAndroid Build Coastguard Worker
190*9880d681SAndroid Build Coastguard Workerdef xformRegToImmOffset : InstrMapping {
191*9880d681SAndroid Build Coastguard Worker  let FilterClass = "AddrModeRel";
192*9880d681SAndroid Build Coastguard Worker  let RowFields = ["CextOpcode", "PredSense", "PNewValue", "isNVStore"];
193*9880d681SAndroid Build Coastguard Worker  let ColFields = ["addrMode"];
194*9880d681SAndroid Build Coastguard Worker  let KeyCol = ["BaseRegOffset"];
195*9880d681SAndroid Build Coastguard Worker  let ValueCols = [["BaseImmOffset"]];
196*9880d681SAndroid Build Coastguard Worker}
197*9880d681SAndroid Build Coastguard Worker
198*9880d681SAndroid Build Coastguard Workerdef getBaseWithLongOffset : InstrMapping {
199*9880d681SAndroid Build Coastguard Worker  let FilterClass = "ImmRegShl";
200*9880d681SAndroid Build Coastguard Worker  let RowFields = ["CextOpcode", "PredSense", "PNewValue", "isNVStore"];
201*9880d681SAndroid Build Coastguard Worker  let ColFields = ["addrMode"];
202*9880d681SAndroid Build Coastguard Worker  let KeyCol = ["BaseRegOffset"];
203*9880d681SAndroid Build Coastguard Worker  let ValueCols = [["BaseLongOffset"]];
204*9880d681SAndroid Build Coastguard Worker}
205*9880d681SAndroid Build Coastguard Worker
206*9880d681SAndroid Build Coastguard Workerdef getRegForm : InstrMapping {
207*9880d681SAndroid Build Coastguard Worker  let FilterClass = "ImmRegRel";
208*9880d681SAndroid Build Coastguard Worker  let RowFields = ["CextOpcode", "PredSense", "PNewValue"];
209*9880d681SAndroid Build Coastguard Worker  let ColFields = ["InputType"];
210*9880d681SAndroid Build Coastguard Worker  let KeyCol = ["imm"];
211*9880d681SAndroid Build Coastguard Worker  let ValueCols = [["reg"]];
212*9880d681SAndroid Build Coastguard Worker}
213*9880d681SAndroid Build Coastguard Worker
214*9880d681SAndroid Build Coastguard Workerdef getRegShlForm : InstrMapping {
215*9880d681SAndroid Build Coastguard Worker  let FilterClass = "ImmRegShl";
216*9880d681SAndroid Build Coastguard Worker  let RowFields = ["CextOpcode", "PredSense", "PNewValue", "isNVStore"];
217*9880d681SAndroid Build Coastguard Worker  let ColFields = ["InputType"];
218*9880d681SAndroid Build Coastguard Worker  let KeyCol = ["imm"];
219*9880d681SAndroid Build Coastguard Worker  let ValueCols = [["reg"]];
220*9880d681SAndroid Build Coastguard Worker}
221*9880d681SAndroid Build Coastguard Worker
222*9880d681SAndroid Build Coastguard Workerdef notTakenBranchPrediction : InstrMapping {
223*9880d681SAndroid Build Coastguard Worker  let FilterClass = "PredRel";
224*9880d681SAndroid Build Coastguard Worker  let RowFields = ["BaseOpcode", "PNewValue",  "PredSense", "isBranch", "isPredicated"];
225*9880d681SAndroid Build Coastguard Worker  let ColFields = ["isBrTaken"];
226*9880d681SAndroid Build Coastguard Worker  let KeyCol = ["true"];
227*9880d681SAndroid Build Coastguard Worker  let ValueCols = [["false"]];
228*9880d681SAndroid Build Coastguard Worker}
229*9880d681SAndroid Build Coastguard Worker
230*9880d681SAndroid Build Coastguard Workerdef takenBranchPrediction : InstrMapping {
231*9880d681SAndroid Build Coastguard Worker  let FilterClass = "PredRel";
232*9880d681SAndroid Build Coastguard Worker  let RowFields = ["BaseOpcode", "PNewValue",  "PredSense", "isBranch", "isPredicated"];
233*9880d681SAndroid Build Coastguard Worker  let ColFields = ["isBrTaken"];
234*9880d681SAndroid Build Coastguard Worker  let KeyCol = ["false"];
235*9880d681SAndroid Build Coastguard Worker  let ValueCols = [["true"]];
236*9880d681SAndroid Build Coastguard Worker}
237*9880d681SAndroid Build Coastguard Worker
238*9880d681SAndroid Build Coastguard Workerdef getRealHWInstr : InstrMapping {
239*9880d681SAndroid Build Coastguard Worker  let FilterClass = "IntrinsicsRel";
240*9880d681SAndroid Build Coastguard Worker  let RowFields = ["BaseOpcode"];
241*9880d681SAndroid Build Coastguard Worker  let ColFields = ["InstrType"];
242*9880d681SAndroid Build Coastguard Worker  let KeyCol = ["Pseudo"];
243*9880d681SAndroid Build Coastguard Worker  let ValueCols = [["Pseudo"], ["Real"]];
244*9880d681SAndroid Build Coastguard Worker}
245*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
246*9880d681SAndroid Build Coastguard Worker// Register File, Calling Conv, Instruction Descriptions
247*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
248*9880d681SAndroid Build Coastguard Workerinclude "HexagonSchedule.td"
249*9880d681SAndroid Build Coastguard Workerinclude "HexagonRegisterInfo.td"
250*9880d681SAndroid Build Coastguard Workerinclude "HexagonCallingConv.td"
251*9880d681SAndroid Build Coastguard Workerinclude "HexagonInstrInfo.td"
252*9880d681SAndroid Build Coastguard Workerinclude "HexagonIntrinsics.td"
253*9880d681SAndroid Build Coastguard Workerinclude "HexagonIntrinsicsDerived.td"
254*9880d681SAndroid Build Coastguard Worker
255*9880d681SAndroid Build Coastguard Workerdef HexagonInstrInfo : InstrInfo;
256*9880d681SAndroid Build Coastguard Worker
257*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
258*9880d681SAndroid Build Coastguard Worker// Hexagon processors supported.
259*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
260*9880d681SAndroid Build Coastguard Worker
261*9880d681SAndroid Build Coastguard Workerclass Proc<string Name, SchedMachineModel Model,
262*9880d681SAndroid Build Coastguard Worker           list<SubtargetFeature> Features>
263*9880d681SAndroid Build Coastguard Worker : ProcessorModel<Name, Model, Features>;
264*9880d681SAndroid Build Coastguard Worker
265*9880d681SAndroid Build Coastguard Workerdef : Proc<"hexagonv4",  HexagonModelV4,
266*9880d681SAndroid Build Coastguard Worker           [ArchV4]>;
267*9880d681SAndroid Build Coastguard Workerdef : Proc<"hexagonv5",  HexagonModelV4,
268*9880d681SAndroid Build Coastguard Worker           [ArchV4, ArchV5]>;
269*9880d681SAndroid Build Coastguard Workerdef : Proc<"hexagonv55", HexagonModelV55,
270*9880d681SAndroid Build Coastguard Worker           [ArchV4, ArchV5, ArchV55]>;
271*9880d681SAndroid Build Coastguard Workerdef : Proc<"hexagonv60", HexagonModelV60,
272*9880d681SAndroid Build Coastguard Worker           [ArchV4, ArchV5, ArchV55, ArchV60, ExtensionHVX]>;
273*9880d681SAndroid Build Coastguard Worker
274*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
275*9880d681SAndroid Build Coastguard Worker// Declare the target which we are implementing
276*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
277*9880d681SAndroid Build Coastguard Worker
278*9880d681SAndroid Build Coastguard Workerdef HexagonAsmParser : AsmParser {
279*9880d681SAndroid Build Coastguard Worker  let ShouldEmitMatchRegisterAltName = 1;
280*9880d681SAndroid Build Coastguard Worker  bit HasMnemonicFirst = 0;
281*9880d681SAndroid Build Coastguard Worker}
282*9880d681SAndroid Build Coastguard Worker
283*9880d681SAndroid Build Coastguard Workerdef HexagonAsmParserVariant : AsmParserVariant {
284*9880d681SAndroid Build Coastguard Worker  int Variant = 0;
285*9880d681SAndroid Build Coastguard Worker  string TokenizingCharacters = "#()=:.<>!+*";
286*9880d681SAndroid Build Coastguard Worker}
287*9880d681SAndroid Build Coastguard Worker
288*9880d681SAndroid Build Coastguard Workerdef Hexagon : Target {
289*9880d681SAndroid Build Coastguard Worker  // Pull in Instruction Info:
290*9880d681SAndroid Build Coastguard Worker  let InstructionSet = HexagonInstrInfo;
291*9880d681SAndroid Build Coastguard Worker  let AssemblyParsers = [HexagonAsmParser];
292*9880d681SAndroid Build Coastguard Worker  let AssemblyParserVariants = [HexagonAsmParserVariant];
293*9880d681SAndroid Build Coastguard Worker}
294