From ff161a69e6ae5bc63e3152eda1508db05e8a33ba Mon Sep 17 00:00:00 2001 From: taitep Date: Mon, 22 Dec 2025 19:19:19 +0100 Subject: [PATCH] Implement ADD --- src/instructions.rs | 5 +++++ src/instructions/rvi.rs | 10 ++++++++++ 2 files changed, 15 insertions(+) diff --git a/src/instructions.rs b/src/instructions.rs index a2edc53..c9c1c52 100644 --- a/src/instructions.rs +++ b/src/instructions.rs @@ -13,6 +13,11 @@ use crate::{ pub(crate) fn find_and_exec(instr: Instruction, core: &mut Core) -> Option { match instr.opcode_noncompressed() { + 0b01100 => match (instr.funct7(), instr.funct3()) { + // OP + (0b0000000, 0b000) => Some(rvi::add(core, instr)), + _ => None, + }, 0b00100 => match instr.funct3() { // OP_IMM 0b000 => Some(rvi::addi(core, instr)), diff --git a/src/instructions/rvi.rs b/src/instructions/rvi.rs index 0920e80..608b1ae 100644 --- a/src/instructions/rvi.rs +++ b/src/instructions/rvi.rs @@ -11,6 +11,16 @@ use crate::{ mem::PageNum, }; +pub fn add(core: &mut Core, instr: Instruction) -> InstructionResult { + core.reg_write( + instr.rd(), + core.reg_read(instr.rs1()) + .wrapping_add(core.reg_read(instr.rs2())), + ); + core.advance_pc(); + InstructionResult::Normal +} + pub fn addi(core: &mut Core, instr: Instruction) -> InstructionResult { core.reg_write( instr.rd(),