]> git.ipfire.org Git - thirdparty/coreutils.git/commitdiff
factor: streamline gcd2_odd
authorPaul Eggert <eggert@cs.ucla.edu>
Sat, 5 Jul 2025 15:45:17 +0000 (08:45 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Thu, 10 Jul 2025 00:12:40 +0000 (17:12 -0700)
* src/factor.c (gcd2_odd): Omit a gt2 and adjusts other
tests accordingly.  Omit duplicate code that makes A odd.

src/factor.c

index 96efda2c10c7cf786ac8231677949323dcb74dd8..b62ec32e379b6107ab57e73ab74ef09c73b7593c 100644 (file)
@@ -511,9 +511,7 @@ gcd2_odd (mp_limb_t a1, mp_limb_t a0, mp_limb_t b1, mp_limb_t b0)
       if (!a0)
         return make_uuint (b1, b0);
     }
-  int ctz = stdc_trailing_zeros (a0);
-  if (ctz)
-    rsh2 (a1, a0, a1, a0, ctz);
+  goto make_A_odd;
 
   for (;;)
     {
@@ -525,23 +523,25 @@ gcd2_odd (mp_limb_t a1, mp_limb_t a0, mp_limb_t b1, mp_limb_t b0)
           sub_ddmmss (a1, a0, a1, a0, b1, b0);
           if (!a0)
             a0 = a1, a1 = 0;
+        make_A_odd:
           assume (a0);
-          ctz = stdc_trailing_zeros (a0);
+          int ctz = stdc_trailing_zeros (a0);
           if (ctz)
             rsh2 (a1, a0, a1, a0, ctz);
         }
-      else if (gt2 (b1, b0, a1, a0))
+      else
         {
           sub_ddmmss (b1, b0, b1, b0, a1, a0);
           if (!b0)
-            b0 = b1, b1 = 0;
-          assume (b0);
-          ctz = stdc_trailing_zeros (b0);
+            {
+              b0 = b1, b1 = 0;
+              if (!b0)
+                break;
+            }
+          int ctz = stdc_trailing_zeros (b0);
           if (ctz)
             rsh2 (b1, b0, b1, b0, ctz);
         }
-      else
-        break;
     }
 
   return make_uuint (a1, a0);