include/share/endswap.h : Improvements to fallthrough ENDSWAP_*.
authorErik de Castro Lopo <erikd@mega-nerd.com>
Sat, 9 Aug 2014 02:47:20 +0000 (12:47 +1000)
committerErik de Castro Lopo <erikd@mega-nerd.com>
Sat, 9 Aug 2014 02:49:38 +0000 (12:49 +1000)
According to patch author GCC can optimize expressions like
"(a<<8)|(a>>8)", but has problems with "(a<<8)+(a>>8)".

Patch-from: lvqcl <lvqcl.mail@gmail.com>

include/share/endswap.h

index c313333..86bf857 100644 (file)
@@ -58,8 +58,8 @@ static inline unsigned short __builtin_bswap16(unsigned short a)
 
 #else
 
-#define        ENDSWAP_16(x)           ((((x) >> 8) & 0xFF) + (((x) & 0xFF) << 8))
-#define        ENDSWAP_32(x)           ((((x) >> 24) & 0xFF) + (((x) >> 8) & 0xFF00) + (((x) & 0xFF00) << 8) + (((x) & 0xFF) << 24))
+#define        ENDSWAP_16(x)           ((((x) >> 8) & 0xFF) | (((x) & 0xFF) << 8))
+#define        ENDSWAP_32(x)           ((((x) >> 24) & 0xFF) | (((x) >> 8) & 0xFF00) | (((x) & 0xFF00) << 8) | (((x) & 0xFF) << 24))
 
 #endif