PATCH 7/22] Coarray caf_shmem final patch set
Jerry D <[email protected]>
| Newsgroups | gmane.comp.gcc.patches,gmane.comp.gcc.fortran |
|---|---|
| Message-ID | <[email protected]> |
Ref: https://gcc.gnu.org/pipermail/fortran/2026-February/063551.html See attached. Awaiting approval.
caf_shmem-7-of-22.patch
(text/x-patch, 1.4 KB)
From 2a9f07181318677ee7a958bc9890b090c7528641 Mon Sep 17 00:00:00 2001 From: Andre Vehreschild <[email protected]> Date: Mon, 1 Sep 2025 14:11:27 +0200 Subject: [PATCH] Fortran: Detect working CLZL or use alternative. libgfortran/ChangeLog: * caf/shmem/allocator.c (next_power_of_two): Use sane clzl implementation or alternative. --- libgfortran/caf/shmem/allocator.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/libgfortran/caf/shmem/allocator.c b/libgfortran/caf/shmem/allocator.c index d900167cfc2..3ea4d50e045 100644 --- a/libgfortran/caf/shmem/allocator.c +++ b/libgfortran/caf/shmem/allocator.c @@ -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 -- 2.53.0