Because of conflicts with libc++ (v1/bit include file). Simplify the macro as there shouldn't be any bad cornercases
Signed-off-by: Norbert Lange <norbert.la...@andritz.com> --- include/boilerplate/compiler.h | 31 ++++++++++--------------------- lib/boilerplate/heapmem.c | 2 +- lib/copperplate/heapobj-pshared.c | 2 +- 3 files changed, 12 insertions(+), 23 deletions(-) diff --git a/include/boilerplate/compiler.h b/include/boilerplate/compiler.h index 0fcc17be1..0cd71b80a 100644 --- a/include/boilerplate/compiler.h +++ b/include/boilerplate/compiler.h @@ -71,27 +71,16 @@ #ifdef __cplusplus extern "C" { #endif - + void __invalid_operand_size(void); -#define __ctz(__v) \ - ({ \ - int __ret; \ - if (!__v) \ - __ret = sizeof(__v) * 8; \ - else \ - switch (sizeof(__v)) { \ - case sizeof(int): \ - __ret = __builtin_ctz((unsigned int)__v); \ - break; \ - case sizeof(long long): \ - __ret = __builtin_ctzll(__v); \ - break; \ - default: \ - __invalid_operand_size(); \ - } \ - __ret; \ - }) +#define xenomai_count_trailing_zeros(x) \ + ((x) == 0 ? (int)(sizeof(x) * __CHAR_BIT__) \ + : sizeof(x) <= sizeof(unsigned int) ? \ + __builtin_ctz((unsigned int)x) \ + : sizeof(x) <= sizeof(unsigned long) ? \ + __builtin_ctzl((unsigned long)x) \ + : __builtin_ctzll(x)) #define xenomai_count_leading_zeros(__v) \ ({ \ @@ -111,9 +100,9 @@ void __invalid_operand_size(void); } \ __ret; \ }) - + #ifdef __cplusplus } #endif - + #endif /* _BOILERPLATE_COMPILER_H */ diff --git a/lib/boilerplate/heapmem.c b/lib/boilerplate/heapmem.c index 8728e0d15..e6369c715 100644 --- a/lib/boilerplate/heapmem.c +++ b/lib/boilerplate/heapmem.c @@ -476,7 +476,7 @@ void *heapmem_alloc(struct heap_memory *heap, size_t size) bmask = ext->pagemap[pg].map; if (bmask == -1U) break; - b = __ctz(~bmask); + b = xenomai_count_trailing_zeros(~bmask); /* * Got one block from the heading per-bucket diff --git a/lib/copperplate/heapobj-pshared.c b/lib/copperplate/heapobj-pshared.c index 5310d9092..d6cc51ae9 100644 --- a/lib/copperplate/heapobj-pshared.c +++ b/lib/copperplate/heapobj-pshared.c @@ -529,7 +529,7 @@ static void *sheapmem_alloc(struct shared_heap_memory *heap, size_t size) bmask = ext->pagemap[pg].map; if (bmask == -1U) break; - b = __ctz(~bmask); + b = xenomai_count_trailing_zeros(~bmask); /* * Got one block from the heading per-bucket -- 2.20.1