]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Fortran: Detect working CLZL or use alternative.
authorAndre Vehreschild <vehre@gcc.gnu.org>
Mon, 1 Sep 2025 12:11:27 +0000 (14:11 +0200)
committerJerry DeLisle <jvdelisle@gcc.gnu.org>
Thu, 26 Feb 2026 17:18:23 +0000 (09:18 -0800)
libgfortran/ChangeLog:

* caf/shmem/allocator.c (next_power_of_two): Use sane clzl
implementation or alternative.

libgfortran/caf/shmem/allocator.c

index d900167cfc24f3bfa444a4629af26d49b2196360..3ea4d50e045a322258ef7aba7613d4d326390ad1 100644 (file)
@@ -25,6 +25,10 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 /* Main allocation routine, works like malloc.  Round up allocations
    to the next power of two and keep free lists in buckets.  */
 
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
 #include "libgfortran.h"
 
 #include "allocator.h"
@@ -74,8 +78,16 @@ allocator_init_supervisor (allocator *a, allocator_shared *s, shared_memory sm)
 static size_t
 next_power_of_two (size_t size)
 {
+#ifdef HAVE_SANE_BUILTIN_CLZL
   assert (size);
+#if (__INTPTR_WIDTH__ == 64)
   return 1 << (VOIDP_BITS - __builtin_clzl (size - 1));
+#else
+  return 1 << (VOIDP_BITS - __builtin_clz (size - 1));
+#endif
+#else
+  return 1 << (int)ceil(log2(size));
+#endif
 }
 
 shared_mem_ptr