Mercurial > mplayer.hg
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 */ |