diff --git a/libretro-common/include/retro_miscellaneous.h b/libretro-common/include/retro_miscellaneous.h index c2e11b021f..c26899eb9f 100644 --- a/libretro-common/include/retro_miscellaneous.h +++ b/libretro-common/include/retro_miscellaneous.h @@ -60,31 +60,29 @@ #define BIT_SET(a, bit) ((a)[(bit) >> 3] |= (1 << ((bit) & 7))) #define BIT_CLEAR(a, bit) ((a)[(bit) >> 3] &= ~(1 << ((bit) & 7))) -#define BIT_GET(a, bit) ((a)[(bit) >> 3] & (1 << ((bit) & 7))) +#define BIT_GET(a, bit) (((a).data[(bit) >> 3] >> ((bit) & 7)) & 1) #define BIT16_SET(a, bit) ((a) |= (1 << ((bit) & 15))) #define BIT16_CLEAR(a, bit) ((a) &= ~(1 << ((bit) & 15))) -#define BIT16_GET(a, bit) (!!((a) & (1 << ((bit) & 15)))) +#define BIT16_GET(a, bit) (((a) >> ((bit) & 15)) & 1) #define BIT16_CLEAR_ALL(a) ((a) = 0) #define BIT32_SET(a, bit) ((a) |= (1 << ((bit) & 31))) #define BIT32_CLEAR(a, bit) ((a) &= ~(1 << ((bit) & 31))) -#define BIT32_GET(a, bit) (!!((a) & (1 << ((bit) & 31)))) +#define BIT32_GET(a, bit) (((a) >> ((bit) & 31)) & 1) #define BIT32_CLEAR_ALL(a) ((a) = 0) #define BIT64_SET(a, bit) ((a) |= (UINT64_C(1) << ((bit) & 63))) #define BIT64_CLEAR(a, bit) ((a) &= ~(UINT64_C(1) << ((bit) & 63))) -#define BIT64_GET(a, bit) (!!((a) & (UINT64_C(1) << ((bit) & 63)))) +#define BIT64_GET(a, bit) (((a) >> ((bit) & 63)) & 1) #define BIT64_CLEAR_ALL(a) ((a) = 0) #define BIT128_SET(a, bit) ((a).data[(bit) >> 5] |= (1 << ((bit) & 31))) #define BIT128_CLEAR(a, bit) ((a).data[(bit) >> 5] &= ~(1 << ((bit) & 31))) -#define BIT128_GET(a, bit) ((a).data[(bit) >> 5] & (1 << ((bit) & 31))) +#define BIT128_GET(a, bit) (((a).data[(bit) >> 5] >> ((bit) & 31)) & 1) #define BIT128_CLEAR_ALL(a) memset(&(a), 0, sizeof(a)) -/* Helper macros and struct to keep track of many booleans. - * To check for multiple bits, use &&, not &. - * For OR, | can be used. */ +/* Helper macros and struct to keep track of many booleans. */ typedef struct { uint32_t data[8];