This commit is contained in:
Thor Preimesberger 2025-09-23 18:25:00 -04:00 committed by GitHub
commit ed604aa2d1
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -20,6 +20,13 @@
#include "random.h" #include "random.h"
#include "util.h" #include "util.h"
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wundef"
#if __x86_64__
#include "immintrin.h"
#endif
#pragma GCC diagnostic pop
#ifdef USE_PKEY #ifdef USE_PKEY
#include <sys/mman.h> #include <sys/mman.h>
#endif #endif
@ -405,8 +412,15 @@ static size_t get_free_slot(struct random_state *rng, size_t slots, const struct
// randomize start location for linear search (uniform random choice is too slow) // randomize start location for linear search (uniform random choice is too slow)
size_t random_index = get_random_u16_uniform(rng, slots); size_t random_index = get_random_u16_uniform(rng, slots);
size_t first_bitmap = random_index / U64_WIDTH; size_t first_bitmap = random_index / U64_WIDTH;
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wundef"
// __BMI2__ is idiomatic to gcc unfortunately.
#if __x86_64__ && (__BMI2__ || (__clang__ && __BMI2INTRIN_H_))
#pragma GCC diagnostic pop
u64 random_split = ~(~0UL << _pext_u64(random_index, 8));
#else
u64 random_split = ~(~0UL << (random_index - first_bitmap * U64_WIDTH)); u64 random_split = ~(~0UL << (random_index - first_bitmap * U64_WIDTH));
#endif
size_t i = first_bitmap; size_t i = first_bitmap;
u64 masked = metadata->bitmap[i]; u64 masked = metadata->bitmap[i];
masked |= random_split; masked |= random_split;