rcx

library of miscellaneous bits of C code
git clone git://git.rr3.xyz/rcx
Log | Files | Refs | README | LICENSE

commit 7c1574660a1ee13e59769e86ef6aec4c18d754d5
parent faa22537775db1efe4cd1a0321e5ef3b67f779e4
Author: Robert Russell <robertrussell.72001@gmail.com>
Date:   Sun, 28 May 2023 20:36:37 -0700

Add bit rotates

Diffstat:
Minc/bits.h | 10++++++++++
1 file changed, 10 insertions(+), 0 deletions(-)

diff --git a/inc/bits.h b/inc/bits.h @@ -4,6 +4,16 @@ #include "def.h" +static inline u8 r_rotl8 (u8 n, uint c) { return (n << (c& 7u)) | (n >> (-c& 7u)); } +static inline u16 r_rotl16(u16 n, uint c) { return (n << (c&15u)) | (n >> (-c&15u)); } +static inline u32 r_rotl32(u32 n, uint c) { return (n << (c&31u)) | (n >> (-c&31u)); } +static inline u64 r_rotl64(u64 n, uint c) { return (n << (c&63u)) | (n >> (-c&63u)); } + +static inline u8 r_rotr8 (u8 n, uint c) { return (n >> (c& 7u)) | (n << (-c& 7u)); } +static inline u16 r_rotr16(u16 n, uint c) { return (n >> (c&15u)) | (n << (-c&15u)); } +static inline u32 r_rotr32(u32 n, uint c) { return (n >> (c&31u)) | (n << (-c&31u)); } +static inline u64 r_rotr64(u64 n, uint c) { return (n >> (c&63u)) | (n << (-c&63u)); } + /* The GCC builtin's do not use hardware popcnt unless an appropriate -march * is specified, in which case __POPCNT__ is defined. Otherwise, GCC emits * calls to libgcc which are slower than the below custom implementions. */