From fd79426050c9722d7dc601629b153a04068527b1 Mon Sep 17 00:00:00 2001 From: aadanen Date: Fri, 11 Sep 2026 13:04:17 -0700 Subject: [PATCH] bitreverse implementation fix and tests fix tests --- cfg/gnu.cfg | 73 +++++++++++++++++++++++++++++++++++++++++++++++++- test/cfg/gnu.c | 17 ++++++++++++ 2 files changed, 89 insertions(+), 1 deletion(-) diff --git a/cfg/gnu.cfg b/cfg/gnu.cfg index f83ed44294a..197a1d33899 100644 --- a/cfg/gnu.cfg +++ b/cfg/gnu.cfg @@ -25,6 +25,7 @@ pvalloc free + false @@ -64,10 +65,80 @@ - + + false + + (arg1 = ((arg1 & 0x55555555) << 1) | ((arg1 & 0xAAAAAAAA) >> 1), + arg1 = ((arg1 & 0x33333333) << 2) | ((arg1 & 0xCCCCCCCC) >> 2), + arg1 = ((arg1 & 0x0F0F0F0F) << 4) | ((arg1 & 0xF0F0F0F0) >> 4), + arg1) + + + + + + + 0: + + + + false + + (arg1 = ((arg1 & 0x55555555u) << 1) | ((arg1 & 0xAAAAAAAAu) >> 1), + arg1 = ((arg1 & 0x33333333u) << 2) | ((arg1 & 0xCCCCCCCCu) >> 2), + arg1 = ((arg1 & 0x0F0F0F0Fu) << 4) | ((arg1 & 0xF0F0F0F0u) >> 4), + arg1 = ((arg1 & 0x00FF00FFu) << 8) | ((arg1 & 0xFF00FF00u) >> 8), + arg1) + + + + + + + 0: + + + + false + + (arg1 = ((arg1 & 0x55555555ul) << 1) | ((arg1 & 0xAAAAAAAAul) >> 1), + arg1 = ((arg1 & 0x33333333ul) << 2) | ((arg1 & 0xCCCCCCCCul) >> 2), + arg1 = ((arg1 & 0x0F0F0F0Ful) << 4) | ((arg1 & 0xF0F0F0F0ul) >> 4), + arg1 = ((arg1 & 0x00FF00FFul) << 8) | ((arg1 & 0xFF00FF00ul) >> 8), + arg1 = ((arg1 & 0x0000FFFFul) << 16) | ((arg1 & 0xFFFF0000ul) >> 16), + arg1) + + + + + + + 0: + + + + false + + (arg1 = ((arg1 & 0x55555555ull) << 1) | ((arg1 & 0xAAAAAAAAull) >> 1), + arg1 = ((arg1 & 0x33333333ull) << 2) | ((arg1 & 0xCCCCCCCCull) >> 2), + arg1 = ((arg1 & 0x0F0F0F0Full) << 4) | ((arg1 & 0xF0F0F0F0ull) >> 4), + arg1 = ((arg1 & 0x00FF00FFull) << 8) | ((arg1 & 0xFF00FF00ull) >> 8), + arg1 = ((arg1 & 0x0000FFFFull) << 16) | ((arg1 & 0xFFFF0000ull) >> 16), + arg1 = ((arg1 & 0x00000000FFFFFFFFull) << 32) | ((arg1 & 0xFFFFFFFF00000000ull) >> 32), + arg1) + + + + + + + 0: + + + diff --git a/test/cfg/gnu.c b/test/cfg/gnu.c index 7b3c6ae5fed..db44a341779 100644 --- a/test/cfg/gnu.c +++ b/test/cfg/gnu.c @@ -390,6 +390,23 @@ void valid_code(int argInt1, va_list valist_arg, const int * parg) // cppcheck-suppress zerodiv // cppcheck-suppress unreadVariable i64_1 /= bswap_64(0x023456789abcde0f) - 0x0fdebc9a78563402; + +#if __GNUC__ > 16 + uint8_t i8_1 = 0; + // cppcheck-suppress zerodiv + // cppcheck-suppress unreadVariable + i8_1 /= __builtin_bitreverse8(1) - 128; + // cppcheck-suppress zerodiv + // cppcheck-suppress unreadVariable + i16_1 /= __builtin_bitreverse16(5) - 40960; + // cppcheck-suppress zerodiv + // cppcheck-suppress unreadVariable + i32_1 /= __builtin_bitreverse32(4294967295) - 4294967295; + // cppcheck-suppress zerodiv + // cppcheck-suppress unreadVariable + i64_1 /= __builtin_bitreverse64(8) - 1152921504606846976; +#endif + #endif }