Port modiff changes to GCC 4.8.5
authorPaul Eggert <eggert@cs.ucla.edu>
Wed, 17 May 2023 17:53:26 +0000 (10:53 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Wed, 17 May 2023 17:55:50 +0000 (10:55 -0700)
Problem reported by Spencer Baugh.
* src/lisp.h (elogb): Now simply a function on unsigned long long int.
This avoids problems porting to GCC 4.8.5 20150623 (Red Hat 4.8.5-44).
There may be a minor runtime cost on 32-bit platforms but it’s
not worth worrying about.

src/lisp.h

index c9a64f07427f2deaaa0364bb970d6a27a75c23f8..57c1c7395c1a308e1e0eb47bada4d3b37d1c4e26 100644 (file)
@@ -3906,18 +3906,11 @@ integer_to_uintmax (Lisp_Object num, uintmax_t *n)
 }
 
 /* Return floor (log2 (N)) as an int, where 0 < N <= ULLONG_MAX.  */
-#if (201112 <= __STDC_VERSION__ && INT_MAX <= UINT_MAX \
-     && LONG_MAX <= ULONG_MAX && LLONG_MAX <= ULLONG_MAX)
-# define elogb(n) \
-    _Generic (+(n), \
-             int:           UINT_WIDTH   - 1 - count_leading_zeros    (n), \
-             unsigned int:  UINT_WIDTH   - 1 - count_leading_zeros    (n), \
-             long:          ULONG_WIDTH  - 1 - count_leading_zeros_l  (n), \
-             unsigned long: ULONG_WIDTH  - 1 - count_leading_zeros_l  (n), \
-             default:       ULLONG_WIDTH - 1 - count_leading_zeros_ll (n))
-#else
-# define elogb(n) (ULLONG_WIDTH - 1 - count_leading_zeros_ll (n))
-#endif
+INLINE int
+elogb (unsigned long long int n)
+{
+  return ULLONG_WIDTH - 1 - count_leading_zeros_ll (n);
+}
 
 /* A modification count.  These are wide enough, and incremented
    rarely enough, so that they should never overflow a 60-bit counter