//===-- CSKYInstrFormats.td - CSKY Instruction Formats -----*- tablegen -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//

class AddrMode<bits<5> val> {
  bits<5> Value = val;
}

def AddrModeNone : AddrMode<0>;
def AddrMode32B : AddrMode<1>;   // ld32.b, ld32.bs, st32.b, st32.bs, +4kb
def AddrMode32H : AddrMode<2>;   // ld32.h, ld32.hs, st32.h, st32.hs, +8kb
def AddrMode32WD : AddrMode<3>;  // ld32.w, st32.w, ld32.d, st32.d, +16kb
def AddrMode16B : AddrMode<4>;   // ld16.b, +32b
def AddrMode16H : AddrMode<5>;   // ld16.h, +64b
def AddrMode16W : AddrMode<6>;   // ld16.w, +128b or +1kb
def AddrMode32SDF : AddrMode<7>; // flds, fldd, +1kb

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 CSKYPseudo<dag outs, dag ins, string asmstr, list<dag> pattern>
    : CSKYInst<AddrModeNone, 0, outs, ins, asmstr, pattern> {
  let isCodeGenOnly = 1;
  let isPseudo = 1;
}

class CSKY32Inst<AddrMode am, bits<6> opcode, dag outs, dag ins, string asmstr,
                 list<dag> pattern>
    : CSKYInst<am, 4, outs, ins, asmstr, pattern> {
  field bits<32> Inst;
  let Inst{31 - 26} = opcode;
}

// CSKY 32-bit instruction
// Format< OP[6] | Offset[26] >
// Instruction(1): bsr32
class J<bits<6> opcode, dag outs, dag ins, string op, list<dag> pattern>
    : CSKY32Inst<AddrModeNone, opcode, outs, ins, !strconcat(op, "\t$offset"),
                 pattern> {
  bits<26> offset;
  let Inst{25 - 0} = offset;
}

// 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;
}

// Format< OP[6] | RZ[5] | RX[5] | IMM[16] >
// Instructions(1): ori32
class I_16_ZX<string op, ImmLeaf ImmType, list<dag> pattern>
    : CSKY32Inst<AddrModeNone, 0x3b,
                 (outs GPR:$rz), (ins GPR:$rx,ImmType:$imm16),
                 !strconcat(op, "\t$rz, $rx, $imm16"), pattern> {
  bits<5> rz;
  bits<5> rx;
  bits<16> imm16;
  let Inst{25 - 21} = rz;
  let Inst{20 - 16} = rx;
  let Inst{15 - 0} = imm16;
}

// Format< OP[6] | SOP[5] | RZ[5] | IMM[16] >
// Instructions(3): movi32, movih32, (bgeni32)
class I_16_MOV<bits<5> sop, string op, ImmLeaf ImmType>
    : CSKY32Inst<AddrModeNone, 0x3a, (outs GPR:$rz), (ins ImmType:$imm16),
                 !strconcat(op, "\t$rz, $imm16"),
                 [(set GPR:$rz, ImmType:$imm16)]> {
  bits<5> rz;
  bits<16> imm16;
  let Inst{25 - 21} = sop;
  let Inst{20 - 16} = rz;
  let Inst{15 - 0} = imm16;
  let isReMaterializable = 1;
  let isAsCheapAsAMove = 1;
  let isMoveImm = 1;
}

// Format< OP[6] | SOP[5] | RZ[5] | OFFSET[16] >
// Instructions(1): lrw32
class I_16_Z_L<bits<5> sop, string op, Operand operand, list<dag> pattern>
    : CSKY32Inst<AddrModeNone, 0x3a,
                 (outs GPR:$rz), (ins operand:$imm16),
                 !strconcat(op, "\t$rz, [$imm16]"), pattern> {
  bits<5> rz;
  bits<16> imm16;
  let Inst{25 - 21} = sop;
  let Inst{20 - 16} = rz;
  let Inst{15 - 0} = imm16;
}

// Format< OP[6] | SOP[5] | 00000[5] | OFFSET[16] >
// Instructions(5): bt32, bf32, br32, jmpi32, jsri32
class I_16_L<bits<5> sop, dag outs, dag ins, string op, list<dag> pattern>
    : CSKY32Inst<AddrModeNone, 0x3a, outs, ins, !strconcat(op, "\t$imm16"),
                 pattern> {
  bits<16> imm16;
  let Inst{25 - 21} = sop;
  let Inst{20 - 16} = 0;
  let Inst{15 - 0} = imm16;
}

// bt32, bf32, br32, jmpi32
class I_16_L_B<bits<5> sop, string op, Operand operand, list<dag> pattern>
    : I_16_L<sop, (outs), (ins operand:$imm16, CARRY:$ca), op, pattern> {
  let isBranch = 1;
  let isTerminator = 1;
}

// Format< OP[6] | SOP[5] | RX[5] | 0000000000000000[16] >
// Instructions(2): jmp32, jsr32
class I_16_JX<bits<5> sop, string op, list<dag> pattern>
    : CSKY32Inst<AddrModeNone, 0x3a, (outs), (ins GPR:$rx),
                 !strconcat(op, "\t$rx"), pattern> {
  bits<5> rx;
  bits<16> imm16;
  let Inst{25 - 21} = sop;
  let Inst{20 - 16} = rx;
  let Inst{15 - 0} = 0;
}

// Format< OP[6] | SOP[5] | RX[5] | 00000000000000[14] | IMM[2] >
// Instructions(1): jmpix32
class I_16_J_XI<bits<5> sop, string op, Operand operand, list<dag> pattern>
    : CSKY32Inst<AddrModeNone, 0x3a, (outs),
                 (ins GPR:$rx, operand:$imm2),
                 !strconcat(op, "\t$rx, $imm2"), pattern> {
  bits<5> rx;
  bits<2> imm2;
  let Inst{25 - 21} = sop;
  let Inst{20 - 16} = rx;
  let Inst{15 - 2} = 0;
  let Inst{1 - 0} = imm2;
}

// Format< OP[6] | SOP[5] | PCODE[5] | 0000000000000000[16] >
// Instructions(1): rts32
class I_16_RET<bits<5> sop, bits<5> pcode, string op, list<dag> pattern>
    : CSKY32Inst<AddrModeNone, 0x3a, (outs), (ins), op, pattern> {
  let Inst{25 - 21} = sop;
  let Inst{20 - 16} = pcode;
  let Inst{15 - 0} = 0;
  let isTerminator = 1;
  let isReturn = 1;
  let isBarrier = 1;
}

// Format< OP[6] | SOP[5] | RX[5] | IMM16[16] >
// Instructions(3): cmpnei32, cmphsi32, cmplti32
class I_16_X<bits<5> sop, string op>
    : CSKY32Inst<AddrModeNone, 0x3a, (outs CARRY:$ca),
    (ins GPR:$rx, i32imm:$imm16), !strconcat(op, "\t$rx, $imm16"), []> {
  bits<16> imm16;
  bits<5> rx;
  let Inst{25 - 21} = sop;
  let Inst{20 - 16} = rx;
  let Inst{15 - 0} = imm16;
  let isCompare = 1;
}

// Format< OP[6] | SOP[5] | RX[5] | OFFSET[16] >
// Instructions(7): bez32, bnez32, bnezad32, bhz32, blsz32, blz32, bhsz32
class I_16_X_L<bits<5> sop, string op, Operand operand>
    : CSKY32Inst<AddrModeNone, 0x3a, (outs), (ins GPR:$rx, operand:$imm16),
                 !strconcat(op, "\t$rx, $imm16"), []> {
  bits<5> rx;
  bits<16> imm16;
  let Inst{25 - 21} = sop;
  let Inst{20 - 16} = rx;
  let Inst{15 - 0} = imm16;
  let isBranch = 1;
  let isTerminator = 1;
}

// Format< OP[6] | RZ[5] | RX[5] | SOP[4] | IMM[12] >
// Instructions(5): addi32, subi32, andi32, andni32, xori32
class I_12<bits<4> sop, string op, SDNode node, ImmLeaf ImmType>
    : CSKY32Inst<AddrModeNone, 0x39, (outs GPR:$rz),
    (ins GPR:$rx, ImmType:$imm12), !strconcat(op, "\t$rz, $rx, $imm12"),
    [(set GPR:$rz, (node GPR:$rx, ImmType:$imm12))]> {
  bits<5> rz;
  bits<5> rx;
  bits<12> imm12;
  let Inst{25 - 21} = rz;
  let Inst{20 - 16} = rx;
  let Inst{15 - 12} = sop;
  let Inst{11 - 0} = imm12;
}

class I_LDST<AddrMode am, bits<6> opcode, bits<4> sop, dag outs, dag ins,
             string op, list<dag> pattern>
    : CSKY32Inst<am, opcode, outs, ins, !strconcat(op, "\t$rz, ($rx, $imm12)"),
                 pattern> {
  bits<5> rx;
  bits<5> rz;
  bits<12> imm12;
  let Inst{25 - 21} = rz;
  let Inst{20 - 16} = rx;
  let Inst{15 - 12} = sop;
  let Inst{11 - 0} = imm12;
}

// Format< OP[6] | RZ[5] | RX[5] | SOP[4] | OFFSET[12] >
// Instructions(6): ld32.b, ld32.bs, ld32.h, ld32.hs, ld32.w, ld32.d
class I_LD<AddrMode am, bits<4> sop, string op, Operand operand>
    : I_LDST<am, 0x36, sop,
    (outs GPR:$rz), (ins GPR:$rx, operand:$imm12), op, []>;

// Format< OP[6] | RZ[5] | RX[5] | SOP[4] | OFFSET[12] >
// Instructions(4): st32.b, st32.h, st32.w, st32.d
class I_ST<AddrMode am, bits<4> sop, string op, Operand operand>
    : I_LDST<am, 0x37, sop, (outs),
    (ins GPR:$rz, GPR:$rx, operand:$imm12), op, []>;

// Format< OP[6] | SOP[5] | PCODE[5] | 0000[4] | 000 | R28 | LIST2[3] | R15 |
// LIST1[4] >
// Instructions(2): push32, pop32
class I_12_PP<bits<5> sop, bits<5> pcode, dag outs, dag ins, string op>
    : CSKY32Inst<AddrModeNone, 0x3a, outs, ins, !strconcat(op, "\t$regs"), []> {
  bits<12> regs;
  let Inst{25 - 21} = sop;
  let Inst{20 - 16} = pcode;
  let Inst{15 - 12} = 0;
  let Inst{11 - 0} = regs;
}

// Format< OP[6] | RZ[5] | RX[5] | SOP[6] | PCODE[5] | IMM[5]>
// Instructions(4): incf32, inct32, decf32, dect32
class I_5_ZX<bits<6> sop, bits<5> pcode, string op, ImmLeaf ImmType,
             list<dag> pattern>
    : CSKY32Inst<AddrModeNone, 0x31, (outs GPR:$rz),
    (ins GPR:$false, GPR:$rx, ImmType:$imm5),
    !strconcat(op, "\t$rz, $rx, $imm5"), pattern> {
  bits<5> rz;
  bits<5> rx;
  bits<5> imm5;
  let Inst{25 - 21} = rz;
  let Inst{20 - 16} = rx;
  let Inst{15 - 10} = sop;
  let Inst{9 - 5} = pcode;
  let Inst{4 - 0} = imm5;
  let Constraints = "$rz = $false";
}

// Format< OP[6] | IMM[5] | RX[5] | SOP[6] | PCODE[5] | RZ[5]>
// Instructions(13): decgt32, declt32, decne32, lsli32, lslc32, lsri32
//                   lsrc32, asri32, asrc32, rotli32, xsr32, bclri32, bseti32
class I_5_XZ<bits<6> sop, bits<5> pcode, string op, dag ins, dag outs,
             list<dag> pattern>
    : CSKY32Inst<AddrModeNone, 0x31, ins, outs,
                 !strconcat(op, "\t$rz, $rx, $imm5"), pattern> {
  bits<5> imm5;
  bits<5> rx;
  bits<5> rz;
  let Inst{25 - 21} = imm5;
  let Inst{20 - 16} = rx;
  let Inst{15 - 10} = sop;
  let Inst{9 - 5} = pcode;
  let Inst{4 - 0} = rz;
}

// Format< OP[6] | RY[5] | RX[5] | SOP[6] | PCODE[5] | IMM[5]>
// Instructions(2): ldm32, (ldq32), stm32, (stq32)
class I_5_YX<bits<6> opcode, dag outs, dag ins, string op, list<dag> pattern,
             bits<5> imm5>
    : CSKY32Inst<AddrModeNone, opcode, outs, ins,
                 op #"\t${ry}, (${rx}), " #!cast<int>(imm5), pattern> {
  bits<5> rx;
  bits<5> ry;
  let Inst{25 - 21} = ry; // ry
  let Inst{20 - 16} = rx;
  let Inst{15 - 10} = 0b000111;
  let Inst{9 - 5} = 0b00001;
  let Inst{4 - 0} = imm5{4 - 0}; // imm5
}

// Format< OP[6] | LSB[5] | RX[5] | SOP[6] | MSB[5] | RZ[5]>
// Instructions(6): zext32, zextb32, zexth32, sext32, sextb32, sexth32
class I_5_XZ_U<bits<6> sop, bits<5> lsb, bits<5> msb, dag outs, dag ins,
               string op, list<dag> pattern>
    : CSKY32Inst<AddrModeNone, 0x31, outs, ins,
                 op #"\t$rz, $rx, " #!cast<int>(msb) #", " #!cast<int>(lsb),
                 pattern> {
  bits<5> rx;
  bits<5> rz;
  let Inst{25 - 21} = lsb; // lsb
  let Inst{20 - 16} = rx;
  let Inst{15 - 10} = sop;
  let Inst{9 - 5} = msb; // msb
  let Inst{4 - 0} = rz;
}

// sextb, sexth
class I_5_XZ_US<bits<6> sop, bits<5> lsb, bits<5> msb, string op, SDNode opnode,
  ValueType type> : I_5_XZ_U<sop, lsb, msb,
  (outs GPR:$rz), (ins GPR:$rx),op, [(set GPR:$rz, (opnode GPR:$rx, type))]>;

class I_5_XZ_UZ<bits<6> sop, bits<5> lsb, bits<5> msb, string op, int v>
    : I_5_XZ_U<sop, lsb, msb, (outs GPR:$rz), (ins GPR:$rx), op,
    [(set GPR:$rz, (and GPR:$rx, (i32 v)))]>;

// Format< OP[6] | RZ[5] | RX[5] | SOP[6] | SIZE[5] | LSB[5]>
// Instructions(1): ins32
class I_5_ZX_U<bits<6> sop, string op, Operand operand, list<dag> pattern>
    : CSKY32Inst<AddrModeNone, 0x31, (outs GPR:$rz), (ins operand:$size_lsb),
                 !strconcat(op, "\t$rz, operand:$size_lsb"), pattern> {
  bits<10> size_lsb;
  bits<5> rz;
  bits<5> rx;
  let Inst{25 - 21} = rz;
  let Inst{20 - 16} = rx;
  let Inst{15 - 10} = sop;
  let Inst{9 - 5} = size_lsb{9 - 5}; // size
  let Inst{4 - 0} = size_lsb{4 - 0}; // lsb
}

// Format< OP[6] | IMM[5] | RX[5] | SOP[6] | PCODE[5] | 00000 >
// Instructions(1): btsti32
class I_5_X<bits<6> sop, bits<5> pcode, string op, ImmLeaf ImmType,
            list<dag> pattern>
    : CSKY32Inst<AddrModeNone, 0x31,
    (outs CARRY:$ca), (ins GPR:$rx, ImmType:$imm5),
    !strconcat(op, "\t$rx, $imm5"), pattern> {
  bits<5> imm5;
  bits<5> rx;
  let Inst{25 - 21} = imm5;
  let Inst{20 - 16} = rx;
  let Inst{15 - 10} = sop;
  let Inst{9 - 5} = pcode;
  let Inst{4 - 0} = 0;
  let isCompare = 1;
}

// Format< OP[6] | IMM[5] | 00000[5] | SOP[6] | PCODE[5] | RZ[5]>
// Instructions(1): bmaski32
class I_5_Z<bits<6> sop, bits<5> pcode, string op, ImmLeaf ImmType,
            list<dag> pattern>
    : CSKY32Inst<AddrModeNone, 0x31, (outs GPR:$rz), (ins ImmType:$imm5),
                 !strconcat(op, "\t$rz, $imm5"), pattern> {
  bits<5> imm5;
  bits<5> rz;
  let Inst{25 - 21} = imm5;
  let Inst{20 - 16} = 0;
  let Inst{15 - 10} = sop;
  let Inst{9 - 5} = pcode;
  let Inst{4 - 0} = rz;
}

// Format< OP[6] | RY[5] | RX[5] | SOP[6] | PCODE[5] | RZ[5] >
// Instructions(24): addu32, addc32, subu32, subc32, (rsub32), ixh32, ixw32,
// ixd32, and32, andn32, or32, xor32, nor32, lsl32, lsr32, asr32, rotl32
// mult32, divu32, divs32, mul.(u/s)32, mula.32.l, mula.u32, mulall.s16.s
class R_YXZ<bits<6> opcode, bits<6> sop, bits<5> pcode, dag outs, dag ins,
            string op, list<dag> pattern>
    : CSKY32Inst<AddrModeNone, opcode, outs, ins,
                 !strconcat(op, "\t$rz, $rx, $ry"), pattern> {
  bits<5> ry;
  bits<5> rx;
  bits<5> rz;
  let Inst{25 - 21} = ry;
  let Inst{20 - 16} = rx;
  let Inst{15 - 10} = sop;
  let Inst{9 - 5} = pcode;
  let Inst{4 - 0} = rz;
}

// R_YXZ instructions with simple pattern
// Output: GPR:rz
// Input: GPR:rx, GPR:ry
// Asm string: op rz, rx, ry
// Instructions: addu32, subu32, ixh32, ixw32, ixd32, and32, andn32, or32,
// xor32, nor32, lsl32, lsr32, asr32, mult32, divu32, divs32
class R_YXZ_SP_F1<bits<6> sop, bits<5> pcode, PatFrag opnode, string op,
  bit Commutable = 0> : R_YXZ<0x31, sop, pcode, (outs GPR:$rz),
  (ins GPR:$rx, GPR:$ry), op, [(set GPR:$rz, (opnode GPR:$rx, GPR:$ry))]> {
  let isCommutable = Commutable;
}

// Format< OP[6] | RY[5] | RX[5] | SOP[6] | PCODE[5] | RZ[5] >
// Instructions:(8) ldr32.b, ldr32.h, ldr32.bs, ldr32.hs, ldr32.w,
//                  str32.b, str32.h, str32.w
class R_YXZ_LDST<bits<6> opcode, bits<6> sop, bits<5> pcode, int no, dag outs,
                 dag ins, string op, list<dag> pattern>
    : CSKY32Inst<AddrModeNone, opcode, outs, ins,
                 op #"\t$rz, ($rx, $ry << " #no #")", pattern> {
  bits<5> rx;
  bits<5> ry;
  bits<5> rz;
  let Inst{25 - 21} = ry; // ry;
  let Inst{20 - 16} = rx; // rx;
  let Inst{15 - 10} = sop;
  let Inst{9 - 5} = pcode; // pcode;
  let Inst{4 - 0} = rz;
}

class I_LDR<bits<6> sop, bits<5> pcode, string op, int no>
    : R_YXZ_LDST<0x34, sop, pcode, no,
    (outs GPR:$rz), (ins GPR:$rx, GPR:$ry), op, []>;

class I_STR<bits<6> sop, bits<5> pcode, string op, int no>
    : R_YXZ_LDST<0x35, sop, pcode, no, (outs),
    (ins GPR:$rz, GPR:$rx, GPR:$ry), op, []>;

// Format< OP[6] | RX[5] | RX[5] | SOP[6] | PCODE[5] | RZ[5] >
// Instructions:(1) not32
class R_XXZ<bits<6> sop, bits<5> pcode, dag outs, dag ins, string op,
            list<dag> pattern>
    : CSKY32Inst<AddrModeNone, 0x31, outs, ins, !strconcat(op, "\t$rz, $rx"),
                 pattern> {
  bits<5> rx;
  bits<5> rz;
  let Inst{25 - 21} = rx;
  let Inst{20 - 16} = rx;
  let Inst{15 - 10} = sop;
  let Inst{9 - 5} = pcode;
  let Inst{4 - 0} = rz;
}

// Format< OP[6] | RY[5] | RX[5] | SOP[6] | PCODE[5] | 00000[5] >
// Instructions:(4) cmpne32, cmphs32, cmplt32, tst32
class R_YX<bits<6> sop, bits<5> pcode, string op>
    : CSKY32Inst<AddrModeNone, 0x31, (outs CARRY:$ca),
                 (ins GPR:$rx, GPR:$ry),
                 !strconcat(op, "\t$rx, $ry"), []> {
  bits<5> ry;
  bits<5> rx;
  let Inst{25 - 21} = ry;
  let Inst{20 - 16} = rx;
  let Inst{15 - 10} = sop;
  let Inst{9 - 5} = pcode;
  let Inst{4 - 0} = 0;
  let isCompare = 1;
}

// Format< OP[6] | 00000[5] | RX[5] | SOP[6] | PCODE[5] | RZ[5] >
// Instructions:(12)
//   mov32, xtrb0.32, xtrb1.32, xtrb2.32, xtrb3.32, brev32, revb32
//   revh32, abs32, ff0.32, ff1.32, bgenr32
class R_XZ<bits<6> sop, bits<5> pcode, string op>
    : CSKY32Inst<AddrModeNone, 0x31, (outs GPR:$rz), (ins GPR:$rx),
                 !strconcat(op, "\t$rz, $rx"), []> {
  bits<5> rx;
  bits<5> rz;
  let Inst{25 - 21} = 0;
  let Inst{20 - 16} = rx;
  let Inst{15 - 10} = sop;
  let Inst{9 - 5} = pcode;
  let Inst{4 - 0} = rz;
}

// Format< OP[6] | RZ[5] | RX[5] | SOP[6] | PCODE[5] | 00000[5] >
// Instructions:(2) movf32, movt32
class R_ZX<bits<6> sop, bits<5> pcode, string op, list<dag> pattern>
    : CSKY32Inst<AddrModeNone, 0x31, (outs GPR:$rz),
                 (ins CARRY:$ca, GPR:$rx, GPR:$false),
                 !strconcat(op, "\t$rz, $rx"), pattern> {
  bits<5> rz;
  bits<5> rx;
  let Inst{25 - 21} = rz;
  let Inst{20 - 16} = rx;
  let Inst{15 - 10} = sop;
  let Inst{9 - 5} = pcode;
  let Inst{4 - 0} = 0;
  let Constraints = "$rz = $false";
  let isSelect = 1;
}

// Format< OP[6] | 00000[5] | RX[5] | SOP[6] | PCODE[5] | 00000[5] >
// Instructions:(1) tstnbz32
class R_X<bits<6> sop, bits<5> pcode, string op, list<dag> pattern>
    : CSKY32Inst<AddrModeNone, 0x31, (outs CARRY:$ca),(ins GPR:$rx),
                 !strconcat(op, "\t$rx"), pattern> {
  bits<5> rx;
  let Inst{25 - 21} = 0;
  let Inst{20 - 16} = rx;
  let Inst{15 - 10} = sop;
  let Inst{9 - 5} = pcode;
  let Inst{4 - 0} = 0;
}

// Format< OP[6] | 00000[5] | 00000[5] | SOP[6] | PCODE[5] | RZ[5] >
// Instructions:(2) mvc32, mvcv32
class R_Z_1<bits<6> sop, bits<5> pcode, string op>
    : CSKY32Inst<AddrModeNone, 0x31, (outs GPR:$rz),
                 (ins CARRY:$ca), !strconcat(op, "\t$rz"), []> {
  bits<5> rz;
  let Inst{25 - 21} = 0;
  let Inst{20 - 16} = 0;
  let Inst{15 - 10} = sop;
  let Inst{9 - 5} = pcode;
  let Inst{4 - 0} = rz;
}

// Format< OP[6] | RZ[5] | 00000[5] | SOP[6] | PCODE[5] | 00000[5] >
// Instructions:(2) clrf32, clrt32
class R_Z_2<bits<6> sop, bits<5> pcode, string op, list<dag> pattern>
    : CSKY32Inst<AddrModeNone, 0x31, (outs GPR:$rz),
    (ins CARRY:$ca, GPR:$false), !strconcat(op, "\t$rz"), []> {
  bits<5> rz;
  let Inst{25 - 21} = rz;
  let Inst{20 - 16} = 0;
  let Inst{15 - 10} = sop;
  let Inst{9 - 5} = pcode;
  let Inst{4 - 0} = 0;
  let Constraints = "$rz = $false";
}
