diff --git a/src/vm.cpp b/src/vm.cpp index b5f86f4..cd7c884 100644 --- a/src/vm.cpp +++ b/src/vm.cpp @@ -146,7 +146,7 @@ void VM::step() { } else if (funct3 == 0x04) { // XOR setreg(rd, registers[rs1] ^ registers[rs2]); } else if (funct3 == 0x06) { // OR - setreg(rd, registers[rd] = registers[rs1] | registers[rs2]); + setreg(rd, registers[rs1] | registers[rs2]); } else if (funct3 == 0x07) { // AND setreg(rd, registers[rs1] & registers[rs2]); } else if (funct3 == 0x01) { // SLL @@ -156,10 +156,10 @@ void VM::step() { uint32_t shift_amount = registers[rs2] & 0x1F; setreg(rd, value >> shift_amount); } else if (funct3 == 0x02) { // SLT - registers[rd] = (static_cast(registers[rs1]) < - static_cast(registers[rs2])) - ? 0 - : 1; + setreg(rd, (static_cast(registers[rs1]) < + static_cast(registers[rs2])) + ? 0 + : 1); } else if (funct3 == 0x03) { // SLTU setreg(rd, (registers[rs1] < registers[rs2]) ? 1 : 0); } else { @@ -167,7 +167,7 @@ void VM::step() { } } else if (funct7 == 0x20) { if (funct3 == 0x0) { // SUB - registers[rd] = registers[rs1] - registers[rs2]; + setreg(rd, registers[rs1] - registers[rs2]); } else if (funct3 == 0x05) { // SRA // Only the lower 5 bits are used for shift int32_t value = static_cast(registers[rs1]); @@ -305,11 +305,9 @@ void VM::step() { imm = sign_extend(instr >> 20, 12); // Extract 12-bit immediate if (funct3 == 0x00) { // LB uint32_t addr = registers[rs1] + imm; - // registers[rd] = sign_extend(read_memory_byte(addr), 8); setreg(rd, read_memory_byte(addr)); } else if (funct3 == 0x01) { // LH uint32_t addr = registers[rs1] + imm; - // registers[rd] = sign_extend(read_memory_half_word(addr), 16); setreg(rd, read_memory_half_word(addr)); } else if (funct3 == 0x2) { // LW uint32_t addr = registers[rs1] + imm;