Index: src/OFMacros.h ================================================================== --- src/OFMacros.h +++ src/OFMacros.h @@ -45,10 +45,28 @@ #elif defined(__ppc__) || defined(__PPC__) #define OF_PPC_ASM #endif #endif +#define OF_BSWAP16_CONST(i) \ + (((uint16_t)i & UINT16_C(0xFF00)) >> 8 | \ + ((uint16_t)i & UINT16_C(0x00FF)) << 8) +#define OF_BSWAP32_CONST(i) \ + (((uint32_t)i & UINT32_C(0xFF000000)) >> 24 | \ + ((uint32_t)i & UINT32_C(0x00FF0000)) >> 8 | \ + ((uint32_t)i & UINT32_C(0x0000FF00)) << 8 | \ + ((uint32_t)i & UINT32_C(0x000000FF)) << 24) +#define OF_BSWAP64_CONST(i) \ + (((uint64_t)i & UINT64_C(0xFF00000000000000)) >> 56 | \ + ((uint64_t)i & UINT64_C(0x00FF000000000000)) >> 40 | \ + ((uint64_t)i & UINT64_C(0x0000FF0000000000)) >> 24 | \ + ((uint64_t)i & UINT64_C(0x000000FF00000000)) >> 8 | \ + ((uint64_t)i & UINT64_C(0x00000000FF000000)) << 8 | \ + ((uint64_t)i & UINT64_C(0x0000000000FF0000)) << 24 | \ + ((uint64_t)i & UINT64_C(0x000000000000FF00)) << 40 | \ + ((uint64_t)i & UINT64_C(0x00000000000000FF)) << 56) + static OF_INLINE uint16_t OF_BSWAP16(uint16_t i) { #if defined(OF_X86_ASM) || defined(OF_AMD64_ASM) asm("xchgb %h0, %b0" : "=Q"(i) : "Q"(i)); @@ -100,18 +118,30 @@ buf++; } } #ifdef OF_BIG_ENDIAN +#define OF_BSWAP16_CONST_IF_BE(i) OF_BSWAP16_CONST(i) +#define OF_BSWAP32_CONST_IF_BE(i) OF_BSWAP32_CONST(i) +#define OF_BSWAP64_CONST_IF_BE(i) OF_BSWAP64_CONST(i) +#define OF_BSWAP16_CONST_IF_LE(i) i +#define OF_BSWAP32_CONST_IF_LE(i) i +#define OF_BSWAP64_CONST_IF_LE(i) i #define OF_BSWAP16_IF_BE(i) OF_BSWAP16(i) #define OF_BSWAP32_IF_BE(i) OF_BSWAP32(i) #define OF_BSWAP64_IF_BE(i) OF_BSWAP64(i) #define OF_BSWAP16_IF_LE(i) i #define OF_BSWAP32_IF_LE(i) i #define OF_BSWAP64_IF_LE(i) i #define OF_BSWAP32_V_IF_BE(buf, len) OF_BSWAP32_V(buf, len) #else +#define OF_BSWAP16_CONST_IF_BE(i) i +#define OF_BSWAP32_CONST_IF_BE(i) i +#define OF_BSWAP64_CONST_IF_BE(i) i +#define OF_BSWAP16_CONST_IF_LE(i) OF_BSWAP16_CONST(i) +#define OF_BSWAP32_CONST_IF_LE(i) OF_BSWAP32_CONST(i) +#define OF_BSWAP64_CONST_IF_LE(i) OF_BSWAP64_CONST(i) #define OF_BSWAP16_IF_BE(i) i #define OF_BSWAP32_IF_BE(i) i #define OF_BSWAP64_IF_BE(i) i #define OF_BSWAP16_IF_LE(i) OF_BSWAP16(i) #define OF_BSWAP32_IF_LE(i) OF_BSWAP32(i)