le_byteshift.h 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. #ifndef _TOOLS_LE_BYTESHIFT_H
  3. #define _TOOLS_LE_BYTESHIFT_H
  4. #include <stdint.h>
  5. static inline uint16_t __get_unaligned_le16(const uint8_t *p)
  6. {
  7. return p[0] | p[1] << 8;
  8. }
  9. static inline uint32_t __get_unaligned_le32(const uint8_t *p)
  10. {
  11. return p[0] | p[1] << 8 | p[2] << 16 | p[3] << 24;
  12. }
  13. static inline uint64_t __get_unaligned_le64(const uint8_t *p)
  14. {
  15. return (uint64_t)__get_unaligned_le32(p + 4) << 32 |
  16. __get_unaligned_le32(p);
  17. }
  18. static inline void __put_unaligned_le16(uint16_t val, uint8_t *p)
  19. {
  20. *p++ = val;
  21. *p++ = val >> 8;
  22. }
  23. static inline void __put_unaligned_le32(uint32_t val, uint8_t *p)
  24. {
  25. __put_unaligned_le16(val >> 16, p + 2);
  26. __put_unaligned_le16(val, p);
  27. }
  28. static inline void __put_unaligned_le64(uint64_t val, uint8_t *p)
  29. {
  30. __put_unaligned_le32(val >> 32, p + 4);
  31. __put_unaligned_le32(val, p);
  32. }
  33. static inline uint16_t get_unaligned_le16(const void *p)
  34. {
  35. return __get_unaligned_le16((const uint8_t *)p);
  36. }
  37. static inline uint32_t get_unaligned_le32(const void *p)
  38. {
  39. return __get_unaligned_le32((const uint8_t *)p);
  40. }
  41. static inline uint64_t get_unaligned_le64(const void *p)
  42. {
  43. return __get_unaligned_le64((const uint8_t *)p);
  44. }
  45. static inline void put_unaligned_le16(uint16_t val, void *p)
  46. {
  47. __put_unaligned_le16(val, p);
  48. }
  49. static inline void put_unaligned_le32(uint32_t val, void *p)
  50. {
  51. __put_unaligned_le32(val, p);
  52. }
  53. static inline void put_unaligned_le64(uint64_t val, void *p)
  54. {
  55. __put_unaligned_le64(val, p);
  56. }
  57. #endif /* _TOOLS_LE_BYTESHIFT_H */