Instruction Format
C++
class CSKYInst<AddrMode am, int sz, dag outs, dag ins, string asmstr, list<dag> pattern>
: Instruction {
let Namespace = "CSKY";
int Size = sz;
AddrMode AM = am;
let OutOperandList = outs;
let InOperandList = ins;
let AsmString = asmstr;
let Pattern = pattern;
let Itinerary = NoItinerary;
let TSFlags{4-0} = AM.Value;
}
class CSKYInst<AddrMode am, int sz, dag outs, dag ins, string asmstr, list<dag> pattern>
: Instruction {
let Namespace = "CSKY";
int Size = sz;
AddrMode AM = am;
let OutOperandList = outs;
let InOperandList = ins;
let AsmString = asmstr;
let Pattern = pattern;
let Itinerary = NoItinerary;
let TSFlags{4-0} = AM.Value;
}
// Format< OP[6] | RZ[5] | SOP[3] | OFFSET[18] >
// Instructions(7): grs, lrs32.b, lrs32.h, lrs32.w, srs32.b, srs32.h, srs32.w
class I_18_Z_L<bits<3> sop, string op, Operand operand, list<dag> pattern>
: CSKY32Inst<AddrModeNone, 0x33, (outs GPR:$rz), (ins operand:$offset),
!strconcat(op, "\t$rz, $offset"), pattern> {
bits<5> rz;
bits<18> offset;
let Inst{25 - 21} = rz;
let Inst{20 - 18} = sop;
let Inst{17 - 0} = offset;
}
bits<4> x; // 定义x占4位
let Inst{m - n} = x; // 定义x占用CSKY32Inst指令中的哪4位