// RUN: llvm-tblgen -gen-disassembler -I %p/../../../include %s | FileCheck %s include "llvm/Target/Target.td" class Enc { int Size = 2; bits<16> Inst; } class EncSHIFT opc> : Enc { bits<6> shamt; let Inst{15...14} = {0, 0}; let Inst{13...12} = opc; let Inst{11...6} = shamt; } class EncNOP opc> : Enc { let Inst{15...14} = {0, 0}; let Inst{13...12} = opc; let Inst{11...6} = {0, 0, 0, 0, 0, 0}; } def ShAmtOp : Operand { let DecoderMethod = "decodeShAmt"; let hasCompleteDecoder = false; } class I : Instruction { let InOperandList = in_ops; let OutOperandList = out_ops; } // CHECK-LABEL: static const uint8_t DecoderTable16[67] = { // CHECK-NEXT: OPC_SwitchField, 12, 4, // 0: switch Inst[15:12] { // CHECK-NEXT: 0, 14, // 3: case 0x0: { // CHECK-NEXT: OPC_Scope, 8, // 5: try { // CHECK-NEXT: OPC_CheckField, 6, 6, 0, // 7: check Inst[11:6] == 0x0 // CHECK-NEXT: OPC_Decode, {{[0-9, ]+}}, 0, // 11: decode to NOP using decoder 0 // CHECK-NEXT: // 11: } else try { // CHECK-NEXT: OPC_Decode, {{[0-9, ]+}}, 1, // 15: decode to SHIFT0 using decoder 1 // CHECK-NEXT: // 15: } // CHECK-NEXT: // 15: } // CHECK-NEXT: 1, 14, // 19: case 0x1: { // CHECK-NEXT: OPC_Scope, 8, // 21: try { // CHECK-NEXT: OPC_CheckField, 6, 6, 0, // 23: check Inst[11:6] == 0x0 // CHECK-NEXT: OPC_Decode, {{[0-9, ]+}}, 0, // 27: decode to {{.*}}:NOP using decoder 0 // CHECK-NEXT: // 27: } else try { // CHECK-NEXT: OPC_Decode, {{[0-9, ]+}}, 1, // 31: decode to SHIFT1 using decoder 1 // CHECK-NEXT: // 31: } // CHECK-NEXT: // 31: } // CHECK-NEXT: 2, 14, // 35: case 0x2: { // CHECK-NEXT: OPC_Scope, 8, // 37: try { // CHECK-NEXT: OPC_CheckField, 6, 6, 0, // 39: check Inst[11:6] == 0x0 // CHECK-NEXT: OPC_Decode, {{[0-9, ]+}}, 0, // 43: decode to {{.*}}:NOP using decoder 0 // CHECK-NEXT: // 43: } else try { // CHECK-NEXT: OPC_Decode, {{[0-9, ]+}}, 1, // 47: decode to SHIFT2 using decoder 1 // CHECK-NEXT: // 47: } // CHECK-NEXT: // 47: } // CHECK-NEXT: 3, 0, // 51: case 0x3: { // CHECK-NEXT: OPC_Scope, 8, // 53: try { // CHECK-NEXT: OPC_CheckField, 6, 6, 0, // 55: check Inst[11:6] == 0x0 // CHECK-NEXT: OPC_Decode, {{[0-9, ]+}}, 0, // 59: decode to {{.*}}:NOP using decoder 0 // CHECK-NEXT: // 59: } else try { // CHECK-NEXT: OPC_Decode, {{[0-9, ]+}}, 1, // 63: decode to SHIFT3 using decoder 1 // CHECK-NEXT: // 63: } // CHECK-NEXT: // 63: } // CHECK-NEXT: // 63: } // switch Inst[15:12] // CHECK-NEXT: }; class SHIFT opc> : I<(outs), (ins ShAmtOp:$shamt)>, EncSHIFT; def SHIFT0 : SHIFT<0>; def SHIFT1 : SHIFT<1>; def SHIFT2 : SHIFT<2>; def SHIFT3 : SHIFT<3>; def NOP : I<(outs), (ins)>, EncNOP<0>; def : AdditionalEncoding, EncNOP<1>; def : AdditionalEncoding, EncNOP<2>; def : AdditionalEncoding, EncNOP<3>; def II : InstrInfo; def MyTarget : Target { let InstructionSet = II; }