comparison bswap.h @ 6922:adaa83002b22

Bswap fixes for 64bit cpus, thx to Falk Hueffner for the hint.
author atmos4
date Mon, 05 Aug 2002 13:04:54 +0000
parents 3a347b949c5d
children 1911eb291dfb
comparison
equal deleted inserted replaced
6921:762c98c47f01 6922:adaa83002b22
38 #define bswap_32(x) ByteSwap32(x) 38 #define bswap_32(x) ByteSwap32(x)
39 39
40 inline static unsigned long long int ByteSwap64(unsigned long long int x) 40 inline static unsigned long long int ByteSwap64(unsigned long long int x)
41 { 41 {
42 register union { __extension__ unsigned long long int __ll; 42 register union { __extension__ unsigned long long int __ll;
43 unsigned long int __l[2]; } __x; 43 unsigned int __l[2]; } __x;
44 asm("xchgl %0,%1": 44 asm("xchgl %0,%1":
45 "=r"(__x.__l[0]),"=r"(__x.__l[1]): 45 "=r"(__x.__l[0]),"=r"(__x.__l[1]):
46 "0"(bswap_32((unsigned long)x)),"1"(bswap_32((unsigned long)(x>>32)))); 46 "0"(bswap_32((unsigned long)x)),"1"(bswap_32((unsigned long)(x>>32))));
47 return __x.__ll; 47 return __x.__ll;
48 } 48 }
59 (((x) & 0x0000ff00) << 8) | (((x) & 0x000000ff) << 24)) 59 (((x) & 0x0000ff00) << 8) | (((x) & 0x000000ff) << 24))
60 60
61 #define bswap_64(x) \ 61 #define bswap_64(x) \
62 (__extension__ \ 62 (__extension__ \
63 ({ union { __extension__ unsigned long long int __ll; \ 63 ({ union { __extension__ unsigned long long int __ll; \
64 unsigned long int __l[2]; } __w, __r; \ 64 unsigned int __l[2]; } __w, __r; \
65 __w.__ll = (x); \ 65 __w.__ll = (x); \
66 __r.__l[0] = bswap_32 (__w.__l[1]); \ 66 __r.__l[0] = bswap_32 (__w.__l[1]); \
67 __r.__l[1] = bswap_32 (__w.__l[0]); \ 67 __r.__l[1] = bswap_32 (__w.__l[0]); \
68 __r.__ll; })) 68 __r.__ll; }))
69 #endif /* !ARCH_X86 */ 69 #endif /* !ARCH_X86 */