2
0
mirror of https://gitlab.isc.org/isc-projects/bind9 synced 2025-08-22 10:10:06 +00:00

Use the <stdbit.h> names for bit manipulation shims

When <stdbit.h> is unavailable, use the stdc names like stdc_count_zeros
instead of ISC_COUNT_ZERO macros to simplify the code.
This commit is contained in:
Ondřej Surý 2025-08-20 15:08:39 +02:00
parent 808340e1a3
commit 0bee2c6923
No known key found for this signature in database
GPG Key ID: 2820F37E873DEA41
6 changed files with 17 additions and 23 deletions

View File

@ -495,10 +495,10 @@ static dns_qpcell_t
next_capacity(uint32_t prev_capacity, uint32_t size) { next_capacity(uint32_t prev_capacity, uint32_t size) {
/* /*
* Request size was floored at 2 because builtin_clz used to be 0. * Request size was floored at 2 because builtin_clz used to be 0.
* We keep this behavior because ISC_LEADING_ZEROS(0) = 32. * We keep this behavior because stdc_leading_zeros(0) = 32.
*/ */
size = ISC_MAX3(size, prev_capacity, 2U); size = ISC_MAX3(size, prev_capacity, 2U);
uint32_t log2 = 32U - ISC_LEADING_ZEROS(size - 1U); uint32_t log2 = 32U - stdc_leading_zeros(size - 1U);
return 1U << ISC_CLAMP(log2, QP_CHUNK_LOG_MIN, QP_CHUNK_LOG_MAX); return 1U << ISC_CLAMP(log2, QP_CHUNK_LOG_MIN, QP_CHUNK_LOG_MAX);
} }

View File

@ -753,7 +753,7 @@ static inline dns_qpweight_t
branch_count_bitmap_before(dns_qpnode_t *n, dns_qpshift_t bit) { branch_count_bitmap_before(dns_qpnode_t *n, dns_qpshift_t bit) {
uint64_t mask = (1ULL << bit) - 1 - TAG_MASK; uint64_t mask = (1ULL << bit) - 1 - TAG_MASK;
uint64_t bitmap = branch_index(n) & mask; uint64_t bitmap = branch_index(n) & mask;
return (dns_qpweight_t)ISC_POPCOUNT(bitmap); return (dns_qpweight_t)stdc_count_zeros(bitmap);
} }
/* /*

View File

@ -1094,7 +1094,7 @@ diff_keys(const dns_rpz_cidr_key_t *key1, dns_rpz_prefix_t prefix1,
for (i = 0; bit < maxbit; i++, bit += DNS_RPZ_CIDR_WORD_BITS) { for (i = 0; bit < maxbit; i++, bit += DNS_RPZ_CIDR_WORD_BITS) {
delta = key1->w[i] ^ key2->w[i]; delta = key1->w[i] ^ key2->w[i];
if (delta != 0) { if (delta != 0) {
bit += ISC_LEADING_ZEROS(delta); bit += stdc_leading_zeros(delta);
break; break;
} }
} }

View File

@ -181,7 +181,7 @@ static inline uint
value_to_key(const isc_histo_t *hg, uint64_t value) { value_to_key(const isc_histo_t *hg, uint64_t value) {
/* ensure that denormal numbers are all in chunk zero */ /* ensure that denormal numbers are all in chunk zero */
uint64_t chunked = value | CHUNKSIZE(hg); uint64_t chunked = value | CHUNKSIZE(hg);
int clz = ISC_LEADING_ZEROS(chunked); int clz = stdc_leading_zeros(chunked);
/* actually 1 less than the exponent except for denormals */ /* actually 1 less than the exponent except for denormals */
uint exponent = 63 - hg->sigbits - clz; uint exponent = 63 - hg->sigbits - clz;
/* mantissa has leading bit set except for denormals */ /* mantissa has leading bit set except for denormals */

View File

@ -19,26 +19,16 @@
#include <isc/attributes.h> #include <isc/attributes.h>
#include <isc/util.h> #include <isc/util.h>
#ifndef __has_header
#define __has_header(x) 0
#endif
#if __has_header(<stdbit.h>) #if __has_header(<stdbit.h>)
#include <stdbit.h> #include <stdbit.h>
#define ISC_POPCOUNT(x) stdc_count_zeros(x)
#define ISC_LEADING_ZEROS(x) stdc_leading_zeros(x)
#define ISC_TRAILING_ZEROS(x) stdc_trailing_zeros(x)
#define ISC_LEADING_ONES(x) stdc_leading_ones(x)
#define ISC_TRAILING_ONES(x) stdc_trailing_ones(x)
#else /* __has_header(<stdbit.h>) */ #else /* __has_header(<stdbit.h>) */
#ifdef HAVE_BUILTIN_POPCOUNTG #ifdef HAVE_BUILTIN_POPCOUNTG
#define ISC_POPCOUNT(x) __builtin_popcountg(x) #define stdc_count_zeros(x) __builtin_popcountg(x)
#else /* HAVE_BUILTIN_POPCOUNTG */ #else /* HAVE_BUILTIN_POPCOUNTG */
#define ISC_POPCOUNT(x) \ #define stdc_count_zeros(x) \
_Generic((x), \ _Generic((x), \
unsigned int: __builtin_popcount, \ unsigned int: __builtin_popcount, \
unsigned long: __builtin_popcountl, \ unsigned long: __builtin_popcountl, \
@ -46,9 +36,9 @@
#endif /* HAVE_BUILTIN_POPCOUNTG */ #endif /* HAVE_BUILTIN_POPCOUNTG */
#ifdef HAVE_BUILTIN_CLZG #ifdef HAVE_BUILTIN_CLZG
#define ISC_LEADING_ZEROS(x) __builtin_clzg(x, (int)(sizeof(x) * 8)) #define stdc_leading_zeros(x) __builtin_clzg(x, (int)(sizeof(x) * 8))
#else /* HAVE_BUILTIN_CLZG */ #else /* HAVE_BUILTIN_CLZG */
#define ISC_LEADING_ZEROS(x) \ #define stdc_leading_zeros(x) \
(((x) == 0) ? (sizeof(x) * 8) \ (((x) == 0) ? (sizeof(x) * 8) \
: _Generic((x), \ : _Generic((x), \
unsigned int: __builtin_clz, \ unsigned int: __builtin_clz, \
@ -57,9 +47,9 @@
#endif /* HAVE_BUILTIN_CLZG */ #endif /* HAVE_BUILTIN_CLZG */
#ifdef HAVE_BUILTIN_CTZG #ifdef HAVE_BUILTIN_CTZG
#define ISC_TRAILING_ZEROS(x) __builtin_ctzg(x, (int)sizeof(x) * 8) #define stdc_trailing_zeros(x) __builtin_ctzg(x, (int)sizeof(x) * 8)
#else /* HAVE_BUILTIN_CTZG */ #else /* HAVE_BUILTIN_CTZG */
#define ISC_TRAILING_ZEROS(x) \ #define stdc_trailing_zeros(x) \
(((x) == 0) ? (sizeof(x) * 8) \ (((x) == 0) ? (sizeof(x) * 8) \
: _Generic((x), \ : _Generic((x), \
unsigned int: __builtin_ctz, \ unsigned int: __builtin_ctz, \
@ -67,8 +57,8 @@
unsigned long long: __builtin_ctzll)(x)) unsigned long long: __builtin_ctzll)(x))
#endif /* HAVE_BUILTIN_CTZG */ #endif /* HAVE_BUILTIN_CTZG */
#define ISC_LEADING_ONES(x) ISC_LEADING_ZEROS(~(x)) #define stdc_leading_ones(x) stdc_leading_zeros(~(x))
#define ISC_TRAILING_ONES(x) ISC_TRAILING_ZEROS(~(x)) #define stdc_trailing_ones(x) stdc_trailing_zeros(~(x))
#endif /* __has_header(<stdbit.h>) */ #endif /* __has_header(<stdbit.h>) */

View File

@ -35,6 +35,10 @@
#define __has_feature(x) 0 #define __has_feature(x) 0
#endif /* if !defined(__has_feature) */ #endif /* if !defined(__has_feature) */
#ifndef __has_header
#define __has_header(x) 0
#endif
/*** /***
*** General Macros. *** General Macros.
***/ ***/