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