1 /********************************************************************\ 2 Copyright (c) 2017 by Aleksey Cheusov 3 4 See LICENSE file in the distribution. 5 \********************************************************************/ 6 7 #ifndef _MKC_BSWAP_H_ 8 #define _MKC_BSWAP_H_ 9 10 #ifndef _MKC_CHECK_BSWAP 11 # error "Missing MKC_FEATURES += bswap" 12 #endif 13 14 #if HAVE_FUNC1_BSWAP_16_BYTESWAP_H && \ 15 HAVE_FUNC1_BSWAP_32_BYTESWAP_H && \ 16 HAVE_FUNC1_BSWAP_64_BYTESWAP_H 17 #include <byteswap.h> 18 #define bswap16(v) bswap_16(v) 19 #define bswap32(v) bswap_32(v) 20 #define bswap64(v) bswap_64(v) 21 #elif HAVE_FUNC1_BSWAP16_SYS_ENDIAN_H && \ 22 HAVE_FUNC1_BSWAP32_SYS_ENDIAN_H && \ 23 HAVE_FUNC1_BSWAP64_SYS_ENDIAN_H 24 #include <sys/endian.h> 25 #else 26 27 #include <stdint.h> 28 29 #define bswap16(x) \ 30 (uint16_t)( \ 31 (((x) & 0xff00) >> 8) | \ 32 (((x) & 0x00ff) << 8)) 33 34 #define bswap32(x) \ 35 (uint32_t)( \ 36 (((x) & 0xff000000) >> 24) | \ 37 (((x) & 0x00ff0000) >> 8) | \ 38 (((x) & 0x0000ff00) << 8) | \ 39 (((x) & 0x000000ff) << 24)) 40 41 #define bswap64(x) \ 42 (uint64_t)( \ 43 (((x) & 0xff00000000000000ull) >> 56) | \ 44 (((x) & 0x00ff000000000000ull) >> 40) | \ 45 (((x) & 0x0000ff0000000000ull) >> 24) | \ 46 (((x) & 0x000000ff00000000ull) >> 8) | \ 47 (((x) & 0x00000000ff000000ull) << 8) | \ 48 (((x) & 0x0000000000ff0000ull) << 24) | \ 49 (((x) & 0x000000000000ff00ull) << 40) | \ 50 (((x) & 0x00000000000000ffull) << 56)) 51 52 #endif /**/ 53 54 #endif /* _MKC_BSWAP_H_ */ 55