From 9b867c02e0edc00da1d9420765971c0547942b39 Mon Sep 17 00:00:00 2001 From: Rekai Musuka Date: Fri, 21 Oct 2022 05:11:58 -0300 Subject: [PATCH] feat(cpu): implement SUB in THUMB format 3 --- src/cpu/thumb/format3.zig | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/cpu/thumb/format3.zig b/src/cpu/thumb/format3.zig index 7939113..a40e627 100644 --- a/src/cpu/thumb/format3.zig +++ b/src/cpu/thumb/format3.zig @@ -28,6 +28,7 @@ pub fn format3(comptime op: u2, comptime rd: u3) InstrFn { cpu.cpsr.v.write(((left ^ result) & (~offset ^ result)) >> 31 & 1 == 1); }, 0b10 => { + // ADD const left = cpu.r[rd]; var result: u32 = undefined; @@ -40,7 +41,15 @@ pub fn format3(comptime op: u2, comptime rd: u3) InstrFn { cpu.cpsr.v.write(((left ^ result) & (offset ^ result)) >> 31 & 1 == 1); }, 0b11 => { - std.debug.panic("TODO: Implement sub R{}, #0x{X:0>2}", .{ rd, offset }); + // SUB + const left = cpu.r[rd]; + const result = left -% offset; + cpu.r[rd] = result; + + cpu.cpsr.n.write(result >> 31 & 1 == 1); + cpu.cpsr.z.write(result == 0); + cpu.cpsr.c.write(offset <= left); + cpu.cpsr.v.write(((left ^ result) & (~offset ^ result)) >> 31 & 1 == 1); }, } }