/* we need the one from the host */ #include #include /* Byte-orders. */ #define swap16(x) \ ({ \ uint16_t _x = (x); \ (uint16_t) ((_x << 8) | (_x >> 8)); \ }) #define swap32(x) \ ({ \ uint32_t _x = (x); \ (uint32_t) ((_x << 24) \ | ((_x & (uint32_t) 0xFF00UL) << 8) \ | ((_x & (uint32_t) 0xFF0000UL) >> 8) \ | (_x >> 24)); \ }) #define swap64(x) \ ({ \ uint64_t _x = (x); \ (uint64_t) ((_x << 56) \ | ((_x & (uint64_t) 0xFF00ULL) << 40) \ | ((_x & (uint64_t) 0xFF0000ULL) << 24) \ | ((_x & (uint64_t) 0xFF000000ULL) << 8) \ | ((_x & (uint64_t) 0xFF00000000ULL) >> 8) \ | ((_x & (uint64_t) 0xFF0000000000ULL) >> 24) \ | ((_x & (uint64_t) 0xFF000000000000ULL) >> 40) \ | (_x >> 56)); \ }) #if __BYTE_ORDER == __BIG_ENDIAN /* Our target is a ia32 machine, always little endian */ # define host2target_16(x) swap16(x) # define host2target_32(x) swap32(x) # define host2target_64(x) swap64(x) # define target2host_16(x) swap16(x) # define target2host_32(x) swap32(x) # define target2host_64(x) swap64(x) #else # define host2target_16(x) (x) # define host2target_32(x) (x) # define host2target_64(x) (x) # define target2host_16(x) (x) # define target2host_32(x) (x) # define target2host_64(x) (x) #endif