rotate-bits.h 1017 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. #ifndef __ROTATE_DEFS_H
  2. #define __ROTATE_DEFS_H
  3. #ifdef _MSC_VER
  4. #include <stdlib.h>
  5. #define ROTL32(v, n) _rotl((v), (n))
  6. #define ROTL64(v, n) _rotl64((v), (n))
  7. #define ROTR32(v, n) _rotr((v), (n))
  8. #define ROTR64(v, n) _rotr64((v), (n))
  9. #else
  10. #include <stdint.h>
  11. #define U8V(v) ((uint8_t)(v) & 0xFFU)
  12. #define U16V(v) ((uint16_t)(v) & 0xFFFFU)
  13. #define U32V(v) ((uint32_t)(v) & 0xFFFFFFFFU)
  14. #define U64V(v) ((uint64_t)(v) & 0xFFFFFFFFFFFFFFFFU)
  15. #define ROTL32(v, n) \
  16. (U32V((uint32_t)(v) << (n)) | ((uint32_t)(v) >> (32 - (n))))
  17. // tests fail if we don't have this cast...
  18. #define ROTL64(v, n) \
  19. (U64V((uint64_t)(v) << (n)) | ((uint64_t)(v) >> (64 - (n))))
  20. #define ROTR32(v, n) ROTL32(v, 32 - (n))
  21. #define ROTR64(v, n) ROTL64(v, 64 - (n))
  22. #endif
  23. #define ROTL8(v, n) \
  24. (U8V((uint8_t)(v) << (n)) | ((uint8_t)(v) >> (8 - (n))))
  25. #define ROTL16(v, n) \
  26. (U16V((uint16_t)(v) << (n)) | ((uint16_t)(v) >> (16 - (n))))
  27. #define ROTR8(v, n) ROTL8(v, 8 - (n))
  28. #define ROTR16(v, n) ROTL16(v, 16 - (n))
  29. #endif