Execute: Fix carry flag on subtraction operations.
authorJoshua Wise <joshua@rebirth.joshuawise.com>
Fri, 23 Jan 2009 12:37:25 +0000 (07:37 -0500)
committerJoshua Wise <joshua@rebirth.joshuawise.com>
Fri, 23 Jan 2009 12:37:25 +0000 (07:37 -0500)
Execute.v

index 289ffbb..ac446aa 100644 (file)
--- 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
This page took 0.01978 seconds and 4 git commands to generate.