From 1bc060d94b6e0978c8bdf85795506ab4ed921225 Mon Sep 17 00:00:00 2001 From: Joshua Wise Date: Fri, 23 Jan 2009 07:37:25 -0500 Subject: [PATCH 1/1] Execute: Fix carry flag on subtraction operations. --- Execute.v | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Execute.v b/Execute.v index 289ffbb..ac446aa 100644 --- a/Execute.v +++ b/Execute.v @@ -291,11 +291,13 @@ module ALU( end `ALU_SUB: begin {flag_c, result} = diff; + flag_c = !flag_c; flag_v = diff_v; setres = 1'b1; end `ALU_RSB: begin {flag_c, result} = rdiff; + flag_c = !flag_c; flag_v = rdiff_v; setres = 1'b1; end @@ -311,11 +313,13 @@ module ALU( end `ALU_SBC: begin {flag_c, result} = diff - {32'b0, (~cpsr[`CPSR_C])}; + flag_c = !flag_c; flag_v = diff_v | (diff[31] & ~result[31]); setres = 1'b1; end `ALU_RSC: begin {flag_c, result} = rdiff - {32'b0, (~cpsr[`CPSR_C])}; + flag_c = !flag_c; flag_v = rdiff_v | (rdiff[31] & ~result[31]); setres = 1'b1; end @@ -331,6 +335,7 @@ module ALU( end `ALU_CMP: begin {flag_c, result} = diff; + flag_c = !flag_c; flag_v = diff_v; setres = 1'b0; end -- 2.39.2