Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 28 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@ members = [
"extensions/rv32im/transpiler",
"extensions/rv32im/guest",
"extensions/rv32im/tests",
"extensions/rv64im/transpiler",
"extensions/rv64im/guest",
"extensions/rv32-adapters",
"extensions/native/circuit",
"extensions/native/compiler",
Expand Down Expand Up @@ -145,6 +147,8 @@ openvm-rv32im-circuit = { path = "extensions/rv32im/circuit", default-features =
openvm-rv32im-transpiler = { path = "extensions/rv32im/transpiler", default-features = false }
openvm-rv32im-guest = { path = "extensions/rv32im/guest", default-features = false }
openvm-rv32-adapters = { path = "extensions/rv32-adapters", default-features = false }
openvm-rv64im-transpiler = { path = "extensions/rv64im/transpiler", default-features = false }
openvm-rv64im-guest = { path = "extensions/rv64im/guest", default-features = false }
openvm-native-circuit = { path = "extensions/native/circuit", default-features = false }
openvm-native-compiler = { path = "extensions/native/compiler", default-features = false }
openvm-native-compiler-derive = { path = "extensions/native/compiler/derive", default-features = false }
Expand Down
2 changes: 2 additions & 0 deletions crates/toolchain/instructions/src/riscv.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
/// 32-bit register stored as 4 bytes (4 limbs of 8-bits) in OpenVM memory.
pub const RV32_REGISTER_NUM_LIMBS: usize = 4;
/// 64-bit register stored as 8 bytes (8 limbs of 8-bits) in OpenVM memory.
pub const RV64_REGISTER_NUM_LIMBS: usize = 8;
pub const RV32_CELL_BITS: usize = 8;

pub const RV32_IMM_AS: u32 = 0;
Expand Down
1 change: 1 addition & 0 deletions crates/toolchain/tests/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ openvm-algebra-transpiler.workspace = true
openvm-bigint-circuit.workspace = true
openvm-rv32im-circuit.workspace = true
openvm-rv32im-transpiler.workspace = true
openvm-rv64im-transpiler.workspace = true
openvm-algebra-circuit.workspace = true
openvm-ecc-circuit = { workspace = true }
openvm-instructions = { workspace = true }
Expand Down
Binary file added crates/toolchain/tests/tests/data/rv64im-intrin
Binary file not shown.
71 changes: 71 additions & 0 deletions crates/toolchain/tests/tests/data/rv64im-intrin.S
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
# RV64 intrinsic test for custom OpenVM opcodes.
# Exercises: TERMINATE, PHANTOM (HintInput, PrintStr), HINT_STORED, HINT_BUFFER.

#define CUSTOM_0 0x0b

# funct3 values for CUSTOM_0
#define TERMINATE_FUNCT3 0
#define HINT_FUNCT3 1
#define PHANTOM_FUNCT3 3

# PHANTOM sub-opcodes (imm field)
#define PHANTOM_HINT_INPUT 0
#define PHANTOM_PRINT_STR 1

# HINT sub-opcodes (imm field)
#define HINT_STORED_IMM 0
#define HINT_BUFFER_IMM 1

.macro terminate ec
.insn i CUSTOM_0, TERMINATE_FUNCT3, x0, x0, \ec
.endm

.macro phantom_hint_input
.insn i CUSTOM_0, PHANTOM_FUNCT3, x0, x0, PHANTOM_HINT_INPUT
.endm

.macro phantom_print_str rd, rs1
.insn i CUSTOM_0, PHANTOM_FUNCT3, \rd, \rs1, PHANTOM_PRINT_STR
.endm

.macro hint_stored rd
.insn i CUSTOM_0, HINT_FUNCT3, \rd, x0, HINT_STORED_IMM
.endm

.macro hint_buffer rd, rs1
.insn i CUSTOM_0, HINT_FUNCT3, \rd, \rs1, HINT_BUFFER_IMM
.endm

.text
.global _start
_start:

# ===================================================================
# 1. PHANTOM(HintInput) — request hint data from host
# ===================================================================
phantom_hint_input

# ===================================================================
# 2. PHANTOM(PrintStr) — tell host to print string at (ptr, len)
# ===================================================================
li a0, 0x300000 # dummy pointer
li a1, 18 # dummy length
phantom_print_str a0, a1

# ===================================================================
# 3. HINT_STORED — store one dword from hint stream
# ===================================================================
li a0, 0x300100 # dummy destination address
hint_stored a0

# ===================================================================
# 4. HINT_BUFFER — store multiple dwords from hint stream
# ===================================================================
li a0, 0x300200 # dummy buffer address
li a1, 8 # 8 dwords
hint_buffer a0, a1

# ===================================================================
# 5. TERMINATE with exit code 0 (success)
# ===================================================================
terminate 0
Binary file added crates/toolchain/tests/tests/data/rv64im-stress
Binary file not shown.
Loading
Loading