// Copyright 2024 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// This file refactors the original "C" extension into the new set of Zc*
// extensions. These should be preferred for new simulator targets.

// Non floating point compact instructions from "C".

slot riscv_zca32 {
  default size = 2;
  includes {
    #include "riscv/riscv_i_instructions.h"
  }
  opcodes {
    clwsp{(: x2, I_ci_uimm6x4 : ), (: : rd)},
      resources:{next_pc,x2 : rd[0..]},
      disasm: "lw", "%rd, %I_ci_uimm6x4(%x2)",
      semfunc: "&RV32::RiscVILw", "&RV32::RiscVILwChild";
    cswsp{: x2, I_css_uimm6x4, crs2 : },
      resources: {next_pc,x2, crs2},
      disasm: "sw", "%crs2, %I_css_uimm6x4(%x2)",
      semfunc: "&RV32::RiscVISw";
    clw{(: c3rs1, I_cl_uimm5x4 : ), (: : c3rd)},
      resources: {next_pc,c3rs1 : c3rd[0..]},
      disasm: "lw", "%c3rd, %I_cl_uimm5x4(%c3rs1)",
      semfunc: "&RV32::RiscVILw", "&RV32::RiscVILwChild";
    csw{: c3rs1, I_cl_uimm5x4, c3rs2 : },
      resources: {next_pc,c3rs1, c3rs2},
      disasm: "sw", "%c3rs2, %I_cl_uimm5x4(%c3rs1)",
      semfunc: "&RV32::RiscVISw";
    cj{: I_cj_imm11, x0 : next_pc, x0},
      resources: {next_pc,x0 : next_pc[0..], x0[0..]},
      disasm: "j", "0x%(@+I_cj_imm11:08x)",
      semfunc: "&RV32::RiscVIJal";
    cjal{: I_cj_imm11, x0 : next_pc, x1},
      resources: {next_pc,x0 : next_pc[0..], x1[0..]},
      disasm: "jal", "0x%(@+I_cj_imm11:08x)",
      semfunc: "&RV32::RiscVIJal";
    cjr{: crs1, x0 : next_pc, x0},
      resources: {next_pc,crs1, x0 : next_pc[0..], x0[0..]},
      disasm: "jr", "%crs1",
      semfunc: "&RV32::RiscVIJalr";
    cjalr{: crs1, x0 : next_pc, x1},
      resources: {next_pc,crs1, x0 : next_pc[0..], x1[0..]},
      disasm: "jalr", "%crs1",
      semfunc: "&RV32::RiscVIJalr";
    cbeqz{: c3rs1, x0, I_cb_imm8 : next_pc},
      resources: {next_pc,c3rs1, x0 : next_pc[0..]},
      disasm: "beqz", "%c3rs1, 0x%(@+I_cb_imm8:08x)",
      semfunc: "&RV32::RiscVIBeq";
    cbnez{: c3rs1, x0, I_cb_imm8 : next_pc},
      resources: {next_pc,c3rs1, x0 : next_pc[0..]},
      disasm: "bnez", "%c3rs1, 0x%(@+I_cb_imm8:08x)",
      semfunc: "&RV32::RiscVIBne";
    cli{: x0, I_ci_imm6 : rd},
      resources: {next_pc,x0 : rd[0..]},
      disasm: "li", "%rd, %I_ci_imm6",
      semfunc: "&RV32::RiscVIAdd";
    clui{: I_ci_imm6_12 : rd},
      resources: {next_pc : rd[0..]},
      disasm: "lui", "%rd, 0x%(I_ci_imm6_12:x)",
      semfunc: "&RV32::RiscVILui";
    caddi{: rd, I_ci_imm6 : rd},
      resources: {next_pc, rd : rd[0..]},
      disasm: "addi", "%rd, %rd, %I_ci_imm6",
      semfunc: "&RV32::RiscVIAdd";
    caddi16sp{: x2, I_ci_imm6x16 : x2},
      resources: {next_pc, x2 : x2[0..]},
      disasm: "addi", "%x2, %x2, %(I_ci_imm6x16:d)",
      semfunc: "&RV32::RiscVIAdd";
    caddi4spn{: x2, I_ciw_uimm8x4 : c3rd},
      resources: {next_pc, x2 : c3rd[0..]},
      disasm: "addi", "%c3rd, %x2, %I_ciw_uimm8x4",
      semfunc: "&RV32::RiscVIAdd";
    cslli{: rd, I_ci_uimm6 : rd},
      resources: {next_pc, rd : rd[0..]},
      disasm: "slli", "%rd, %rd, 0x%(I_ci_uimm6:x)",
      semfunc: "&RV32::RiscVISll";
    csrli{: c3rs1, I_ci_uimm6 : c3rs1},
      resources: {next_pc, c3rs1 : c3rs1[0..]},
      disasm: "srli", "%c3rs1, %c3rs1, 0x%(I_ci_uimm6:x)",
      semfunc: "&RV32::RiscVISrl";
    csrai{: c3rs1, I_ci_uimm6 : c3rs1},
      resources: {next_pc, c3rs1 : c3rs1[0..]},
      disasm: "srai", "%c3rs1, %c3rs1, 0x%(I_ci_uimm6:x)",
      semfunc: "&RV32::RiscVISra";
    candi{: c3rs1, I_ci_imm6 : c3rs1},
      resources: {next_pc, c3rs1 : c3rs1[0..]},
      disasm: "andi", "%c3rs1, %c3rs1, %I_ci_imm6",
      semfunc: "&RV32::RiscVIAnd";
    cmv{: crs2 , x0: crd},
      resources: {next_pc, crs2, x0 : crd[0..]},
      disasm: "mv", "%crd, %crs2",
      semfunc: "&RV32::RiscVIAdd";
    cadd{: crs2, crd: crd},
      resources: {next_pc, crs2, crd : crd[0..]},
      disasm: "add", "%crd, %crd, %crs2",
      semfunc: "&RV32::RiscVIAdd";
    cand{: c3rs1, c3rs2 : c3rs1},
      resources: {next_pc, c3rs1, c3rs2 : c3rs1[0..]},
      disasm: "and", "%c3rs1, %c3rs1, %c3rs2",
      semfunc: "&RV32::RiscVIAnd";
    cor{: c3rs1, c3rs2 : c3rs1},
      resources: {next_pc, c3rs1, c3rs2 : c3rs1[0..]},
      disasm: "or", "%c3rs1, %c3rs1, %c3rs2",
      semfunc: "&RV32::RiscVIOr";
    cxor{: c3rs1, c3rs2 : c3rs1},
      resources: {next_pc, c3rs1, c3rs2 : c3rs1[0..]},
      disasm: "xor", "%c3rs1, %c3rs1, %c3rs2",
      semfunc: "&RV32::RiscVIXor";
    csub{: c3rs1, c3rs2 : c3rs1},
      resources: {next_pc, c3rs1, c3rs2 : c3rs1[0..]},
      disasm: "sub", "%c3rs1, %c3rs1, %c3rs2",
      semfunc: "&RV32::RiscVISub";
    cnop{},
      disasm: "nop",
      resources: {next_pc},
      semfunc: "&RiscVINop";
    cebreak{},
      disasm: "ebreak",
      resources: {next_pc},
      semfunc: "&RiscVIEbreak";
  }
}

slot riscv_zca64 : riscv_zca32 {
  includes {
    #include "riscv/riscv_i_instructions.h"
  }
  default size = 2;
  opcodes {
    clwsp = override, semfunc: "&RV64::RiscVILw", "&RV64::RiscVILwChild";
    cswsp = override, semfunc: "&RV64::RiscVISw";
    clw = override, semfunc: "&RV64::RiscVILw", "&RV64::RiscVILwChild";
    csw = override, semfunc: "&RV64::RiscVISw";
    cj = override, semfunc: "&RV64::RiscVIJal";
    cjal = override, semfunc: "&RV64::RiscVIJal";
    cjr = override, semfunc: "&RV64::RiscVIJalr";
    cjalr = override, semfunc: "&RV64::RiscVIJalr";
    cbeqz = override, semfunc: "&RV64::RiscVIBeq";
    cbnez = override, semfunc: "&RV64::RiscVIBne";
    cli = override, semfunc: "&RV64::RiscVIAdd";
    clui = override, semfunc: "&RV64::RiscVILui";
    caddi = override, semfunc: "&RV64::RiscVIAdd";
    caddi16sp = override, semfunc: "&RV64::RiscVIAdd";
    caddi4spn = override, semfunc: "&RV64::RiscVIAdd";
    cslli = override, semfunc: "&RV64::RiscVISll";
    csrli = override, semfunc: "&RV64::RiscVISrl";
    csrai = override, semfunc: "&RV64::RiscVISra";
    candi = override, semfunc: "&RV64::RiscVIAnd";
    cmv = override, semfunc: "&RV64::RiscVIAdd";
    cadd = override, semfunc: "&RV64::RiscVIAdd";
    cand = override, semfunc: "&RV64::RiscVIAnd";
    cor = override, semfunc: "&RV64::RiscVIOr";
    cxor = override, semfunc: "&RV64::RiscVIXor";
    csub = override, semfunc: "&RV64::RiscVISub";
  }
}

slot riscv_zcf32 {
  includes {
    #include "riscv/riscv_i_instructions.h"
  }
  default size = 2;
  opcodes {
    cflwsp{(: x2, I_ci_uimm6x4 : ), (: : frd)},
      resources:{next_pc, x2 : frd[0..]},
      disasm: "flw", "%frd, %I_ci_uimm6x4(%x2)",
      semfunc: "&RV32::RiscVILw", "&RV32::RiscVILwChild";
    cfswsp{: x2, I_css_uimm6x4, cfrs2 : },
      resources: {next_pc, x2, cfrs2},
      disasm: "fsw", "%cfrs2, %I_css_uimm6x4(%x2)",
      semfunc: "&RV32::RiscVISw";
    cflw{(: c3rs1, I_cl_uimm5x4 : ), (: : c3frd)},
      resources: {next_pc, c3rs1 : c3frd[0..]},
      disasm: "flw", "%c3frd, %I_cl_uimm5x4(%c3rs1)",
      semfunc: "&RV32::RiscVILw", "&RV32::RiscVILwChild";
    cfsw{: c3rs1, I_cl_uimm5x4, c3frs2 : },
      resources: {next_pc, c3rs1, c3frs2},
      disasm: "fsw", "%c3frs2, %I_cl_uimm5x4(%c3rs1)",
      semfunc: "&RV32::RiscVISw";
  }
}

slot riscv_zcf64 {
  includes {
    #include "riscv/riscv_i_instructions.h"
  }
  default size = 2;
  opcodes {
    cflwsp = override, semfunc: "&RV64::RiscVILw", "&RV64::RiscVILwChild";
    cfswsp = override, semfunc: "&RV64::RiscVISw";
    cflw = override, semfunc: "&RV64::RiscVILw", "&RV64::RiscVILwChild";
    cfsw = override, semfunc: "&RV64::RiscVISw";
  }
}

slot riscv_zcd32 {
  includes {
    #include "riscv/riscv_i_instructions.h"
  }
  default size = 2;
  opcodes {
    cfldsp{(: x2, I_ci_uimm6x8 : ), (: : drd)},
      resources:{next_pc, x2 : drd[0..]},
      disasm: "fld", "%drd, %I_ci_uimm6x8(%x2)",
      semfunc: "&RV64::RiscVILd", "&RV64::RiscVILdChild";
    cfsdsp{: x2, I_css_uimm6x8, cdrs2 : },
      resources: {next_pc, x2, cdrs2},
      disasm: "fsd", "%cdrs2, %I_css_uimm6x8(%x2)",
      semfunc: "&RV64::RiscVISd";
    cfld{(: c3rs1, I_cl_uimm5x8 : ), (: : c3drd)},
      resources: {next_pc, c3rs1 : c3drd[0..]},
      disasm: "fld", "%c3drd, %I_cl_uimm5x8(%c3rs1)",
      semfunc: "&RV64::RiscVILd", "&RV64::RiscVILdChild";
    cfsd{: c3rs1, I_cl_uimm5x8, c3drs2 : },
      resources: {next_pc, c3rs1, c3drs2},
      disasm: "fsd", "%c3drs2, %I_cl_uimm5x8(%c3rs1)",
      semfunc: "&RV32::RiscVDSd";
  }
}

slot riscv_zcd64 {
  includes {
    #include "riscv/riscv_i_instructions.h"
  }
  default size = 2;
  opcodes {
    cfldsp = override, semfunc: "&RV64::RiscVILd", "&RV64::RiscVILdChild";
    cfsdsp = override, semfunc: "&RV64::RiscVISd";
    cfld = override, semfunc: "&RV64::RiscVILd", "&RV64::RiscVILdChild";
    cfsd = override, semfunc: "&RV64::RiscVDSd";
  }
}

slot riscv_zcb32 {
  includes {
    #include "riscv/riscv_bitmanip_instructions.h"
  }
  default size = 2;
    opcodes {
    c_lbu{(: c3rs1, uimm2b),(: : c3rs2)},
      resources: {c3rs1 : c3rs2},
      disasm: "c.lbu", "%c3rs2, %uimm2b(%c3rs1)",
      semfunc: "&RV32::RiscVILbu", "&RV32::RiscVILbuChild";
    c_lhu{(: c3rs1, uimm2h),(: : c3rs2)},
      resources: {c3rs1 : c3rs2},
      disasm: "c.lhu", "c3rs2, %uimm2h(%c3rs1)",
      semfunc: "&RV32::RiscVILhu", "&RV32::RiscVILhuChild";
    c_lh{(: c3rs1, uimm2h),(: : c3rs2)},
      resources: {c3rs1 : c3rs2},
      disasm: "c.lh", "%c3rs2, %uimm2h(%c3rs1)",
      semfunc: "&RV32::RiscVILh", "&RV32::RiscVILhChild";
    c_sb{ : c3rs1, uimm2b, c3rs2},
      resources: {c3rs1, c3rs2},
      disasm: "c.sb", "%c3rs2, %uimm2b(%c3rs1)",
      semfunc: "&RV32::RiscVISb";
    c_sh{: c3rs1, uimm2h, c3rs2},
      resources: {c3rs1, c3rs2},
      disasm: "c.sh", "%c3rs2, %uimm2h(%c3rs1)",
      semfunc: "&RV32::RiscVISh";
    c_zext_b{: c3rs1 : c3rd},
      resources: {c3rs1: c3rd},
      disasm: "c.zext.b", "%c3rs1",
      semfunc: "&RV32::RiscVZextB";
    c_sext_b{: c3rs1 : c3rd},
      resources: {c3rs1 : c3rd},
      disasm: "c.sext.b", "c3rs1",
      semfunc: "&RV32::RiscVSextB";
    c_zext_h{: c3rs1 : c3rd},
      resources: {c3rs1 : c3rd},
      disasm: "c.zext.h", "c3rs1",
      semfunc: "&RV32::RiscVZextH";
    c_sext_h{: c3rs1 : c3rd},
      resources: {c3rs1 : c3rd},
      disasm: "c.sext.h", "c3rs1",
      semfunc: "&RV32::RiscVSextH";
    c_not{: c3rs1 : c3rd},
      resources: {c3rs1 : c3rd},
      disasm: "c.not", "c3rs1",
      semfunc: "&RV32::RiscVNot";
    c_mul{: c3rs1, c3rs2 : c3rd},
      resources: {c3rs1, c3rs2 : c3rd},
      disasm: "c.mul", "%c3rd, %c3rs2",
      semfunc: "&RV32::MMul";
  }
}

slot riscv_zcb64 {
  includes {
    #include "riscv/riscv_bitmanip_instructions.h"
  }
  default size = 2;
    opcodes {
    c_lbu = override, semfunc: "&RV64::RiscVILbu", "&RV64::RiscVILbuChild";
    c_lhu = override, semfunc: "&RV64::RiscVLhu", "&RV64::RiscVILhuChild";
    c_lh = override, semfunc: "&RV64::RiscVLh", "&RV64::RiscVILhChild";
    c_sb = override, semfunc: "&RV64::RiscVSb";
    c_sh = override, semfunc: "&RV64::RiscVSh";
    c_zext_b = override, semfunc: "&RV64::RiscVZextB";
    c_sext_b = override, semfunc: "&RV64::RiscVSextB";
    c_zext_h = override, semfunc: "&RV64::RiscVZextH";
    c_sext_h = override, semfunc: "&RV64::RiscVSextH";
    c_not = override, semfunc: "&RV64::RiscV";
    c_mul = override, semfunc: "&RV64::MMul";
    c_sext_w{: c3rs1 : c3rd},
      resources: {c3rs1 : c3rd},
      disasm: "c.sext.w", "%c3rs1",
      semfunc: "&RV64::RiscVSextW";
  }
}

slot riscv_zcmp32 {
  includes {
    #include "riscv/riscv_zc_instructions.h"
  }
  default size = 2;
  opcodes {
    cm_push{: x2, spimm6, rlist, [rlist] : x2},
      resources: {x2, [rlist] : x2},
      disasm: "cm.push",
      semfunc: "&RV32::RiscVZCmpPush";
    cm_pop{: x2, spimm6, rlist : x2, [rlist]},
      resources: {x2 : x2, [rlist]},
      disasm: "cm.pop",
      semfunc: "&RV32::RiscVZCmpPop";
    cm_popret{: x2, spimm6, rlist : x2, [rlist]},
      resources: {x2 : x2, [rlist]},
      disasm: "cm.popret",
      semfunc: "&RV32::RiscVZCmpPopRet";
    cm_popretz{: x2, spimm6, rlist : x2, [rlist]},
      resources: {x2 : x2, [rlist]},
      disasm: "cm.popretz",
      semfunc: "&RV32::RiscVZCmpPopRetz";
    cm_mvsa01{ : x10, x11 : sreg1, sreg2},
      resources: {x10, x11 : sreg1, sreg2},
      disasm: "cm.mvsa01","%sreg1, %sreg2",
      semfunc: "&RV32::RiscVZCmpMvTwoRegs";
    cm_mva01s{ : sreg1, sreg2 : x10, x11 },
      resources: {sreg1, sreg2 : x10, x11},
      disasm: "cm.mva01s", "%sreg1, %sreg2",
      semfunc: "&RV32::RiscVZCmpMvTwoRegs";
  }
}

slot riscv_zcmp64 {
  includes {
    #include "riscv/riscv_zc_instructions.h"
  }
  default size = 2;
  opcodes {
    cm_push{ : x2, spimm6, rlist, [rlist] : x2},
      resources: {[rlist]},
      disasm: "cm.push",
      semfunc: "&RV64::RiscVZCmpPush";
    cm_pop{ : x2, spimm6, rlist : [rlist], x2},
      resources: { : [rlist]},
      disasm: "cm.pop",
      semfunc: "&RV64::RiscVZCmpPop";
    cm_popret{ : x2, spimm6, rlist, x1 : [rlist], x2, next_pc},
      resources: { : [rlist]},
      disasm: "cm.popret",
      semfunc: "&RV64::RiscVZCmpPopRet";
    cm_popretz{ : x2, spimm6, rlist, x1 : [rlist], x2, x10, next_pc},
      resources: { : [rlist]},
      disasm: "cm.popretz",
      semfunc: "&RV64::RiscVZCmpPopRetz";
    cm_mvsa01{ : x10, x11 : sreg1, sreg2},
      resources: {x10, x11 : sreg1, sreg2},
      disasm: "cm.mvsa01", "%sreg1, %sreg2",
      semfunc: "&RV64::RiscVZCmpMvTwoRegs";
    cm_mva01s{ : sreg1, sreg2 : x10, x11},
      resources: {sreg1, sreg2 : x10, x11},
      disasm: "cm.mva01s", "%sreg1, %sreg2",
      semfunc: "&RV64::RiscVZCmpMvTwoRegs";
  }
}

slot riscv_zcmt32 {
  includes {
    #include "riscv/riscv_zc_instructions.h"
  }
  default size = 2;
  opcodes {
    cm_jt{: index : next_pc},
      resources: {: next_pc},
      disasm: "cm.jt",
      semfunc: "&RV32::RiscVZCmtJt";
    cm_jalt{: index : next_pc, x1},
      resources: {: next_pc, x1},
      disasm: "cm.jalt",
      semfunc: "&RV32::RiscVZCmtJalt";
  }
}

slot riscv_zcmt64 {
  includes {
    #include "riscv/riscv_zc_instructions.h"
  }
  default size = 2;
  opcodes {
    cm_jt = override, semfunc: "&RV64::RiscVZCmtJt";
    cm_jalt = override, semfunc: "&RV64::RiscVZCmtJalt";
  }
}
