From d3f8d2baa9e2cd8d35187d0e22155b5437947bf7 Mon Sep 17 00:00:00 2001 From: Ian Moffett Date: Tue, 22 Jul 2025 02:35:05 -0400 Subject: oemu: cpu: Introduce decoding for MUL instruction Signed-off-by: Ian Moffett --- usr.bin/oemu/cpu.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'usr.bin/oemu/cpu.c') diff --git a/usr.bin/oemu/cpu.c b/usr.bin/oemu/cpu.c index 84f04bf..ccac0b1 100644 --- a/usr.bin/oemu/cpu.c +++ b/usr.bin/oemu/cpu.c @@ -145,6 +145,29 @@ cpu_sub(struct oemu_cpu *cpu, inst_t *inst) imm, inst->imm, inst->rd, regs->xreg[inst->rd]); } +/* + * Decode the INST_MUL instruction + * + * @cpu: CPU that is executing + * @inst: Instruction dword + */ +static void +cpu_mul(struct oemu_cpu *cpu, inst_t *inst) +{ + struct cpu_regs *regs = &cpu->regs; + imm_t imm; + + if (inst->rd > NELEM(regs->xreg)) { + printf("bad register operand for 'mul'\n"); + return; + } + + imm = regs->xreg[inst->rd]; + regs->xreg[inst->rd] *= inst->imm; + printf("%d * %d -> X%d, new=%d\n", + imm, inst->imm, inst->rd, regs->xreg[inst->rd]); +} + /* * Reset a CPU to a default state */ @@ -187,6 +210,9 @@ cpu_kick(struct oemu_cpu *cpu, struct sysmem *mem) case INST_SUB: cpu_sub(cpu, inst); break; + case INST_MUL: + cpu_mul(cpu, inst); + break; } /* Is this a halt instruction? */ -- cgit v1.2.3