10b57cec5SDimitry Andric//==- HexagonInstrFormats.td - Hexagon Instruction Formats --*- tablegen -*-==// 20b57cec5SDimitry Andric// 30b57cec5SDimitry Andric// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 40b57cec5SDimitry Andric// See https://llvm.org/LICENSE.txt for license information. 50b57cec5SDimitry Andric// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 60b57cec5SDimitry Andric// 70b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 80b57cec5SDimitry Andric 90b57cec5SDimitry Andric// Addressing modes for load/store instructions 100b57cec5SDimitry Andricclass AddrModeType<bits<3> value> { 110b57cec5SDimitry Andric bits<3> Value = value; 120b57cec5SDimitry Andric} 130b57cec5SDimitry Andric 140b57cec5SDimitry Andricdef NoAddrMode : AddrModeType<0>; // No addressing mode 150b57cec5SDimitry Andricdef Absolute : AddrModeType<1>; // Absolute addressing mode 160b57cec5SDimitry Andricdef AbsoluteSet : AddrModeType<2>; // Absolute set addressing mode 170b57cec5SDimitry Andricdef BaseImmOffset : AddrModeType<3>; // Indirect with offset 180b57cec5SDimitry Andricdef BaseLongOffset : AddrModeType<4>; // Indirect with long offset 190b57cec5SDimitry Andricdef BaseRegOffset : AddrModeType<5>; // Indirect with register offset 200b57cec5SDimitry Andricdef PostInc : AddrModeType<6>; // Post increment addressing mode 210b57cec5SDimitry Andric 220b57cec5SDimitry Andricclass MemAccessSize<bits<4> value> { 230b57cec5SDimitry Andric bits<4> Value = value; 240b57cec5SDimitry Andric} 250b57cec5SDimitry Andric 260b57cec5SDimitry Andric// These numbers must match the MemAccessSize enumeration values in 270b57cec5SDimitry Andric// HexagonBaseInfo.h. 280b57cec5SDimitry Andricdef NoMemAccess : MemAccessSize<0>; 290b57cec5SDimitry Andricdef ByteAccess : MemAccessSize<1>; 300b57cec5SDimitry Andricdef HalfWordAccess : MemAccessSize<2>; 310b57cec5SDimitry Andricdef WordAccess : MemAccessSize<3>; 320b57cec5SDimitry Andricdef DoubleWordAccess : MemAccessSize<4>; 330b57cec5SDimitry Andricdef HVXVectorAccess : MemAccessSize<5>; 340b57cec5SDimitry Andric 350b57cec5SDimitry Andric 360b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 370b57cec5SDimitry Andric// Instruction Class Declaration + 380b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 390b57cec5SDimitry Andric 405ffd83dbSDimitry Andric// "Parse" bits are explicitly NOT defined in the opcode space to prevent 415ffd83dbSDimitry Andric// TableGen from using them for generation of the decoder tables. 420b57cec5SDimitry Andricclass OpcodeHexagon { 430b57cec5SDimitry Andric field bits<32> Inst = ?; // Default to an invalid insn. 440b57cec5SDimitry Andric bits<4> IClass = 0; // ICLASS 450b57cec5SDimitry Andric bits<1> zero = 0; 460b57cec5SDimitry Andric 470b57cec5SDimitry Andric let Inst{31-28} = IClass; 480b57cec5SDimitry Andric} 490b57cec5SDimitry Andric 500b57cec5SDimitry Andricclass InstHexagon<dag outs, dag ins, string asmstr, list<dag> pattern, 510b57cec5SDimitry Andric string cstr, InstrItinClass itin, IType type> 520b57cec5SDimitry Andric : Instruction { 530b57cec5SDimitry Andric let Namespace = "Hexagon"; 540b57cec5SDimitry Andric 550b57cec5SDimitry Andric dag OutOperandList = outs; 560b57cec5SDimitry Andric dag InOperandList = ins; 570b57cec5SDimitry Andric let AsmString = asmstr; 580b57cec5SDimitry Andric let Pattern = pattern; 590b57cec5SDimitry Andric let Constraints = cstr; 600b57cec5SDimitry Andric let Itinerary = itin; 610b57cec5SDimitry Andric let Size = 4; 620b57cec5SDimitry Andric 630b57cec5SDimitry Andric // SoftFail is a field the disassembler can use to provide a way for 640b57cec5SDimitry Andric // instructions to not match without killing the whole decode process. It is 650b57cec5SDimitry Andric // mainly used for ARM, but Tablegen expects this field to exist or it fails 660b57cec5SDimitry Andric // to build the decode table. 670b57cec5SDimitry Andric field bits<32> SoftFail = 0; 680b57cec5SDimitry Andric 690b57cec5SDimitry Andric // *** Must match MCTargetDesc/HexagonBaseInfo.h *** 700b57cec5SDimitry Andric 710b57cec5SDimitry Andric // Instruction type according to the ISA. 720b57cec5SDimitry Andric IType Type = type; 730b57cec5SDimitry Andric let TSFlags{6-0} = Type.Value; 740b57cec5SDimitry Andric 750b57cec5SDimitry Andric // Solo instructions, i.e., those that cannot be in a packet with others. 760b57cec5SDimitry Andric bits<1> isSolo = 0; 770b57cec5SDimitry Andric let TSFlags{7} = isSolo; 780b57cec5SDimitry Andric // Packed only with A or X-type instructions. 790b57cec5SDimitry Andric bits<1> isSoloAX = 0; 800b57cec5SDimitry Andric let TSFlags{8} = isSoloAX; 810b57cec5SDimitry Andric // Restricts slot 1 to ALU-only instructions. 820b57cec5SDimitry Andric bits<1> isRestrictSlot1AOK = 0; 830b57cec5SDimitry Andric let TSFlags{9} = isRestrictSlot1AOK; 840b57cec5SDimitry Andric 850b57cec5SDimitry Andric // Predicated instructions. 860b57cec5SDimitry Andric bits<1> isPredicated = 0; 870b57cec5SDimitry Andric let TSFlags{10} = isPredicated; 880b57cec5SDimitry Andric bits<1> isPredicatedFalse = 0; 890b57cec5SDimitry Andric let TSFlags{11} = isPredicatedFalse; 900b57cec5SDimitry Andric bits<1> isPredicatedNew = 0; 910b57cec5SDimitry Andric let TSFlags{12} = isPredicatedNew; 920b57cec5SDimitry Andric bits<1> isPredicateLate = 0; 930b57cec5SDimitry Andric let TSFlags{13} = isPredicateLate; // Late predicate producer insn. 940b57cec5SDimitry Andric 950b57cec5SDimitry Andric // New-value insn helper fields. 960b57cec5SDimitry Andric bits<1> isNewValue = 0; 970b57cec5SDimitry Andric let TSFlags{14} = isNewValue; // New-value consumer insn. 980b57cec5SDimitry Andric bits<1> hasNewValue = 0; 990b57cec5SDimitry Andric let TSFlags{15} = hasNewValue; // New-value producer insn. 1000b57cec5SDimitry Andric bits<3> opNewValue = 0; 1010b57cec5SDimitry Andric let TSFlags{18-16} = opNewValue; // New-value produced operand. 1020b57cec5SDimitry Andric bits<1> isNVStorable = 0; 1030b57cec5SDimitry Andric let TSFlags{19} = isNVStorable; // Store that can become new-value store. 1040b57cec5SDimitry Andric bits<1> isNVStore = 0; 1050b57cec5SDimitry Andric let TSFlags{20} = isNVStore; // New-value store insn. 1060b57cec5SDimitry Andric bits<1> isCVLoadable = 0; 1070b57cec5SDimitry Andric let TSFlags{21} = isCVLoadable; // Load that can become cur-value load. 1080b57cec5SDimitry Andric bits<1> isCVLoad = 0; 1090b57cec5SDimitry Andric let TSFlags{22} = isCVLoad; // Cur-value load insn. 1100b57cec5SDimitry Andric 1110b57cec5SDimitry Andric // Immediate extender helper fields. 1120b57cec5SDimitry Andric bits<1> isExtendable = 0; 1130b57cec5SDimitry Andric let TSFlags{23} = isExtendable; // Insn may be extended. 1140b57cec5SDimitry Andric bits<1> isExtended = 0; 1150b57cec5SDimitry Andric let TSFlags{24} = isExtended; // Insn must be extended. 1160b57cec5SDimitry Andric bits<3> opExtendable = 0; 1170b57cec5SDimitry Andric let TSFlags{27-25} = opExtendable; // Which operand may be extended. 1180b57cec5SDimitry Andric bits<1> isExtentSigned = 0; 1190b57cec5SDimitry Andric let TSFlags{28} = isExtentSigned; // Signed or unsigned range. 1200b57cec5SDimitry Andric bits<5> opExtentBits = 0; 1210b57cec5SDimitry Andric let TSFlags{33-29} = opExtentBits; //Number of bits of range before extending. 1220b57cec5SDimitry Andric bits<2> opExtentAlign = 0; 1230b57cec5SDimitry Andric let TSFlags{35-34} = opExtentAlign; // Alignment exponent before extending. 1240b57cec5SDimitry Andric 1250b57cec5SDimitry Andric bit cofMax1 = 0; 1260b57cec5SDimitry Andric let TSFlags{36} = cofMax1; 1270b57cec5SDimitry Andric bit cofRelax1 = 0; 1280b57cec5SDimitry Andric let TSFlags{37} = cofRelax1; 1290b57cec5SDimitry Andric bit cofRelax2 = 0; 1300b57cec5SDimitry Andric let TSFlags{38} = cofRelax2; 1310b57cec5SDimitry Andric 1320b57cec5SDimitry Andric bit isRestrictNoSlot1Store = 0; 1330b57cec5SDimitry Andric let TSFlags{39} = isRestrictNoSlot1Store; 1340b57cec5SDimitry Andric 1350b57cec5SDimitry Andric // Addressing mode for load/store instructions. 1360b57cec5SDimitry Andric AddrModeType addrMode = NoAddrMode; 137*bdd1243dSDimitry Andric let TSFlags{42-40} = addrMode.Value; 1380b57cec5SDimitry Andric 1390b57cec5SDimitry Andric // Memory access size for mem access instructions (load/store) 1400b57cec5SDimitry Andric MemAccessSize accessSize = NoMemAccess; 141*bdd1243dSDimitry Andric let TSFlags{46-43} = accessSize.Value; 1420b57cec5SDimitry Andric 1430b57cec5SDimitry Andric bits<1> isTaken = 0; 144*bdd1243dSDimitry Andric let TSFlags {47} = isTaken; // Branch prediction. 1450b57cec5SDimitry Andric 1460b57cec5SDimitry Andric bits<1> isFP = 0; 147*bdd1243dSDimitry Andric let TSFlags {48} = isFP; // Floating-point. 1480b57cec5SDimitry Andric 1490b57cec5SDimitry Andric bits<1> hasNewValue2 = 0; 150*bdd1243dSDimitry Andric let TSFlags{50} = hasNewValue2; // Second New-value producer insn. 1510b57cec5SDimitry Andric bits<3> opNewValue2 = 0; 152*bdd1243dSDimitry Andric let TSFlags{53-51} = opNewValue2; // Second New-value produced operand. 1530b57cec5SDimitry Andric 1540b57cec5SDimitry Andric bits<1> isAccumulator = 0; 155*bdd1243dSDimitry Andric let TSFlags{54} = isAccumulator; 1560b57cec5SDimitry Andric 1570b57cec5SDimitry Andric bits<1> prefersSlot3 = 0; 158*bdd1243dSDimitry Andric let TSFlags{55} = prefersSlot3; // Complex XU 1590b57cec5SDimitry Andric 1600eae32dcSDimitry Andric bits<1> hasHvxTmp = 0; 161*bdd1243dSDimitry Andric let TSFlags{56} = hasHvxTmp; // vector register vX.tmp false-write 1620b57cec5SDimitry Andric 1630b57cec5SDimitry Andric bit CVINew = 0; 164*bdd1243dSDimitry Andric let TSFlags{58} = CVINew; 1650b57cec5SDimitry Andric 1665ffd83dbSDimitry Andric bit isCVI = 0; 167*bdd1243dSDimitry Andric let TSFlags{59} = isCVI; 168*bdd1243dSDimitry Andric 169*bdd1243dSDimitry Andric bit isHVXALU = 0; 170*bdd1243dSDimitry Andric let TSFlags{60} = isHVXALU; 171*bdd1243dSDimitry Andric 172*bdd1243dSDimitry Andric bit isHVXALU2SRC = 0; 173*bdd1243dSDimitry Andric let TSFlags{61} = isHVXALU2SRC; 174*bdd1243dSDimitry Andric 175*bdd1243dSDimitry Andric bit hasUnaryRestriction = 0; 176*bdd1243dSDimitry Andric let TSFlags{62} = hasUnaryRestriction; 1775ffd83dbSDimitry Andric 1780b57cec5SDimitry Andric // Fields used for relation models. 1790b57cec5SDimitry Andric bit isNonTemporal = 0; 1800b57cec5SDimitry Andric string isNT = ""; // set to "true" for non-temporal vector stores. 1810b57cec5SDimitry Andric string BaseOpcode = ""; 1820b57cec5SDimitry Andric string CextOpcode = ""; 1830b57cec5SDimitry Andric string PredSense = ""; 1840b57cec5SDimitry Andric string PNewValue = ""; 1850b57cec5SDimitry Andric string NValueST = ""; // Set to "true" for new-value stores. 1860b57cec5SDimitry Andric string InputType = ""; // Input is "imm" or "reg" type. 1870b57cec5SDimitry Andric string isFloat = "false"; // Set to "true" for the floating-point load/store. 1880b57cec5SDimitry Andric string isBrTaken = !if(isTaken, "true", "false"); // Set to "true"/"false" for jump instructions 1890b57cec5SDimitry Andric 1900b57cec5SDimitry Andric let PredSense = !if(isPredicated, !if(isPredicatedFalse, "false", "true"), 1910b57cec5SDimitry Andric ""); 1920b57cec5SDimitry Andric let PNewValue = !if(isPredicatedNew, "new", ""); 1930b57cec5SDimitry Andric let NValueST = !if(isNVStore, "true", "false"); 1940b57cec5SDimitry Andric let isNT = !if(isNonTemporal, "true", "false"); 1950b57cec5SDimitry Andric 1960b57cec5SDimitry Andric let hasSideEffects = 0; 1970b57cec5SDimitry Andric // *** Must match MCTargetDesc/HexagonBaseInfo.h *** 1980b57cec5SDimitry Andric} 1990b57cec5SDimitry Andric 2000b57cec5SDimitry Andricclass HInst<dag outs, dag ins, string asmstr, InstrItinClass itin, IType type> : 2010b57cec5SDimitry Andric InstHexagon<outs, ins, asmstr, [], "", itin, type>; 2020b57cec5SDimitry Andric 2030b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 2040b57cec5SDimitry Andric// Instruction Classes Definitions + 2050b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 2060b57cec5SDimitry Andric 2070b57cec5SDimitry Andriclet mayLoad = 1 in 2080b57cec5SDimitry Andricclass LDInst<dag outs, dag ins, string asmstr, list<dag> pattern = [], 2090b57cec5SDimitry Andric string cstr = "", InstrItinClass itin = LD_tc_ld_SLOT01> 2100b57cec5SDimitry Andric : InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeLD>, OpcodeHexagon; 2110b57cec5SDimitry Andric 2120b57cec5SDimitry Andricclass CONSTLDInst<dag outs, dag ins, string asmstr, list<dag> pattern = [], 2130b57cec5SDimitry Andric string cstr = "", InstrItinClass itin = LD_tc_ld_SLOT01> 2140b57cec5SDimitry Andric : InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeLD>, OpcodeHexagon; 2150b57cec5SDimitry Andric 2160b57cec5SDimitry Andriclet mayStore = 1 in 2170b57cec5SDimitry Andricclass STInst<dag outs, dag ins, string asmstr, list<dag> pattern = [], 2180b57cec5SDimitry Andric string cstr = "", InstrItinClass itin = ST_tc_st_SLOT01> 2190b57cec5SDimitry Andric : InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeST>, OpcodeHexagon; 2200b57cec5SDimitry Andric 2210b57cec5SDimitry Andriclet isCodeGenOnly = 1, isPseudo = 1 in 2220b57cec5SDimitry Andricclass Endloop<dag outs, dag ins, string asmstr, list<dag> pattern = [], 2230b57cec5SDimitry Andric string cstr = "", InstrItinClass itin = tc_ENDLOOP> 2240b57cec5SDimitry Andric : InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeENDLOOP>, 2250b57cec5SDimitry Andric OpcodeHexagon; 2260b57cec5SDimitry Andric 2270b57cec5SDimitry Andriclet isCodeGenOnly = 1, isPseudo = 1 in 2280b57cec5SDimitry Andricclass Pseudo<dag outs, dag ins, string asmstr, list<dag> pattern = [], 2290b57cec5SDimitry Andric string cstr = ""> 2300b57cec5SDimitry Andric : InstHexagon<outs, ins, asmstr, pattern, cstr, PSEUDO, TypePSEUDO>, 2310b57cec5SDimitry Andric OpcodeHexagon; 2320b57cec5SDimitry Andric 2330b57cec5SDimitry Andriclet isCodeGenOnly = 1, isPseudo = 1 in 2340b57cec5SDimitry Andricclass PseudoM<dag outs, dag ins, string asmstr, list<dag> pattern = [], 2350b57cec5SDimitry Andric string cstr=""> 2360b57cec5SDimitry Andric : InstHexagon<outs, ins, asmstr, pattern, cstr, PSEUDOM, TypePSEUDO>, 2370b57cec5SDimitry Andric OpcodeHexagon; 2380b57cec5SDimitry Andric 2390b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 2405ffd83dbSDimitry Andric// Special Instructions - 2415ffd83dbSDimitry Andric//===----------------------------------------------------------------------===// 2425ffd83dbSDimitry Andric 2435ffd83dbSDimitry Andric// The 'invalid_decode' instruction is used by the disassembler to 2445ffd83dbSDimitry Andric// show an instruction that didn't decode correctly. This feature 2455ffd83dbSDimitry Andric// is only leveraged in a special disassembler mode that's activated 2465ffd83dbSDimitry Andric// by a command line flag. 2475ffd83dbSDimitry Andricdef tc_invalid : InstrItinClass; 2485ffd83dbSDimitry Andricclass Enc_invalid : OpcodeHexagon { 2495ffd83dbSDimitry Andric} 2505ffd83dbSDimitry Andricdef invalid_decode : HInst< 2515ffd83dbSDimitry Andric(outs ), 2525ffd83dbSDimitry Andric(ins ), 2535ffd83dbSDimitry Andric"<invalid>", 2545ffd83dbSDimitry Andrictc_invalid, TypeALU32_2op>, Enc_invalid { 2555ffd83dbSDimitry Andriclet Inst{13-0} = 0b00000000000000; 2565ffd83dbSDimitry Andriclet Inst{31-16} = 0b0000000000000000; 2575ffd83dbSDimitry Andriclet isCodeGenOnly = 1; 2585ffd83dbSDimitry Andric} 2595ffd83dbSDimitry Andric 2605ffd83dbSDimitry Andric//===----------------------------------------------------------------------===// 2615ffd83dbSDimitry Andric// Duplex Instruction Class Declaration 2625ffd83dbSDimitry Andric//===----------------------------------------------------------------------===// 2635ffd83dbSDimitry Andric 2645ffd83dbSDimitry Andricclass OpcodeDuplex { 2655ffd83dbSDimitry Andric field bits<32> Inst = ?; // Default to an invalid insn. 2665ffd83dbSDimitry Andric bits<4> IClass = 0; // ICLASS 2675ffd83dbSDimitry Andric bits<13> ISubHi = 0; // Low sub-insn 2685ffd83dbSDimitry Andric bits<13> ISubLo = 0; // High sub-insn 2695ffd83dbSDimitry Andric 2705ffd83dbSDimitry Andric let Inst{31-29} = IClass{3-1}; 2715ffd83dbSDimitry Andric let Inst{13} = IClass{0}; 2725ffd83dbSDimitry Andric let Inst{15-14} = 0; 2735ffd83dbSDimitry Andric let Inst{28-16} = ISubHi; 2745ffd83dbSDimitry Andric let Inst{12-0} = ISubLo; 2755ffd83dbSDimitry Andric} 2765ffd83dbSDimitry Andric 277*bdd1243dSDimitry Andricclass InstDuplex<bits<4> iClass, string cstr = ""> : Instruction, 278*bdd1243dSDimitry Andric OpcodeDuplex { 2795ffd83dbSDimitry Andric let Namespace = "Hexagon"; 2805ffd83dbSDimitry Andric IType Type = TypeDUPLEX; // uses slot 0,1 2815ffd83dbSDimitry Andric let isCodeGenOnly = 1; 2825ffd83dbSDimitry Andric let hasSideEffects = 0; 2835ffd83dbSDimitry Andric dag OutOperandList = (outs); 2845ffd83dbSDimitry Andric dag InOperandList = (ins); 2855ffd83dbSDimitry Andric let IClass = iClass; 2865ffd83dbSDimitry Andric let Constraints = cstr; 2875ffd83dbSDimitry Andric let Itinerary = DUPLEX; 2885ffd83dbSDimitry Andric let Size = 4; 2895ffd83dbSDimitry Andric 2905ffd83dbSDimitry Andric // SoftFail is a field the disassembler can use to provide a way for 2915ffd83dbSDimitry Andric // instructions to not match without killing the whole decode process. It is 2925ffd83dbSDimitry Andric // mainly used for ARM, but Tablegen expects this field to exist or it fails 2935ffd83dbSDimitry Andric // to build the decode table. 2945ffd83dbSDimitry Andric field bits<32> SoftFail = 0; 2955ffd83dbSDimitry Andric 2965ffd83dbSDimitry Andric // *** Must match MCTargetDesc/HexagonBaseInfo.h *** 2975ffd83dbSDimitry Andric 2985ffd83dbSDimitry Andric let TSFlags{6-0} = Type.Value; 2995ffd83dbSDimitry Andric 3005ffd83dbSDimitry Andric // Predicated instructions. 3015ffd83dbSDimitry Andric bits<1> isPredicated = 0; 3025ffd83dbSDimitry Andric let TSFlags{7} = isPredicated; 3035ffd83dbSDimitry Andric bits<1> isPredicatedFalse = 0; 3045ffd83dbSDimitry Andric let TSFlags{8} = isPredicatedFalse; 3055ffd83dbSDimitry Andric bits<1> isPredicatedNew = 0; 3065ffd83dbSDimitry Andric let TSFlags{9} = isPredicatedNew; 3075ffd83dbSDimitry Andric 3085ffd83dbSDimitry Andric // New-value insn helper fields. 3095ffd83dbSDimitry Andric bits<1> isNewValue = 0; 3105ffd83dbSDimitry Andric let TSFlags{10} = isNewValue; // New-value consumer insn. 3115ffd83dbSDimitry Andric bits<1> hasNewValue = 0; 3125ffd83dbSDimitry Andric let TSFlags{11} = hasNewValue; // New-value producer insn. 3135ffd83dbSDimitry Andric bits<3> opNewValue = 0; 3145ffd83dbSDimitry Andric let TSFlags{14-12} = opNewValue; // New-value produced operand. 3155ffd83dbSDimitry Andric bits<1> isNVStorable = 0; 3165ffd83dbSDimitry Andric let TSFlags{15} = isNVStorable; // Store that can become new-value store. 3175ffd83dbSDimitry Andric bits<1> isNVStore = 0; 3185ffd83dbSDimitry Andric let TSFlags{16} = isNVStore; // New-value store insn. 3195ffd83dbSDimitry Andric 3205ffd83dbSDimitry Andric // Immediate extender helper fields. 3215ffd83dbSDimitry Andric bits<1> isExtendable = 0; 3225ffd83dbSDimitry Andric let TSFlags{17} = isExtendable; // Insn may be extended. 3235ffd83dbSDimitry Andric bits<1> isExtended = 0; 3245ffd83dbSDimitry Andric let TSFlags{18} = isExtended; // Insn must be extended. 3255ffd83dbSDimitry Andric bits<3> opExtendable = 0; 3265ffd83dbSDimitry Andric let TSFlags{21-19} = opExtendable; // Which operand may be extended. 3275ffd83dbSDimitry Andric bits<1> isExtentSigned = 0; 3285ffd83dbSDimitry Andric let TSFlags{22} = isExtentSigned; // Signed or unsigned range. 3295ffd83dbSDimitry Andric bits<5> opExtentBits = 0; 3305ffd83dbSDimitry Andric let TSFlags{27-23} = opExtentBits; //Number of bits of range before extending. 3315ffd83dbSDimitry Andric bits<2> opExtentAlign = 0; 3325ffd83dbSDimitry Andric let TSFlags{29-28} = opExtentAlign; // Alignment exponent before extending. 3335ffd83dbSDimitry Andric} 3345ffd83dbSDimitry Andric 3355ffd83dbSDimitry Andric//===----------------------------------------------------------------------===// 3360b57cec5SDimitry Andric// Instruction Classes Definitions - 3370b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 3380b57cec5SDimitry Andric 3390b57cec5SDimitry Andricinclude "HexagonInstrFormatsV60.td" 3400b57cec5SDimitry Andricinclude "HexagonInstrFormatsV65.td" 341