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