/// ------------+---------+---------+---------+---------
/// 0 0 0 0 | REG | 1 0 0 | MODE | REG
/// ------------+---------+---------+---------+---------
-class MxBTSTEnc_R<MxBeadDReg REG, MxEncEA EA, MxEncExt EXT>
- : MxEncoding<EA.Reg, EA.DA, EA.Mode, MxBead3Bits<0b100>, REG, MxBead4Bits<0b0000>,
- EXT.Imm, EXT.B8, EXT.Scale, EXT.WL, EXT.DAReg>;
+class MxBTSTEnc_R<MxEncMemOp dst_enc, string bitno_name> {
+ dag Value = (ascend
+ (descend 0b0000,
+ (operand "$"#bitno_name, 3),
+ 0b100, dst_enc.EA
+ ),
+ dst_enc.Supplement
+ );
+}
/// -------------------------------+---------+---------
/// F E D C B A 9 8 . 7 6 | 5 4 3 | 2 1 0
/// ------------------------+------+---------+---------
/// 0 0 0 0 0 0 0 0 | BIT NUMBER
/// ------------------------+--------------------------
-class MxBTSTEnc_I<MxBead8Imm IMM, MxEncEA EA, MxEncExt EXT>
- : MxEncoding<EA.Reg, EA.DA, EA.Mode, MxBead2Bits<0b00>,
- MxBead4Bits<0b1000>, MxBead4Bits<0b0000>, IMM,
- EXT.Imm, EXT.B8, EXT.Scale, EXT.WL, EXT.DAReg>;
+class MxBTSTEnc_I<MxEncMemOp dst_enc, string bitno_name> {
+ dag Value = (ascend
+ (descend 0b0000100000, dst_enc.EA),
+ (descend 0b00000000, (operand "$"#bitno_name, 8)),
+ dst_enc.Supplement
+ );
+}
let Defs = [CCR] in {
class MxBTST_RR<MxType TYPE>
: MxInst<(outs), (ins TYPE.ROp:$dst, TYPE.ROp:$bitno), "btst\t$bitno, $dst",
- [(set CCR, (MxBtst TYPE.VT:$dst, TYPE.VT:$bitno))],
- MxBTSTEnc_R<MxBeadDReg<1>, MxEncEAd_0, MxExtEmpty>>;
+ [(set CCR, (MxBtst TYPE.VT:$dst, TYPE.VT:$bitno))]> {
+ let Inst = MxBTSTEnc_R<MxEncAddrMode_r<"dst">, "bitno">.Value;
+}
class MxBTST_RI<MxType TYPE>
: MxInst<(outs), (ins TYPE.ROp:$dst, TYPE.IOp:$bitno), "btst\t$bitno, $dst",
- [(set CCR, (MxBtst TYPE.VT:$dst, TYPE.IPat:$bitno))],
- MxBTSTEnc_I<MxBead8Imm<1>, MxEncEAd_0, MxExtEmpty>>;
+ [(set CCR, (MxBtst TYPE.VT:$dst, TYPE.IPat:$bitno))]> {
+ let Inst = MxBTSTEnc_I<MxEncAddrMode_r<"dst">, "bitno">.Value;
+}
class MxBTST_MR<MxType TYPE, MxOperand MEMOpd, ComplexPattern MEMPat,
- MxEncEA EA, MxEncExt EXT>
+ MxEncMemOp DST_ENC>
: MxInst<(outs), (ins MEMOpd:$dst, TYPE.ROp:$bitno), "btst\t$bitno, $dst",
- [(set CCR, (MxBtst (TYPE.Load MEMPat:$dst), TYPE.VT:$bitno))],
- MxBTSTEnc_R<MxBeadDReg<1>, EA, EXT>>;
+ [(set CCR, (MxBtst (TYPE.Load MEMPat:$dst), TYPE.VT:$bitno))]> {
+ let Inst = MxBTSTEnc_R<DST_ENC, "bitno">.Value;
+}
class MxBTST_MI<MxType TYPE, MxOperand MEMOpd, ComplexPattern MEMPat,
- MxEncEA EA, MxEncExt EXT>
+ MxEncMemOp DST_ENC>
: MxInst<(outs), (ins MEMOpd:$dst, TYPE.IOp:$bitno), "btst\t$bitno, $dst",
- [(set CCR, (MxBtst (TYPE.Load MEMPat:$dst), TYPE.IPat:$bitno))],
- MxBTSTEnc_I<MxBead8Imm<1>, EA, EXT>>;
+ [(set CCR, (MxBtst (TYPE.Load MEMPat:$dst), TYPE.IPat:$bitno))]> {
+ let Inst = MxBTSTEnc_I<DST_ENC, "bitno">.Value;
+}
} // Defs = [CCR]
// Register BTST limited to 32 bits only
// Memory BTST limited to 8 bits only
def BTST8jd : MxBTST_MR<MxType8d, MxType8.JOp, MxType8.JPat,
- MxEncEAj_0, MxExtEmpty>;
+ MxEncAddrMode_j<"dst">>;
def BTST8od : MxBTST_MR<MxType8d, MxType8.OOp, MxType8.OPat,
- MxEncEAo_0, MxExtEmpty>;
+ MxEncAddrMode_o<"dst">>;
def BTST8ed : MxBTST_MR<MxType8d, MxType8.EOp, MxType8.EPat,
- MxEncEAe_0, MxExtEmpty>;
+ MxEncAddrMode_e<"dst">>;
def BTST8pd : MxBTST_MR<MxType8d, MxType8.POp, MxType8.PPat,
- MxEncEAp_0, MxExtI16_0>;
+ MxEncAddrMode_p<"dst">>;
def BTST8fd : MxBTST_MR<MxType8d, MxType8.FOp, MxType8.FPat,
- MxEncEAf_0, MxExtBrief_0>;
+ MxEncAddrMode_f<"dst">>;
def BTST8qd : MxBTST_MR<MxType8d, MxType8.QOp, MxType8.QPat,
- MxEncEAq, MxExtI16_0>;
+ MxEncAddrMode_q<"dst">>;
def BTST8kd : MxBTST_MR<MxType8d, MxType8.KOp, MxType8.KPat,
- MxEncEAk, MxExtBrief_0>;
+ MxEncAddrMode_k<"dst">>;
def BTST8ji : MxBTST_MI<MxType8d, MxType8.JOp, MxType8.JPat,
- MxEncEAj_0, MxExtEmpty>;
+ MxEncAddrMode_j<"dst">>;
def BTST8oi : MxBTST_MI<MxType8d, MxType8.OOp, MxType8.OPat,
- MxEncEAo_0, MxExtEmpty>;
+ MxEncAddrMode_o<"dst">>;
def BTST8ei : MxBTST_MI<MxType8d, MxType8.EOp, MxType8.EPat,
- MxEncEAe_0, MxExtEmpty>;
+ MxEncAddrMode_e<"dst">>;
def BTST8pi : MxBTST_MI<MxType8d, MxType8.POp, MxType8.PPat,
- MxEncEAp_0, MxExtI16_0>;
+ MxEncAddrMode_p<"dst">>;
def BTST8fi : MxBTST_MI<MxType8d, MxType8.FOp, MxType8.FPat,
- MxEncEAf_0, MxExtBrief_0>;
+ MxEncAddrMode_f<"dst">>;
def BTST8qi : MxBTST_MI<MxType8d, MxType8.QOp, MxType8.QPat,
- MxEncEAq, MxExtI16_0>;
+ MxEncAddrMode_q<"dst">>;
def BTST8ki : MxBTST_MI<MxType8d, MxType8.KOp, MxType8.KPat,
- MxEncEAk, MxExtBrief_0>;
+ MxEncAddrMode_k<"dst">>;