From 4436524a3e6f37b68d0f23683681b249a4edcf52 Mon Sep 17 00:00:00 2001 From: Timothy Herchen Date: Mon, 6 Jul 2026 11:31:28 +0200 Subject: [PATCH] add rbit fallback GCC 12.2 added `__rbitll` intrinsic to `arm_acle.h`, so we can add a fallback for older versions Clang 10 (our new minimum supported version) is unaffected by all this closes https://github.com/official-stockfish/Stockfish/pull/6949 No functional change --- src/attacks.h | 16 ++++++++++++++-- src/misc.h | 4 ++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/attacks.h b/src/attacks.h index de29914c9..2a4c77843 100644 --- a/src/attacks.h +++ b/src/attacks.h @@ -43,12 +43,24 @@ void init(); #ifdef USE_HYPERBOLA_QUINT inline Bitboard reverse_bb(Bitboard bb) { - #ifdef __aarch64__ + #if __has_builtin(__builtin_bitreverse64) + return __builtin_bitreverse64(bb); + #else + #ifdef __aarch64__ + #if defined(__GNUC__) && !defined(__clang__) \ + && (__GNUC__ < 12 || (__GNUC__ == 12 && __GNUC_MINOR__ < 2)) + // no rbit in arm_acle.h + Bitboard out; + asm("rbit %0, %1" : "=r"(out) : "r"(bb)); + return out; + #else return __rbitll(bb); - #else // loongarch + #endif + #else // loongarch Bitboard out; asm("bitrev.d %0, %1" : "=r"(out) : "r"(bb)); return out; + #endif #endif } diff --git a/src/misc.h b/src/misc.h index 20c73bd43..db2c03f1c 100644 --- a/src/misc.h +++ b/src/misc.h @@ -561,6 +561,10 @@ void move_to_front(std::vector& vec, Predicate pred) { } } +#ifndef __has_builtin + #define __has_builtin(x) 0 +#endif + #if defined(__GNUC__) #define sf_always_inline __attribute__((always_inline)) #elif defined(_MSC_VER)