1a07f7672SMatt Fleming #ifndef _TOOLS_BE_BYTESHIFT_H 2a07f7672SMatt Fleming #define _TOOLS_BE_BYTESHIFT_H 3a07f7672SMatt Fleming 4*b3531062SYaakov Selkowitz #include <stdint.h> 5a07f7672SMatt Fleming 6*b3531062SYaakov Selkowitz static inline uint16_t __get_unaligned_be16(const uint8_t *p) 7a07f7672SMatt Fleming { 8a07f7672SMatt Fleming return p[0] << 8 | p[1]; 9a07f7672SMatt Fleming } 10a07f7672SMatt Fleming 11*b3531062SYaakov Selkowitz static inline uint32_t __get_unaligned_be32(const uint8_t *p) 12a07f7672SMatt Fleming { 13a07f7672SMatt Fleming return p[0] << 24 | p[1] << 16 | p[2] << 8 | p[3]; 14a07f7672SMatt Fleming } 15a07f7672SMatt Fleming 16*b3531062SYaakov Selkowitz static inline uint64_t __get_unaligned_be64(const uint8_t *p) 17a07f7672SMatt Fleming { 18*b3531062SYaakov Selkowitz return (uint64_t)__get_unaligned_be32(p) << 32 | 19a07f7672SMatt Fleming __get_unaligned_be32(p + 4); 20a07f7672SMatt Fleming } 21a07f7672SMatt Fleming 22*b3531062SYaakov Selkowitz static inline void __put_unaligned_be16(uint16_t val, uint8_t *p) 23a07f7672SMatt Fleming { 24a07f7672SMatt Fleming *p++ = val >> 8; 25a07f7672SMatt Fleming *p++ = val; 26a07f7672SMatt Fleming } 27a07f7672SMatt Fleming 28*b3531062SYaakov Selkowitz static inline void __put_unaligned_be32(uint32_t val, uint8_t *p) 29a07f7672SMatt Fleming { 30a07f7672SMatt Fleming __put_unaligned_be16(val >> 16, p); 31a07f7672SMatt Fleming __put_unaligned_be16(val, p + 2); 32a07f7672SMatt Fleming } 33a07f7672SMatt Fleming 34*b3531062SYaakov Selkowitz static inline void __put_unaligned_be64(uint64_t val, uint8_t *p) 35a07f7672SMatt Fleming { 36a07f7672SMatt Fleming __put_unaligned_be32(val >> 32, p); 37a07f7672SMatt Fleming __put_unaligned_be32(val, p + 4); 38a07f7672SMatt Fleming } 39a07f7672SMatt Fleming 40*b3531062SYaakov Selkowitz static inline uint16_t get_unaligned_be16(const void *p) 41a07f7672SMatt Fleming { 42*b3531062SYaakov Selkowitz return __get_unaligned_be16((const uint8_t *)p); 43a07f7672SMatt Fleming } 44a07f7672SMatt Fleming 45*b3531062SYaakov Selkowitz static inline uint32_t get_unaligned_be32(const void *p) 46a07f7672SMatt Fleming { 47*b3531062SYaakov Selkowitz return __get_unaligned_be32((const uint8_t *)p); 48a07f7672SMatt Fleming } 49a07f7672SMatt Fleming 50*b3531062SYaakov Selkowitz static inline uint64_t get_unaligned_be64(const void *p) 51a07f7672SMatt Fleming { 52*b3531062SYaakov Selkowitz return __get_unaligned_be64((const uint8_t *)p); 53a07f7672SMatt Fleming } 54a07f7672SMatt Fleming 55*b3531062SYaakov Selkowitz static inline void put_unaligned_be16(uint16_t val, void *p) 56a07f7672SMatt Fleming { 57a07f7672SMatt Fleming __put_unaligned_be16(val, p); 58a07f7672SMatt Fleming } 59a07f7672SMatt Fleming 60*b3531062SYaakov Selkowitz static inline void put_unaligned_be32(uint32_t val, void *p) 61a07f7672SMatt Fleming { 62a07f7672SMatt Fleming __put_unaligned_be32(val, p); 63a07f7672SMatt Fleming } 64a07f7672SMatt Fleming 65*b3531062SYaakov Selkowitz static inline void put_unaligned_be64(uint64_t val, void *p) 66a07f7672SMatt Fleming { 67a07f7672SMatt Fleming __put_unaligned_be64(val, p); 68a07f7672SMatt Fleming } 69a07f7672SMatt Fleming 70a07f7672SMatt Fleming #endif /* _TOOLS_BE_BYTESHIFT_H */ 71