vlc | branch: master | Rémi Denis-Courmont <[email protected]> | Sun Feb 11 13:05:39 2018 +0200| [d0d9c185fa1f2eaefb8a22c41ac981695d201ad8] | committer: Rémi Denis-Courmont
Make C parity() handle all unsigned types > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=d0d9c185fa1f2eaefb8a22c41ac981695d201ad8 --- include/vlc_common.h | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/include/vlc_common.h b/include/vlc_common.h index c7d143bf2d..1b03307e91 100644 --- a/include/vlc_common.h +++ b/include/vlc_common.h @@ -483,6 +483,14 @@ static inline uint8_t clip_uint8_vlc( int32_t a ) unsigned long long: __builtin_popcountll(x), \ signed long long: __builtin_popcountll(x)) +# define parity(x) \ + _Generic((x), \ + unsigned char: __builtin_parity(x), \ + unsigned short: __builtin_parity(x), \ + unsigned: __builtin_parity(x), \ + unsigned long: __builtin_parityl(x), \ + unsigned long long: __builtin_parityll(x)) + # else VLC_USED static inline int ctz(unsigned x) { @@ -614,8 +622,6 @@ VLC_USED static inline int popcount(unsigned long long x) signed long long: popcount(x)) #endif -#endif /* __GNUC__ */ - /** * Parity * @@ -623,18 +629,15 @@ VLC_USED static inline int popcount(unsigned long long x) * \retval 0 if x has an even number of set bits. * \retval 1 if x has an odd number of set bits. */ -VLC_USED -static inline unsigned (parity)(unsigned x) +VLC_USED static inline int parity(unsigned long long x) { -#ifdef __GNUC__ - return __builtin_parity (x); -#else for (unsigned i = 4 * sizeof (x); i > 0; i /= 2) x ^= x >> i; return x & 1; -#endif } +#endif /* __GNUC__ */ + /** Byte swap (16 bits) */ VLC_USED static inline uint16_t (bswap16)(uint16_t x) _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
