> +#define BITS_REQUIRED_TO_STORE_VALUE(x) \ > + ((x) == 0 ? 1 : (sizeof(size_t) * CHAR_BIT - __builtin_clzl((size_t)x))) > + > +#define BIT_SHIFT_FROM_ALIGNMENT(x) ((x) == 0 ? 0 : __builtin_ctzl(x))
The two built-ins used are not available with MSVC. Please see if you can find similar functions in /lib/eal/include/rte_bitops.h instead of defining these macros. > + > +#define CAN_USE_RTE_PTR_COMPRESS_16_SHIFT(mem_range, obj_alignment) \ > + ((BITS_REQUIRED_TO_STORE_VALUE(mem_range) - \ > + BIT_SHIFT_FROM_ALIGNMENT(obj_alignment)) <= 16 ? 1 : 0) > + > +#define CAN_USE_RTE_PTR_COMPRESS_32_SHIFT(mem_range, obj_alignment) \ > + ((BITS_REQUIRED_TO_STORE_VALUE(mem_range) - \ > + BIT_SHIFT_FROM_ALIGNMENT(obj_alignment)) <= 32 ? 1 : 0) > + These macros are in a public header file, and thus public. Their names should begin with RTE_PTR_COMPRESS. And they should have Doxygen descriptions. Please also use them in the tests or some other code, for the CI to verify that MSVC can be build them.