From: Paul Eggert Date: Mon, 23 Jun 2025 17:26:28 +0000 (-0700) Subject: factor: use 1-word code only when tested X-Git-Tag: v9.8~205 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=4e2aeb31e0d5699169852c10e6b2a778daeaf28d;p=thirdparty%2Fcoreutils.git factor: use 1-word code only when tested * src/factor.c (print_factors): Use single-precision code only when word size is 32 or 64, as it isn't tested for other sizes and is known to not work when it the size is 128. This change does not affect any known practical platforms. --- diff --git a/src/factor.c b/src/factor.c index 9ccc755d79..641fbcaff5 100644 --- a/src/factor.c +++ b/src/factor.c @@ -2308,8 +2308,16 @@ print_factors (char const *input) switch (err) { - case LONGINT_OK: - if (hi (u) >> (W_TYPE_SIZE - 1) == 0) + case LONGINT_OK:; + /* Use single-precision code only when W_TYPE_SIZE is 32 or 64, + as suggests that it fails when + W_TYPE_SIZE is 128 and the code has not been well tested with + other values. FIXME: Either remove the single-precision + code, or fix its assumptions about W_TYPE_SIZE, perhaps by + using Baille-PSW as suggested in a FIXME above. */ + enum { SINGLE_WORKS = W_TYPE_SIZE == 32 || W_TYPE_SIZE == 64 }; + + if (SINGLE_WORKS && hi (u) >> (W_TYPE_SIZE - 1) == 0) { devmsg ("[using single-precision arithmetic] "); print_factors_single (u);