]> git.mxchange.org Git - flightgear.git/commitdiff
Update for 32-bit systems.
authorehofman <ehofman>
Wed, 21 Sep 2005 09:17:32 +0000 (09:17 +0000)
committerehofman <ehofman>
Wed, 21 Sep 2005 09:17:32 +0000 (09:17 +0000)
src/MultiPlayer/swap_test.cpp
src/MultiPlayer/tiny_xdr.hpp

index 5f91521c23ee77e3d36ea33e3496c434daacbe24..5df58f875d355f7391b88488b052c9d3a2fcbac4 100644 (file)
@@ -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) );
index 62e8d9a6e7fd9ad13ddc13834cdfd9c14ddf0fc6..5d4d97de43ffc9e696a22f048f7ba7f90634497c 100644 (file)
@@ -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