Commit 67fc58a5 authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont

bswap64: hack for C++ brain damage

Contrary to C, C++ compilers don't promote larger constants up to
unsigned long long when needed.
parent ccf93423
...@@ -657,7 +657,7 @@ static inline uint64_t bswap64 (uint64_t x) ...@@ -657,7 +657,7 @@ static inline uint64_t bswap64 (uint64_t x)
{ {
#if VLC_GCC_VERSION(4,3) #if VLC_GCC_VERSION(4,3)
return __builtin_bswap64 (x); return __builtin_bswap64 (x);
#else #elif !defined (__cplusplus)
return ((x & 0x00000000000000FF) << 56) return ((x & 0x00000000000000FF) << 56)
| ((x & 0x000000000000FF00) << 40) | ((x & 0x000000000000FF00) << 40)
| ((x & 0x0000000000FF0000) << 24) | ((x & 0x0000000000FF0000) << 24)
...@@ -666,6 +666,15 @@ static inline uint64_t bswap64 (uint64_t x) ...@@ -666,6 +666,15 @@ static inline uint64_t bswap64 (uint64_t x)
| ((x & 0x0000FF0000000000) >> 24) | ((x & 0x0000FF0000000000) >> 24)
| ((x & 0x00FF000000000000) >> 40) | ((x & 0x00FF000000000000) >> 40)
| ((x & 0xFF00000000000000) >> 56); | ((x & 0xFF00000000000000) >> 56);
#else
return ((x & 0x00000000000000FFLLU) << 56)
| ((x & 0x000000000000FF00LLU) << 40)
| ((x & 0x0000000000FF0000LLU) << 24)
| ((x & 0x00000000FF000000LLU) << 8)
| ((x & 0x000000FF00000000LLU) >> 8)
| ((x & 0x0000FF0000000000LLU) >> 24)
| ((x & 0x00FF000000000000LLU) >> 40)
| ((x & 0xFF00000000000000LLU) >> 56);
#endif #endif
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment