From 53efad05c6b49fe2b7fd912dfd1677f1b9476516 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Tue, 5 Dec 2017 13:15:15 +0100 Subject: [PATCH] Cleanups --- libretro-common/include/retro_miscellaneous.h | 69 +++++++++---------- menu/menu_event.c | 2 +- retroarch.c | 6 +- 3 files changed, 37 insertions(+), 40 deletions(-) diff --git a/libretro-common/include/retro_miscellaneous.h b/libretro-common/include/retro_miscellaneous.h index 60da013743..b51cc15e60 100644 --- a/libretro-common/include/retro_miscellaneous.h +++ b/libretro-common/include/retro_miscellaneous.h @@ -25,6 +25,7 @@ #include #include +#include #if defined(_WIN32) && !defined(_XBOX) #ifndef WIN32_LEAN_AND_MEAN @@ -41,6 +42,24 @@ #include #endif +static INLINE void bits_clear_bits(uint32_t *a, uint32_t *b, uint32_t count) +{ + uint32_t i; + for (i = 0; i < count;i++) + a[i] &= b[i]; +} + +static INLINE bool bits_any_set(uint32_t* ptr, uint32_t count) +{ + uint32_t i; + for (i = 0; i < count; i++) + { + if (ptr[i] != 0) + return true; + } + return false; +} + #ifndef PATH_MAX_LENGTH #if defined(_XBOX1) || defined(_3DS) || defined(PSP) || defined(GEKKO)|| defined(WIIU) #define PATH_MAX_LENGTH 512 @@ -57,47 +76,11 @@ #define MIN(a, b) ((a) < (b) ? (a) : (b)) #endif -#define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0])) +#define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0])) #define BITS_GET_ELEM(a, i) ((a).data[i]) #define BITS_GET_ELEM_PTR(a, i) ((a)->data[i]) -static inline bool bits_any_set(uint32_t* ptr, uint32_t count) -{ - uint32_t i; - for (i=0;i> 3] |= (1 << ((bit) & 7))) #define BIT_CLEAR(a, bit) ((a)[(bit) >> 3] &= ~(1 << ((bit) & 7))) #define BIT_GET(a, bit) (((a).data[(bit) >> 3] >> ((bit) & 7)) & 1) @@ -137,6 +120,18 @@ static inline void bits_clear_bits(uint32_t* a, uint32_t* b, uint32_t count) #define BIT256_GET_PTR(a, bit) BIT256_GET(*a, bit) #define BIT256_CLEAR_ALL_PTR(a) BIT256_CLEAR_ALL(*a) +#define BITS_COPY16_PTR(a,bits) \ +{ \ + BIT128_CLEAR_ALL_PTR(a); \ + BITS_GET_ELEM_PTR(a, 0) = (bits) & 0xffff; \ +} + +#define BITS_COPY32_PTR(a,bits) \ +{ \ + BIT128_CLEAR_ALL_PTR(a); \ + BITS_GET_ELEM_PTR(a, 0) = (bits); \ +} + /* Helper macros and struct to keep track of many booleans. */ /* This struct has 256 bits. */ typedef struct diff --git a/menu/menu_event.c b/menu/menu_event.c index 87449d3ff6..9c2c8eaecc 100644 --- a/menu/menu_event.c +++ b/menu/menu_event.c @@ -165,7 +165,7 @@ unsigned menu_event(retro_bits_t* p_input, retro_bits_t* p_trigger_input) ok_old = ok_current; - if (BITS_ANY_SET_PTR(p_input)) + if (bits_any_set(p_input->data, ARRAY_SIZE(p_input->data))) { if (!first_held) { diff --git a/retroarch.c b/retroarch.c index 0de71056dc..2545b79424 100644 --- a/retroarch.c +++ b/retroarch.c @@ -2397,7 +2397,7 @@ static enum runloop_state runloop_check_state( if (input_driver_flushing_input) { input_driver_flushing_input = false; - if (BITS_ANY_SET(current_input)) + if (bits_any_set(current_input.data, ARRAY_SIZE(current_input.data))) { BIT256_CLEAR_ALL(current_input); if (runloop_paused) @@ -2540,7 +2540,9 @@ static enum runloop_state runloop_check_state( enum menu_action action; bool focused = false; retro_bits_t trigger_input = current_input; - BITS_CLEAR_BITS(trigger_input, old_input); + + bits_clear_bits(trigger_input.data, old_input.data, + ARRAY_SIZE(trigger_input.data)); action = (enum menu_action)menu_event(¤t_input, &trigger_input); focused = pause_nonactive ? is_focused : true;