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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.