diff options
Diffstat (limited to 'include/qemu')
-rw-r--r-- | include/qemu/bitops.h | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/include/qemu/bitops.h b/include/qemu/bitops.h index a72f69f..03213ce 100644 --- a/include/qemu/bitops.h +++ b/include/qemu/bitops.h @@ -292,6 +292,35 @@ static inline uint64_t ror64(uint64_t word, unsigned int shift) } /** + * hswap32 - swap 16-bit halfwords within a 32-bit value + * @h: value to swap + */ +static inline uint32_t hswap32(uint32_t h) +{ + return rol32(h, 16); +} + +/** + * hswap64 - swap 16-bit halfwords within a 64-bit value + * @h: value to swap + */ +static inline uint64_t hswap64(uint64_t h) +{ + uint64_t m = 0x0000ffff0000ffffull; + h = rol64(h, 32); + return ((h & m) << 16) | ((h >> 16) & m); +} + +/** + * wswap64 - swap 32-bit words within a 64-bit value + * @h: value to swap + */ +static inline uint64_t wswap64(uint64_t h) +{ + return rol64(h, 32); +} + +/** * extract32: * @value: the value to extract the bit field from * @start: the lowest bit in the bit field (numbered from 0) |