1*9880d681SAndroid Build Coastguard Worker// RUN: llvm-tblgen -gen-disassembler -I %p/../../include %s | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Workerinclude "llvm/Target/Target.td" 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Workerdef archInstrInfo : InstrInfo { } 6*9880d681SAndroid Build Coastguard Worker 7*9880d681SAndroid Build Coastguard Workerdef arch : Target { 8*9880d681SAndroid Build Coastguard Worker let InstructionSet = archInstrInfo; 9*9880d681SAndroid Build Coastguard Worker} 10*9880d681SAndroid Build Coastguard Worker 11*9880d681SAndroid Build Coastguard Workerdef Myi32 : Operand<i32> { 12*9880d681SAndroid Build Coastguard Worker let DecoderMethod = "DecodeMyi32"; 13*9880d681SAndroid Build Coastguard Worker} 14*9880d681SAndroid Build Coastguard Worker 15*9880d681SAndroid Build Coastguard Worker 16*9880d681SAndroid Build Coastguard Workerlet OutOperandList = (outs), Size = 2 in { 17*9880d681SAndroid Build Coastguard Worker 18*9880d681SAndroid Build Coastguard Workerdef foo : Instruction { 19*9880d681SAndroid Build Coastguard Worker let InOperandList = (ins i32imm:$factor); 20*9880d681SAndroid Build Coastguard Worker field bits<16> Inst; 21*9880d681SAndroid Build Coastguard Worker bits<32> factor; 22*9880d681SAndroid Build Coastguard Worker let Inst{7-0} = 0xAA; 23*9880d681SAndroid Build Coastguard Worker let Inst{14-8} = factor{6-0}; // no offset 24*9880d681SAndroid Build Coastguard Worker let AsmString = "foo $factor"; 25*9880d681SAndroid Build Coastguard Worker field bits<16> SoftFail = 0; 26*9880d681SAndroid Build Coastguard Worker } 27*9880d681SAndroid Build Coastguard Worker 28*9880d681SAndroid Build Coastguard Workerdef bar : Instruction { 29*9880d681SAndroid Build Coastguard Worker let InOperandList = (ins i32imm:$factor); 30*9880d681SAndroid Build Coastguard Worker field bits<16> Inst; 31*9880d681SAndroid Build Coastguard Worker bits<32> factor; 32*9880d681SAndroid Build Coastguard Worker let Inst{7-0} = 0xBB; 33*9880d681SAndroid Build Coastguard Worker let Inst{15-8} = factor{10-3}; // offset by 3 34*9880d681SAndroid Build Coastguard Worker let AsmString = "bar $factor"; 35*9880d681SAndroid Build Coastguard Worker field bits<16> SoftFail = 0; 36*9880d681SAndroid Build Coastguard Worker } 37*9880d681SAndroid Build Coastguard Worker 38*9880d681SAndroid Build Coastguard Workerdef biz : Instruction { 39*9880d681SAndroid Build Coastguard Worker let InOperandList = (ins i32imm:$factor); 40*9880d681SAndroid Build Coastguard Worker field bits<16> Inst; 41*9880d681SAndroid Build Coastguard Worker bits<32> factor; 42*9880d681SAndroid Build Coastguard Worker let Inst{7-0} = 0xCC; 43*9880d681SAndroid Build Coastguard Worker let Inst{11-8,15-12} = factor{10-3}; // offset by 3, multipart 44*9880d681SAndroid Build Coastguard Worker let AsmString = "biz $factor"; 45*9880d681SAndroid Build Coastguard Worker field bits<16> SoftFail = 0; 46*9880d681SAndroid Build Coastguard Worker } 47*9880d681SAndroid Build Coastguard Worker 48*9880d681SAndroid Build Coastguard Workerdef baz : Instruction { 49*9880d681SAndroid Build Coastguard Worker let InOperandList = (ins Myi32:$factor); 50*9880d681SAndroid Build Coastguard Worker field bits<16> Inst; 51*9880d681SAndroid Build Coastguard Worker bits<32> factor; 52*9880d681SAndroid Build Coastguard Worker let Inst{7-0} = 0xDD; 53*9880d681SAndroid Build Coastguard Worker let Inst{15-8} = factor{11-4}; // offset by 4 + custom decode 54*9880d681SAndroid Build Coastguard Worker let AsmString = "baz $factor"; 55*9880d681SAndroid Build Coastguard Worker field bits<16> SoftFail = 0; 56*9880d681SAndroid Build Coastguard Worker } 57*9880d681SAndroid Build Coastguard Worker 58*9880d681SAndroid Build Coastguard Workerdef bum : Instruction { 59*9880d681SAndroid Build Coastguard Worker let InOperandList = (ins i32imm:$factor); 60*9880d681SAndroid Build Coastguard Worker field bits<16> Inst; 61*9880d681SAndroid Build Coastguard Worker bits<32> factor; 62*9880d681SAndroid Build Coastguard Worker let Inst{7-0} = 0xEE; 63*9880d681SAndroid Build Coastguard Worker let Inst{15-8} = !srl(factor,5); 64*9880d681SAndroid Build Coastguard Worker let AsmString = "bum $factor"; 65*9880d681SAndroid Build Coastguard Worker field bits<16> SoftFail = 0; 66*9880d681SAndroid Build Coastguard Worker } 67*9880d681SAndroid Build Coastguard Worker} 68*9880d681SAndroid Build Coastguard Worker 69*9880d681SAndroid Build Coastguard Worker 70*9880d681SAndroid Build Coastguard Worker// CHECK: tmp = fieldFromInstruction(insn, 8, 7); 71*9880d681SAndroid Build Coastguard Worker// CHECK: tmp = fieldFromInstruction(insn, 8, 8) << 3; 72*9880d681SAndroid Build Coastguard Worker// CHECK: tmp |= fieldFromInstruction(insn, 8, 4) << 7; 73*9880d681SAndroid Build Coastguard Worker// CHECK: tmp |= fieldFromInstruction(insn, 12, 4) << 3; 74*9880d681SAndroid Build Coastguard Worker// CHECK: tmp = fieldFromInstruction(insn, 8, 8) << 4; 75