From fe603f822ce6da6933b81b3ba20f11f30fb616ba Mon Sep 17 00:00:00 2001 From: Stefan Doehla Date: Tue, 15 Apr 2025 07:59:10 +0000 Subject: [PATCH 1/3] [fix] L_mult -> L_mult_o in L_msuNs_co --- lib_com/basop32.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib_com/basop32.c b/lib_com/basop32.c index 20dbe663e..65d449a32 100644 --- a/lib_com/basop32.c +++ b/lib_com/basop32.c @@ -1575,7 +1575,7 @@ Word32 L_msuNs_co( Word32 L_var3, Word16 var1, Word16 var2, Flag *Carry, Flag *O { Word32 L_var_out; - L_var_out = L_mult( var1, var2 ); + L_var_out = L_mult_o( var1, var2, Overflow ); L_var_out = L_sub_co( L_var3, L_var_out, Carry, Overflow ); return ( L_var_out ); -- GitLab From f783eba95c52904c34d86e37a6f371f3f4461dcf Mon Sep 17 00:00:00 2001 From: Stefan Doehla Date: Tue, 22 Apr 2025 16:23:37 +0200 Subject: [PATCH 2/3] [fix] missing overflow handling as in legacy STL --- lib_com/basop32.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/lib_com/basop32.c b/lib_com/basop32.c index 65d449a32..aec1573be 100644 --- a/lib_com/basop32.c +++ b/lib_com/basop32.c @@ -2044,6 +2044,8 @@ Word32 L_sub_co( Word32 L_var1, Word32 L_var2, Flag *Carry, Flag *Overflow ) Word32 L_test; Flag carry_int = 0; + /* TODO: unset overflow, but not done */ + /* unset_overflow( Overflow ); */ if ( get_carry( Carry ) ) { unset_carry( Carry ); @@ -2056,6 +2058,7 @@ Word32 L_sub_co( Word32 L_var1, Word32 L_var2, Flag *Carry, Flag *Overflow ) L_var_out = L_var1 - L_var2; if ( L_var1 > 0L ) { + set_overflow( Overflow ); unset_carry( Carry ); } } @@ -2067,18 +2070,22 @@ Word32 L_sub_co( Word32 L_var1, Word32 L_var2, Flag *Carry, Flag *Overflow ) if ( ( L_test < 0 ) && ( L_var1 > 0 ) && ( L_var2 < 0 ) ) { + set_overflow( Overflow ); carry_int = 0; } else if ( ( L_test > 0 ) && ( L_var1 < 0 ) && ( L_var2 > 0 ) ) { + set_overflow( Overflow ); carry_int = 1; } else if ( ( L_test > 0 ) && ( ( L_var1 ^ L_var2 ) > 0 ) ) { + unset_overflow( Overflow ); carry_int = 1; } if ( L_test == MIN_32 ) { + set_overflow( Overflow ); carry_int ? set_carry( Carry ) : unset_carry( Carry ); } else -- GitLab From 8ee4fc159676449962ebfa9426aa689a2c654b70 Mon Sep 17 00:00:00 2001 From: Stefan Doehla Date: Wed, 23 Apr 2025 21:47:58 +0200 Subject: [PATCH 3/3] remove unnecessary comment --- lib_com/basop32.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib_com/basop32.c b/lib_com/basop32.c index aec1573be..fbe08a11f 100644 --- a/lib_com/basop32.c +++ b/lib_com/basop32.c @@ -2038,14 +2038,13 @@ Word32 DEPR_L_sub_c( Word32 L_var1, Word32 L_var2, Flag *Carry ) return ( L_var_out ); } + Word32 L_sub_co( Word32 L_var1, Word32 L_var2, Flag *Carry, Flag *Overflow ) { Word32 L_var_out; Word32 L_test; Flag carry_int = 0; - /* TODO: unset overflow, but not done */ - /* unset_overflow( Overflow ); */ if ( get_carry( Carry ) ) { unset_carry( Carry ); -- GitLab