Skip to content

Commit

Permalink
o1vm/riscv32im: place correctly the unsafe keyword
Browse files Browse the repository at this point in the history
dannywillems committed Dec 26, 2024
1 parent 2aeb0fd commit ff89083
Showing 1 changed file with 26 additions and 24 deletions.
50 changes: 26 additions & 24 deletions o1vm/src/interpreters/riscv32im/interpreter.rs
Original file line number Diff line number Diff line change
@@ -1507,11 +1507,12 @@ pub fn interpret_rtype<Env: InterpreterEnv>(env: &mut Env, instr: RInstruction)
// add: x[rd] = x[rs1] + x[rs2]
let local_rs1 = env.read_register(&rs1);
let local_rs2 = env.read_register(&rs2);
let overflow_scratch = env.alloc_scratch();
let rd_scratch = env.alloc_scratch();
let local_rd = unsafe {
let (local_rd, _overflow) =
env.add_witness(&local_rs1, &local_rs2, rd_scratch, overflow_scratch);
let local_rd = {
let overflow_scratch = env.alloc_scratch();
let rd_scratch = env.alloc_scratch();
let (local_rd, _overflow) = unsafe {
env.add_witness(&local_rs1, &local_rs2, rd_scratch, overflow_scratch)
};
local_rd
};
env.write_register(&rd, local_rd);
@@ -1523,11 +1524,12 @@ pub fn interpret_rtype<Env: InterpreterEnv>(env: &mut Env, instr: RInstruction)
/* sub: x[rd] = x[rs1] - x[rs2] */
let local_rs1 = env.read_register(&rs1);
let local_rs2 = env.read_register(&rs2);
let local_rd = unsafe {
let local_rd = {
let underflow_scratch = env.alloc_scratch();
let rd_scratch = env.alloc_scratch();
let (local_rd, _underflow) =
env.sub_witness(&local_rs1, &local_rs2, rd_scratch, underflow_scratch);
let (local_rd, _underflow) = unsafe {
env.sub_witness(&local_rs1, &local_rs2, rd_scratch, underflow_scratch)
};
local_rd
};
env.write_register(&rd, local_rd);
@@ -1539,9 +1541,9 @@ pub fn interpret_rtype<Env: InterpreterEnv>(env: &mut Env, instr: RInstruction)
/* sll: x[rd] = x[rs1] << x[rs2] */
let local_rs1 = env.read_register(&rs1);
let local_rs2 = env.read_register(&rs2);
let local_rd = unsafe {
let local_rd = {
let rd_scratch = env.alloc_scratch();
env.shift_left(&local_rs1, &local_rs2, rd_scratch)
unsafe { env.shift_left(&local_rs1, &local_rs2, rd_scratch) }
};
env.write_register(&rd, local_rd);

@@ -1552,9 +1554,9 @@ pub fn interpret_rtype<Env: InterpreterEnv>(env: &mut Env, instr: RInstruction)
/* slt: x[rd] = (x[rs1] < x[rs2]) ? 1 : 0 */
let local_rs1 = env.read_register(&rs1);
let local_rs2 = env.read_register(&rs2);
let local_rd = unsafe {
let local_rd = {
let rd_scratch = env.alloc_scratch();
env.test_less_than_signed(&local_rs1, &local_rs2, rd_scratch)
unsafe { env.test_less_than_signed(&local_rs1, &local_rs2, rd_scratch) }
};
env.write_register(&rd, local_rd);

@@ -1565,9 +1567,9 @@ pub fn interpret_rtype<Env: InterpreterEnv>(env: &mut Env, instr: RInstruction)
/* sltu: x[rd] = (x[rs1] < (u)x[rs2]) ? 1 : 0 */
let local_rs1 = env.read_register(&rs1);
let local_rs2 = env.read_register(&rs2);
let local_rd = unsafe {
let local_rd = {
let pos = env.alloc_scratch();
env.test_less_than(&local_rs1, &local_rs2, pos)
unsafe { env.test_less_than(&local_rs1, &local_rs2, pos) }
};
env.write_register(&rd, local_rd);

@@ -1578,9 +1580,9 @@ pub fn interpret_rtype<Env: InterpreterEnv>(env: &mut Env, instr: RInstruction)
/* xor: x[rd] = x[rs1] ^ x[rs2] */
let local_rs1 = env.read_register(&rs1);
let local_rs2 = env.read_register(&rs2);
let local_rd = unsafe {
let local_rd = {
let pos = env.alloc_scratch();
env.xor_witness(&local_rs1, &local_rs2, pos)
unsafe { env.xor_witness(&local_rs1, &local_rs2, pos) }
};
env.write_register(&rd, local_rd);

@@ -1591,9 +1593,9 @@ pub fn interpret_rtype<Env: InterpreterEnv>(env: &mut Env, instr: RInstruction)
/* srl: x[rd] = x[rs1] >> x[rs2] */
let local_rs1 = env.read_register(&rs1);
let local_rs2 = env.read_register(&rs2);
let local_rd = unsafe {
let local_rd = {
let pos = env.alloc_scratch();
env.shift_right(&local_rs1, &local_rs2, pos)
unsafe { env.shift_right(&local_rs1, &local_rs2, pos) }
};
env.write_register(&rd, local_rd);

@@ -1604,9 +1606,9 @@ pub fn interpret_rtype<Env: InterpreterEnv>(env: &mut Env, instr: RInstruction)
/* sra: x[rd] = x[rs1] >> x[rs2] */
let local_rs1 = env.read_register(&rs1);
let local_rs2 = env.read_register(&rs2);
let local_rd = unsafe {
let local_rd = {
let pos = env.alloc_scratch();
env.shift_right_arithmetic(&local_rs1, &local_rs2, pos)
unsafe { env.shift_right_arithmetic(&local_rs1, &local_rs2, pos) }
};
env.write_register(&rd, local_rd);

@@ -1617,9 +1619,9 @@ pub fn interpret_rtype<Env: InterpreterEnv>(env: &mut Env, instr: RInstruction)
/* or: x[rd] = x[rs1] | x[rs2] */
let local_rs1 = env.read_register(&rs1);
let local_rs2 = env.read_register(&rs2);
let local_rd = unsafe {
let local_rd = {
let pos = env.alloc_scratch();
env.or_witness(&local_rs1, &local_rs2, pos)
unsafe { env.or_witness(&local_rs1, &local_rs2, pos) }
};
env.write_register(&rd, local_rd);

@@ -1630,9 +1632,9 @@ pub fn interpret_rtype<Env: InterpreterEnv>(env: &mut Env, instr: RInstruction)
/* and: x[rd] = x[rs1] & x[rs2] */
let local_rs1 = env.read_register(&rs1);
let local_rs2 = env.read_register(&rs2);
let local_rd = unsafe {
let local_rd = {
let pos = env.alloc_scratch();
env.and_witness(&local_rs1, &local_rs2, pos)
unsafe { env.and_witness(&local_rs1, &local_rs2, pos) }
};
env.write_register(&rd, local_rd);

0 comments on commit ff89083

Please sign in to comment.