15996da20SCraig Topper// RUN: llvm-tblgen -gen-disassembler -I %p/../../include %s | FileCheck %s
25996da20SCraig Topper
35996da20SCraig Topperinclude "llvm/Target/Target.td"
45996da20SCraig Topper
55996da20SCraig Topperdef archInstrInfo : InstrInfo { }
65996da20SCraig Topper
75996da20SCraig Topperdef arch : Target {
85996da20SCraig Topper    let InstructionSet = archInstrInfo;
95996da20SCraig Topper}
105996da20SCraig Topper
115996da20SCraig Topperdef  Myi32  : Operand<i32> {
125996da20SCraig Topper  let DecoderMethod = "DecodeMyi32";
135996da20SCraig Topper}
145996da20SCraig Topper
155996da20SCraig Topper
165996da20SCraig Topperlet OutOperandList = (outs), Size = 2 in {
175996da20SCraig Topper
185996da20SCraig Topperdef foo : Instruction {
195996da20SCraig Topper    let InOperandList = (ins i32imm:$factor);
205996da20SCraig Topper    field bits<16> Inst;
215996da20SCraig Topper    bits<32> factor;
22e8e3693cSPaul C. Anagnostopoulos    let Inst{7...0} = 0xAA;
23e8e3693cSPaul C. Anagnostopoulos    let Inst{14...8} = factor{6...0}; // no offset
245996da20SCraig Topper    let AsmString = "foo  $factor";
255996da20SCraig Topper    field bits<16> SoftFail = 0;
265996da20SCraig Topper    }
275996da20SCraig Topper
285996da20SCraig Topperdef bar : Instruction {
295996da20SCraig Topper    let InOperandList = (ins i32imm:$factor);
305996da20SCraig Topper    field bits<16> Inst;
315996da20SCraig Topper    bits<32> factor;
32e8e3693cSPaul C. Anagnostopoulos    let Inst{7...0} = 0xBB;
33e8e3693cSPaul C. Anagnostopoulos    let Inst{15...8} = factor{10...3}; // offset by 3
345996da20SCraig Topper    let AsmString = "bar  $factor";
355996da20SCraig Topper    field bits<16> SoftFail = 0;
365996da20SCraig Topper    }
375996da20SCraig Topper
385996da20SCraig Topperdef biz : Instruction {
395996da20SCraig Topper    let InOperandList = (ins i32imm:$factor);
405996da20SCraig Topper    field bits<16> Inst;
415996da20SCraig Topper    bits<32> factor;
42e8e3693cSPaul C. Anagnostopoulos    let Inst{7...0} = 0xCC;
43e8e3693cSPaul C. Anagnostopoulos    let Inst{11...8,15...12} = factor{10...3}; // offset by 3, multipart
445996da20SCraig Topper    let AsmString = "biz  $factor";
455996da20SCraig Topper    field bits<16> SoftFail = 0;
465996da20SCraig Topper    }
475996da20SCraig Topper
485996da20SCraig Topperdef baz : Instruction {
495996da20SCraig Topper    let InOperandList = (ins Myi32:$factor);
505996da20SCraig Topper    field bits<16> Inst;
515996da20SCraig Topper    bits<32> factor;
52e8e3693cSPaul C. Anagnostopoulos    let Inst{7...0} = 0xDD;
53e8e3693cSPaul C. Anagnostopoulos    let Inst{15...8} = factor{11...4}; // offset by 4 + custom decode
545996da20SCraig Topper    let AsmString = "baz  $factor";
555996da20SCraig Topper    field bits<16> SoftFail = 0;
565996da20SCraig Topper    }
575996da20SCraig Topper
585996da20SCraig Topper}
595996da20SCraig Topper
605996da20SCraig Topper// CHECK: tmp = fieldFromInstruction(insn, 8, 7);
615996da20SCraig Topper// CHECK: tmp = fieldFromInstruction(insn, 8, 8) << 3;
62*b8bf94dfSJay Foad// CHECK: insertBits(tmp, fieldFromInstruction(insn, 8, 4), 7, 4);
63*b8bf94dfSJay Foad// CHECK: insertBits(tmp, fieldFromInstruction(insn, 12, 4), 3, 4);
645996da20SCraig Topper// CHECK: tmp = fieldFromInstruction(insn, 8, 8) << 4;
65