Clean up the usage of registers[rd]
This commit is contained in:
parent
351a895d69
commit
6ce3366009
1 changed files with 6 additions and 8 deletions
10
src/vm.cpp
10
src/vm.cpp
|
@ -146,7 +146,7 @@ void VM::step() {
|
||||||
} else if (funct3 == 0x04) { // XOR
|
} else if (funct3 == 0x04) { // XOR
|
||||||
setreg(rd, registers[rs1] ^ registers[rs2]);
|
setreg(rd, registers[rs1] ^ registers[rs2]);
|
||||||
} else if (funct3 == 0x06) { // OR
|
} else if (funct3 == 0x06) { // OR
|
||||||
setreg(rd, registers[rd] = registers[rs1] | registers[rs2]);
|
setreg(rd, registers[rs1] | registers[rs2]);
|
||||||
} else if (funct3 == 0x07) { // AND
|
} else if (funct3 == 0x07) { // AND
|
||||||
setreg(rd, registers[rs1] & registers[rs2]);
|
setreg(rd, registers[rs1] & registers[rs2]);
|
||||||
} else if (funct3 == 0x01) { // SLL
|
} else if (funct3 == 0x01) { // SLL
|
||||||
|
@ -156,10 +156,10 @@ void VM::step() {
|
||||||
uint32_t shift_amount = registers[rs2] & 0x1F;
|
uint32_t shift_amount = registers[rs2] & 0x1F;
|
||||||
setreg(rd, value >> shift_amount);
|
setreg(rd, value >> shift_amount);
|
||||||
} else if (funct3 == 0x02) { // SLT
|
} else if (funct3 == 0x02) { // SLT
|
||||||
registers[rd] = (static_cast<int32_t>(registers[rs1]) <
|
setreg(rd, (static_cast<int32_t>(registers[rs1]) <
|
||||||
static_cast<int32_t>(registers[rs2]))
|
static_cast<int32_t>(registers[rs2]))
|
||||||
? 0
|
? 0
|
||||||
: 1;
|
: 1);
|
||||||
} else if (funct3 == 0x03) { // SLTU
|
} else if (funct3 == 0x03) { // SLTU
|
||||||
setreg(rd, (registers[rs1] < registers[rs2]) ? 1 : 0);
|
setreg(rd, (registers[rs1] < registers[rs2]) ? 1 : 0);
|
||||||
} else {
|
} else {
|
||||||
|
@ -167,7 +167,7 @@ void VM::step() {
|
||||||
}
|
}
|
||||||
} else if (funct7 == 0x20) {
|
} else if (funct7 == 0x20) {
|
||||||
if (funct3 == 0x0) { // SUB
|
if (funct3 == 0x0) { // SUB
|
||||||
registers[rd] = registers[rs1] - registers[rs2];
|
setreg(rd, registers[rs1] - registers[rs2]);
|
||||||
} else if (funct3 == 0x05) { // SRA
|
} else if (funct3 == 0x05) { // SRA
|
||||||
// Only the lower 5 bits are used for shift
|
// Only the lower 5 bits are used for shift
|
||||||
int32_t value = static_cast<int32_t>(registers[rs1]);
|
int32_t value = static_cast<int32_t>(registers[rs1]);
|
||||||
|
@ -305,11 +305,9 @@ void VM::step() {
|
||||||
imm = sign_extend(instr >> 20, 12); // Extract 12-bit immediate
|
imm = sign_extend(instr >> 20, 12); // Extract 12-bit immediate
|
||||||
if (funct3 == 0x00) { // LB
|
if (funct3 == 0x00) { // LB
|
||||||
uint32_t addr = registers[rs1] + imm;
|
uint32_t addr = registers[rs1] + imm;
|
||||||
// registers[rd] = sign_extend(read_memory_byte(addr), 8);
|
|
||||||
setreg(rd, read_memory_byte(addr));
|
setreg(rd, read_memory_byte(addr));
|
||||||
} else if (funct3 == 0x01) { // LH
|
} else if (funct3 == 0x01) { // LH
|
||||||
uint32_t addr = registers[rs1] + imm;
|
uint32_t addr = registers[rs1] + imm;
|
||||||
// registers[rd] = sign_extend(read_memory_half_word(addr), 16);
|
|
||||||
setreg(rd, read_memory_half_word(addr));
|
setreg(rd, read_memory_half_word(addr));
|
||||||
} else if (funct3 == 0x2) { // LW
|
} else if (funct3 == 0x2) { // LW
|
||||||
uint32_t addr = registers[rs1] + imm;
|
uint32_t addr = registers[rs1] + imm;
|
||||||
|
|
Loading…
Reference in a new issue