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:
parent
808340e1a3
commit
0bee2c6923
@ -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);
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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 */
|
||||||
|
@ -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>) */
|
||||||
|
|
||||||
|
@ -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.
|
||||||
***/
|
***/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user