Fixed add64
authorRobert Pengelly <robertapengelly@hotmail.com>
Wed, 8 Jul 2026 16:54:46 +0000 (17:54 +0100)
committerRobert Pengelly <robertapengelly@hotmail.com>
Wed, 8 Jul 2026 16:54:46 +0000 (17:54 +0100)
int64.c

diff --git a/int64.c b/int64.c
index 257524e4f39672b65e25a06e996f601e098b6be7..1e4fe92408d5a61a8177b96e37c2994ab9619f86 100644 (file)
--- a/int64.c
+++ b/int64.c
@@ -15,10 +15,10 @@ void add64 (int64_s *a, int64_s b) {
     unsigned long al = a->low & U32_MASK;
     unsigned long bl = b.low & U32_MASK;
     
-    unsigned long raw_sum = al + bl;
-    unsigned long carry = (raw_sum >> 32) & 1UL;
-    
-    a->low = raw_sum & U32_MASK;
+    unsigned long raw_sum = (al + bl) & U32_MASK;
+    unsigned long carry = (raw_sum < al) ? 1UL : 0UL;
+
+    a->low = raw_sum;
     a->high = ((a->high & U32_MASK) + (b.high & U32_MASK) + carry) & U32_MASK;
 
 }