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