Added FIXME messages for mulh

master
vhaudiquet 1 year ago
parent a76c9e5e5c
commit b1a327cccf
  1. 2
      src/cpu/rv32cpu.c

@ -371,6 +371,7 @@ static void cpu_execute(rv32_cpu_t* cpu, instruction_t* instruction)
break; break;
case FUNC7_MULH: case FUNC7_MULH:
// MULtiplication High (32 high bits) (signed * signed) // MULtiplication High (32 high bits) (signed * signed)
// FIXME: This is wrong, we should sign extend the int64_t i guess
uint64_t mulh_result = (uint64_t) (((int64_t) cpu->regs.x[instruction->rs1]) * ((int64_t) cpu->regs.x[instruction->rs2])); uint64_t mulh_result = (uint64_t) (((int64_t) cpu->regs.x[instruction->rs1]) * ((int64_t) cpu->regs.x[instruction->rs2]));
cpu->regs.x[instruction->rd] = (uint32_t) (mulh_result >> 32); cpu->regs.x[instruction->rd] = (uint32_t) (mulh_result >> 32);
break; break;
@ -392,6 +393,7 @@ static void cpu_execute(rv32_cpu_t* cpu, instruction_t* instruction)
break; break;
case FUNC7_MULHSU: case FUNC7_MULHSU:
// MULtiplication High (32 high bits) (signed * unsigned) // MULtiplication High (32 high bits) (signed * unsigned)
// FIXME: This is wrong, we should sign extend the int64_t i guess
uint64_t mulhsu_result = (uint64_t) (((int64_t) cpu->regs.x[instruction->rs1]) * ((uint64_t) cpu->regs.x[instruction->rs2])); uint64_t mulhsu_result = (uint64_t) (((int64_t) cpu->regs.x[instruction->rs1]) * ((uint64_t) cpu->regs.x[instruction->rs2]));
cpu->regs.x[instruction->rd] = (uint32_t) (mulhsu_result >> 32); cpu->regs.x[instruction->rd] = (uint32_t) (mulhsu_result >> 32);
break; break;

Loading…
Cancel
Save