1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
|
#include <stdio.h>
typedef unsigned int UInt;
typedef unsigned long long ULong;
#if defined(__x86_64__)
#define BSWAPQ(_lval) \
do { \
__asm__ __volatile__("bswapq %0" \
: /*out*/ "+r"(_lval) ); \
} while (0)
ULong bswapq ( ULong x )
{
BSWAPQ(x); BSWAPQ(x);
BSWAPQ(x); BSWAPQ(x);
BSWAPQ(x); BSWAPQ(x);
BSWAPQ(x); BSWAPQ(x);
BSWAPQ(x); BSWAPQ(x);
BSWAPQ(x); BSWAPQ(x);
BSWAPQ(x); BSWAPQ(x);
BSWAPQ(x); BSWAPQ(x);
BSWAPQ(x); BSWAPQ(x);
BSWAPQ(x); BSWAPQ(x);
BSWAPQ(x); BSWAPQ(x);
BSWAPQ(x); BSWAPQ(x);
BSWAPQ(x); BSWAPQ(x);
BSWAPQ(x); BSWAPQ(x);
BSWAPQ(x); BSWAPQ(x);
BSWAPQ(x); BSWAPQ(x);
BSWAPQ(x); BSWAPQ(x);
BSWAPQ(x); BSWAPQ(x);
BSWAPQ(x); BSWAPQ(x);
BSWAPQ(x); BSWAPQ(x);
BSWAPQ(x); BSWAPQ(x);
BSWAPQ(x); BSWAPQ(x);
BSWAPQ(x); BSWAPQ(x);
BSWAPQ(x); BSWAPQ(x);
BSWAPQ(x); BSWAPQ(x);
BSWAPQ(x); BSWAPQ(x);
BSWAPQ(x); BSWAPQ(x);
BSWAPQ(x); BSWAPQ(x);
BSWAPQ(x); BSWAPQ(x);
BSWAPQ(x); BSWAPQ(x);
BSWAPQ(x); BSWAPQ(x);
BSWAPQ(x); BSWAPQ(x);
BSWAPQ(x);
return x;
}
#endif /* defined(__x86_64__) */
#define BSWAPL(_lval) \
do { \
__asm__ __volatile__("bswapl %0" \
: /*out*/ "+r"(_lval) ); \
} while (0)
UInt bswapl ( UInt x )
{
BSWAPL(x); BSWAPL(x);
BSWAPL(x); BSWAPL(x);
BSWAPL(x); BSWAPL(x);
BSWAPL(x); BSWAPL(x);
BSWAPL(x); BSWAPL(x);
BSWAPL(x); BSWAPL(x);
BSWAPL(x); BSWAPL(x);
BSWAPL(x); BSWAPL(x);
BSWAPL(x); BSWAPL(x);
BSWAPL(x); BSWAPL(x);
BSWAPL(x); BSWAPL(x);
BSWAPL(x); BSWAPL(x);
BSWAPL(x); BSWAPL(x);
BSWAPL(x); BSWAPL(x);
BSWAPL(x); BSWAPL(x);
BSWAPL(x); BSWAPL(x);
BSWAPL(x); BSWAPL(x);
BSWAPL(x); BSWAPL(x);
BSWAPL(x); BSWAPL(x);
BSWAPL(x); BSWAPL(x);
BSWAPL(x); BSWAPL(x);
BSWAPL(x); BSWAPL(x);
BSWAPL(x); BSWAPL(x);
BSWAPL(x); BSWAPL(x);
BSWAPL(x); BSWAPL(x);
BSWAPL(x); BSWAPL(x);
BSWAPL(x); BSWAPL(x);
BSWAPL(x); BSWAPL(x);
BSWAPL(x); BSWAPL(x);
BSWAPL(x); BSWAPL(x);
BSWAPL(x); BSWAPL(x);
BSWAPL(x); BSWAPL(x);
BSWAPL(x);
return x;
}
int main ( void )
{
#if defined(__x86_64__)
printf("0x%llx\n", bswapq( 0x8877665544332211ULL ));
#endif
printf("0x%x\n", bswapl( 0x44332211ULL ));
return 0;
}
|