summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/common/swap.h10
1 files changed, 7 insertions, 3 deletions
diff --git a/src/common/swap.h b/src/common/swap.h
index 086449028..71932c2bb 100644
--- a/src/common/swap.h
+++ b/src/common/swap.h
@@ -83,15 +83,19 @@ namespace Common {
83 return __builtin_bswap64(data); 83 return __builtin_bswap64(data);
84} 84}
85#else 85#else
86// Slow generic implementation. 86// Generic implementation.
87[[nodiscard]] inline u16 swap16(u16 data) noexcept { 87[[nodiscard]] inline u16 swap16(u16 data) noexcept {
88 return (data >> 8) | (data << 8); 88 return (data >> 8) | (data << 8);
89} 89}
90[[nodiscard]] inline u32 swap32(u32 data) noexcept { 90[[nodiscard]] inline u32 swap32(u32 data) noexcept {
91 return (swap16(data) << 16) | swap16(data >> 16); 91 return ((data & 0xFF000000U) >> 24) | ((data & 0x00FF0000U) >> 8) |
92 ((data & 0x0000FF00U) << 8) | ((data & 0x000000FFU) << 24);
92} 93}
93[[nodiscard]] inline u64 swap64(u64 data) noexcept { 94[[nodiscard]] inline u64 swap64(u64 data) noexcept {
94 return ((u64)swap32(data) << 32) | swap32(data >> 32); 95 return ((data & 0xFF00000000000000ULL) >> 56) | ((data & 0x00FF000000000000ULL) >> 40) |
96 ((data & 0x0000FF0000000000ULL) >> 24) | ((data & 0x000000FF00000000ULL) >> 8) |
97 ((data & 0x00000000FF000000ULL) << 8) | ((data & 0x0000000000FF0000ULL) << 24) |
98 ((data & 0x000000000000FF00ULL) << 40) | ((data & 0x00000000000000FFULL) << 56);
95} 99}
96#endif 100#endif
97 101