00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #ifndef ROOT_Byteswap
00012 #define ROOT_Byteswap
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037 #define R__bswap_constant_16(x) \
00038 ((((x) >> 8) & 0xff) | (((x) & 0xff) << 8))
00039
00040 #if defined __GNUC__ && __GNUC__ >= 2
00041 # define R__bswap_16(x) \
00042 (__extension__ \
00043 ({ register unsigned short int __v; \
00044 if (__builtin_constant_p (x)) \
00045 __v = R__bswap_constant_16 (x); \
00046 else \
00047 __asm__ __volatile__ ("rorw $8, %w0" \
00048 : "=r" (__v) \
00049 : "0" ((unsigned short int) (x)) \
00050 : "cc"); \
00051 __v; }))
00052 #else
00053
00054 # define R__bswap_16(x) R__bswap_constant_16 (x)
00055 #endif
00056
00057
00058
00059 #define R__bswap_constant_32(x) \
00060 ((((x) & 0xff000000) >> 24) | (((x) & 0x00ff0000) >> 8) | \
00061 (((x) & 0x0000ff00) << 8) | (((x) & 0x000000ff) << 24))
00062
00063 #if defined __GNUC__ && __GNUC__ >= 2
00064
00065
00066 # if !defined __i486__ && !defined __pentium__ && !defined __pentiumpro__ && \
00067 !defined __pentium4__ && !defined __x86_64__
00068 # define R__bswap_32(x) \
00069 (__extension__ \
00070 ({ register unsigned int __v; \
00071 if (__builtin_constant_p (x)) \
00072 __v = R__bswap_constant_32 (x); \
00073 else \
00074 __asm__ __volatile__ ("rorw $8, %w0;" \
00075 "rorl $16, %0;" \
00076 "rorw $8, %w0" \
00077 : "=r" (__v) \
00078 : "0" ((unsigned int) (x)) \
00079 : "cc"); \
00080 __v; }))
00081 # else
00082 # define R__bswap_32(x) \
00083 (__extension__ \
00084 ({ register unsigned int __v; \
00085 if (__builtin_constant_p (x)) \
00086 __v = R__bswap_constant_32 (x); \
00087 else \
00088 __asm__ __volatile__ ("bswap %0" \
00089 : "=r" (__v) \
00090 : "0" ((unsigned int) (x))); \
00091 __v; }))
00092 # endif
00093 #else
00094 # define R__bswap_32(x) R__bswap_constant_32 (x)
00095 #endif
00096
00097
00098 #if defined __GNUC__ && __GNUC__ >= 2
00099
00100 # define R__bswap_64(x) \
00101 (__extension__ \
00102 ({ union { __extension__ unsigned long long int __ll; \
00103 UInt_t __l[2]; } __w, __r; \
00104 __w.__ll = (x); \
00105 __r.__l[0] = R__bswap_32 (__w.__l[1]); \
00106 __r.__l[1] = R__bswap_32 (__w.__l[0]); \
00107 __r.__ll; }))
00108 #endif
00109
00110
00111
00112
00113
00114
00115 #define Rbswap_16(x) R__bswap_16 (x)
00116
00117
00118 #define Rbswap_32(x) R__bswap_32 (x)
00119
00120 #if defined __GNUC__ && __GNUC__ >= 2
00121
00122 # define Rbswap_64(x) R__bswap_64 (x)
00123 #endif
00124
00125 #endif