You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

rotate.h 1.6KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. #ifndef _IPXE_ROTATE_H
  2. #define _IPXE_ROTATE_H
  3. /** @file
  4. *
  5. * Bit operations
  6. */
  7. FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
  8. #include <stdint.h>
  9. static inline __attribute__ (( always_inline )) uint8_t
  10. rol8 ( uint8_t data, unsigned int rotation ) {
  11. return ( ( data << rotation ) | ( data >> ( 8 - rotation ) ) );
  12. }
  13. static inline __attribute__ (( always_inline )) uint8_t
  14. ror8 ( uint8_t data, unsigned int rotation ) {
  15. return ( ( data >> rotation ) | ( data << ( 8 - rotation ) ) );
  16. }
  17. static inline __attribute__ (( always_inline )) uint16_t
  18. rol16 ( uint16_t data, unsigned int rotation ) {
  19. return ( ( data << rotation ) | ( data >> ( 16 - rotation ) ) );
  20. }
  21. static inline __attribute__ (( always_inline )) uint16_t
  22. ror16 ( uint16_t data, unsigned int rotation ) {
  23. return ( ( data >> rotation ) | ( data << ( 16 - rotation ) ) );
  24. }
  25. static inline __attribute__ (( always_inline )) uint32_t
  26. rol32 ( uint32_t data, unsigned int rotation ) {
  27. return ( ( data << rotation ) | ( data >> ( 32 - rotation ) ) );
  28. }
  29. static inline __attribute__ (( always_inline )) uint32_t
  30. ror32 ( uint32_t data, unsigned int rotation ) {
  31. return ( ( data >> rotation ) | ( data << ( 32 - rotation ) ) );
  32. }
  33. static inline __attribute__ (( always_inline )) uint64_t
  34. rol64 ( uint64_t data, unsigned int rotation ) {
  35. return ( ( data << rotation ) | ( data >> ( 64 - rotation ) ) );
  36. }
  37. static inline __attribute__ (( always_inline )) uint64_t
  38. ror64 ( uint64_t data, unsigned int rotation ) {
  39. return ( ( data >> rotation ) | ( data << ( 64 - rotation ) ) );
  40. }
  41. #endif /* _IPXE_ROTATE_H */