Index: src/OFMacros.h ================================================================== --- src/OFMacros.h +++ src/OFMacros.h @@ -12,10 +12,11 @@ #ifndef OF_CONFIGURED #error You are missing the ObjFW definitions! #error Please use objfw-config! #endif +#include #include #ifdef __GNUC__ #define OF_INLINE inline __attribute__((always_inline)) #define OF_LIKELY(cond) __builtin_expect(!!(cond), 1) @@ -42,10 +43,12 @@ #define OF_AMD64_ASM #elif defined(__i386__) #define OF_X86_ASM #elif defined(__ppc__) || defined(__PPC__) #define OF_PPC_ASM +#elif defined(__arm__) || defined(__ARM__) +#define OF_ARM_ASM #endif #endif #define OF_BSWAP16_CONST(i) \ (((uint16_t)i & UINT16_C(0xFF00)) >> 8 | \ @@ -70,10 +73,12 @@ { #if defined(OF_X86_ASM) || defined(OF_AMD64_ASM) asm("xchgb %h0, %b0" : "=Q"(i) : "Q"(i)); #elif defined(OF_PPC_ASM) asm("lhbrx %0, 0, %1" : "=r"(i) : "r"(&i), "m"(i)); +#elif defined(OF_ARM_ASM) + asm("rev16 %0, %0" : "=r"(i) : "0"(i)); #else i = (i & UINT16_C(0xFF00)) >> 8 | (i & UINT16_C(0x00FF)) << 8; #endif return i; @@ -84,10 +89,12 @@ { #if defined(OF_X86_ASM) || defined(OF_AMD64_ASM) asm("bswap %0" : "=q"(i) : "q"(i)); #elif defined(OF_PPC_ASM) asm("lwbrx %0, 0, %1" : "=r"(i) : "r"(&i), "m"(i)); +#elif defined(OF_ARM_ASM) + asm("rev %0, %0" : "=r"(i) : "0"(i)); #else i = (i & UINT32_C(0xFF000000)) >> 24 | (i & UINT32_C(0x00FF0000)) >> 8 | (i & UINT32_C(0x0000FF00)) << 8 | (i & UINT32_C(0x000000FF)) << 24;