I have a downstream target which has 128-bit instructions where some instructions can have large sections of encoding to be determined ahead of time. This results in the island calculations for decoder tables to emit checks over 64-bits. This change will emit multiple separate checks when the island exceeds 64-bits.
39 lines
911 B
TableGen
39 lines
911 B
TableGen
// RUN: llvm-tblgen -gen-disassembler -I %p/../../../include %s | FileCheck %s
|
|
|
|
include "llvm/Target/Target.td"
|
|
|
|
class I<dag outs, dag ins, bits<5> opcode> : Instruction {
|
|
let InOperandList = ins;
|
|
let OutOperandList = outs;
|
|
|
|
bits<5> dst;
|
|
bits<5> src0;
|
|
bits<5> src1;
|
|
|
|
int Size = 16;
|
|
bits<128> Inst;
|
|
|
|
let Inst{4...0} = opcode;
|
|
let Inst{9...5} = dst;
|
|
let Inst{14...10} = src0;
|
|
let Inst{19...15} = src1;
|
|
|
|
let Inst{127...20} = 0xdeadbeef;
|
|
}
|
|
|
|
def Reg : Register<"reg">;
|
|
|
|
def Regs : RegisterClass<"foo", [i32], 0, (add Reg)>;
|
|
|
|
def IAdd : I<(outs Regs:$dst), (ins Regs:$src0, Regs:$src1), 0b10101>;
|
|
|
|
// CHECK-LABEL: static const uint8_t DecoderTable128[20] = {
|
|
// CHECK-NEXT: OPC_CheckField, 84, 44, 0, // 0: check Inst[127:84] == 0x0
|
|
// CHECK-NEXT: OPC_CheckField, 20, 64, 239, 253, 182, 245, 13,
|
|
|
|
def II : InstrInfo;
|
|
|
|
def MyTarget : Target {
|
|
let InstructionSet = II;
|
|
}
|