86 lines · plain
1// RUN: llvm-tblgen -gen-disassembler -I %p/../../../include %s | FileCheck %s2 3include "llvm/Target/Target.td"4 5class Enc {6 int Size = 2;7 bits<16> Inst;8}9 10class EncSHIFT<bits<2> opc> : Enc {11 bits<6> shamt;12 let Inst{15...14} = {0, 0};13 let Inst{13...12} = opc;14 let Inst{11...6} = shamt;15}16 17class EncNOP<bits<2> opc> : Enc {18 let Inst{15...14} = {0, 0};19 let Inst{13...12} = opc;20 let Inst{11...6} = {0, 0, 0, 0, 0, 0};21}22 23def ShAmtOp : Operand<i32> {24 let DecoderMethod = "decodeShAmt";25 let hasCompleteDecoder = false;26}27 28class I<dag out_ops, dag in_ops> : Instruction {29 let InOperandList = in_ops;30 let OutOperandList = out_ops;31}32 33// CHECK-LABEL: static const uint8_t DecoderTable16[67] = {34// CHECK-NEXT: OPC_SwitchField, 12, 4, // 0: switch Inst[15:12] {35// CHECK-NEXT: 0, 14, // 3: case 0x0: {36// CHECK-NEXT: OPC_Scope, 8, // 5: try {37// CHECK-NEXT: OPC_CheckField, 6, 6, 0, // 7: check Inst[11:6] == 0x038// CHECK-NEXT: OPC_Decode, {{[0-9, ]+}}, 0, // 11: decode to NOP using decoder 039// CHECK-NEXT: // 11: } else try {40// CHECK-NEXT: OPC_Decode, {{[0-9, ]+}}, 1, // 15: decode to SHIFT0 using decoder 141// CHECK-NEXT: // 15: }42// CHECK-NEXT: // 15: }43// CHECK-NEXT: 1, 14, // 19: case 0x1: {44// CHECK-NEXT: OPC_Scope, 8, // 21: try {45// CHECK-NEXT: OPC_CheckField, 6, 6, 0, // 23: check Inst[11:6] == 0x046// CHECK-NEXT: OPC_Decode, {{[0-9, ]+}}, 0, // 27: decode to {{.*}}:NOP using decoder 047// CHECK-NEXT: // 27: } else try {48// CHECK-NEXT: OPC_Decode, {{[0-9, ]+}}, 1, // 31: decode to SHIFT1 using decoder 149// CHECK-NEXT: // 31: }50// CHECK-NEXT: // 31: }51// CHECK-NEXT: 2, 14, // 35: case 0x2: {52// CHECK-NEXT: OPC_Scope, 8, // 37: try {53// CHECK-NEXT: OPC_CheckField, 6, 6, 0, // 39: check Inst[11:6] == 0x054// CHECK-NEXT: OPC_Decode, {{[0-9, ]+}}, 0, // 43: decode to {{.*}}:NOP using decoder 055// CHECK-NEXT: // 43: } else try {56// CHECK-NEXT: OPC_Decode, {{[0-9, ]+}}, 1, // 47: decode to SHIFT2 using decoder 157// CHECK-NEXT: // 47: }58// CHECK-NEXT: // 47: }59// CHECK-NEXT: 3, 0, // 51: case 0x3: {60// CHECK-NEXT: OPC_Scope, 8, // 53: try {61// CHECK-NEXT: OPC_CheckField, 6, 6, 0, // 55: check Inst[11:6] == 0x062// CHECK-NEXT: OPC_Decode, {{[0-9, ]+}}, 0, // 59: decode to {{.*}}:NOP using decoder 063// CHECK-NEXT: // 59: } else try {64// CHECK-NEXT: OPC_Decode, {{[0-9, ]+}}, 1, // 63: decode to SHIFT3 using decoder 165// CHECK-NEXT: // 63: }66// CHECK-NEXT: // 63: }67// CHECK-NEXT: // 63: } // switch Inst[15:12]68// CHECK-NEXT: };69 70class SHIFT<bits<2> opc> : I<(outs), (ins ShAmtOp:$shamt)>, EncSHIFT<opc>;71def SHIFT0 : SHIFT<0>;72def SHIFT1 : SHIFT<1>;73def SHIFT2 : SHIFT<2>;74def SHIFT3 : SHIFT<3>;75 76def NOP : I<(outs), (ins)>, EncNOP<0>;77def : AdditionalEncoding<NOP>, EncNOP<1>;78def : AdditionalEncoding<NOP>, EncNOP<2>;79def : AdditionalEncoding<NOP>, EncNOP<3>;80 81def II : InstrInfo;82 83def MyTarget : Target {84 let InstructionSet = II;85}86