openvm_custom_insn

Macro custom_insn_r

Source
custom_insn_r!() { /* proc-macro */ }
Expand description

Custom RISC-V instruction macro for the zkVM.

This macro is used to define custom R-type RISC-V instructions for the zkVM. Usage:

custom_insn_r!(
    opcode = OPCODE,
    funct3 = FUNCT3,
    funct7 = FUNCT7,
    rd = InOut x0,
    rs1 = In rs1,
    rs2 = In rs2
);

Here, opcode, funct3, and funct7 are the opcode, funct3, and funct7 fields of the RISC-V instruction. rd, rs1, and rs2 are the destination register, source register 1, and source register 2 respectively. The In, Out, InOut, and Const keywords are required to specify the type of the register arguments. They translate to in(reg), out(reg), inout(reg), and const respectively, and mean

  • “read the value from this variable” before execution (In),
  • “write the value to this variable” after execution (Out),
  • “read the value from this variable, then write it back to the same variable” after execution (InOut), and
  • “use this constant value” (Const).