From 7d0daddfcc5be73214771c8ad51df51452b603c1 Mon Sep 17 00:00:00 2001 From: ehofman Date: Wed, 21 Sep 2005 09:17:32 +0000 Subject: [PATCH] Update for 32-bit systems. --- src/MultiPlayer/swap_test.cpp | 4 ++-- src/MultiPlayer/tiny_xdr.hpp | 15 +++++++++++++-- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/MultiPlayer/swap_test.cpp b/src/MultiPlayer/swap_test.cpp index 5f91521c2..5df58f875 100644 --- a/src/MultiPlayer/swap_test.cpp +++ b/src/MultiPlayer/swap_test.cpp @@ -5,8 +5,8 @@ int main() { - uint32_t ui32 = 0xFFAACCEE; - uint64_t ui64 = 0x00BBAADDFFAACCEELL; + uint32_t ui32 = 0x01234567; + uint64_t ui64 = 0x0123456789ABCDEFLL; printf("UI32: (normal) %x\nUI32: (swapped) %x\n\n", ui32, bswap_32(ui32) ); printf("UI64: (normal) %llx\nUI64: (swapped) %llx\n\n", ui64, bswap_64(ui64) ); diff --git a/src/MultiPlayer/tiny_xdr.hpp b/src/MultiPlayer/tiny_xdr.hpp index 62e8d9a6e..5d4d97de4 100644 --- a/src/MultiPlayer/tiny_xdr.hpp +++ b/src/MultiPlayer/tiny_xdr.hpp @@ -57,11 +57,22 @@ inline uint32_t bswap_32(unsigned int b) { } inline uint64_t bswap_64(unsigned long long b) { +#if __WORDSIZE == 64 uint64_t x = b; - x = ((x >> 32) & 0x00000000FFFFFFFFLL) | ((x << 32) & 0xFFFFFFFF00000000LL); - x = ((x >> 16) & 0x0000FFFF0000FFFFLL) | ((x << 16) & 0xFFFF0000FFFF0000LL); x = ((x >> 8) & 0x00FF00FF00FF00FFLL) | ((x << 8) & 0xFF00FF00FF00FF00LL); + x = ((x >> 16) & 0x0000FFFF0000FFFFLL) | ((x << 16) & 0xFFFF0000FFFF0000LL); + x = (x >> 32) | (x << 32); return x; +#else + union { + uint64_t ll; + uint32_t l[2]; + } w, r; + w.ll = b; + r.l[0] = bswap_32 (w.l[1]); + r.l[1] = bswap_32 (w.l[0]); + return r.ll; +#endif } #if BYTE_ORDER == BIG_ENDIAN -- 2.39.5