00001 #ifndef TEMU_BITMANIP_H
00002 #define TEMU_BITMANIP_H
00003
00004 #include <stdint.h>
00005
00006 #ifdef __cplusplus
00007 extern "C" {
00008 #endif
00009
00010
00011
00012 static inline uint16_t
00013 temu_swap16(uint16_t HWord)
00014 {
00015 uint16_t Res = HWord << 8 | HWord >> 8;
00016 return Res;
00017 }
00018
00019 static inline uint32_t
00020 temu_swap32(uint32_t Word)
00021 {
00022 uint32_t Res = (((uint32_t)temu_swap16(Word)) << 16)
00023 | (uint32_t)temu_swap16(Word >> 16);
00024 return Res;
00025 }
00026
00027 static inline uint64_t
00028 temu_swap64(uint64_t DWord)
00029 {
00030 uint64_t Res = (((uint64_t)temu_swap32(DWord)) << 32)
00031 | (uint64_t)temu_swap32(DWord >> 32);
00032 return Res;
00033 }
00034
00035
00036 static inline uint16_t
00037 temu_swapBigHost16(uint16_t HWord)
00038 {
00039 return temu_swap16(HWord);
00040 }
00041
00042 static inline uint32_t
00043 temu_swapBigHost32(uint32_t Word)
00044 {
00045 return temu_swap32(Word);
00046 }
00047
00048 static inline uint64_t
00049 temu_swapBigHost64(uint64_t DWord)
00050 {
00051 return temu_swap64(DWord);
00052 }
00053
00054 static inline uint16_t
00055 temu_swapLittleHost16(uint16_t HWord)
00056 {
00057 return HWord;
00058 }
00059
00060 static inline uint32_t
00061 temu_swapLittleHost32(uint32_t Word)
00062 {
00063 return Word;
00064 }
00065
00066 static inline uint64_t
00067 temu_swapLittleHost64(uint64_t DWord)
00068 {
00069 return DWord;
00070 }
00071
00072
00073
00074 static inline int
00075 temu_ctz32(uint32_t Word)
00076 {
00077 if (Word == 0) return 32;
00078 int Res = __builtin_ctz(Word);
00079 return Res;
00080 }
00081
00082
00083 static inline int
00084 temu_clz32(uint32_t Word)
00085 {
00086 if (Word == 0) return 32;
00087 int Res = __builtin_clz(Word);
00088 return Res;
00089 }
00090
00091
00092 static inline int
00093 temu_popcount32(uint32_t Word)
00094 {
00095 int Res = __builtin_popcount(Word);
00096 return Res;
00097 }
00098
00099 static inline int
00100 temu_parity32(uint32_t Word)
00101 {
00102 int Res = __builtin_parity(Word);
00103 return Res;
00104 }
00105
00106 static inline int
00107 temu_ctz64(uint64_t Word)
00108 {
00109 if (Word == 0) return 64;
00110 int Res = __builtin_ctzl(Word);
00111 return Res;
00112 }
00113
00114
00115 static inline int
00116 temu_clz64(uint64_t Word)
00117 {
00118 if (Word == 0) return 64;
00119 int Res = __builtin_clzl(Word);
00120 return Res;
00121 }
00122
00123
00124 static inline int
00125 temu_popcount64(uint64_t Word)
00126 {
00127 int Res = __builtin_popcountl(Word);
00128 return Res;
00129 }
00130
00131 static inline int
00132 temu_parity64(uint64_t Word)
00133 {
00134 int Res = __builtin_parityl(Word);
00135 return Res;
00136 }
00137
00138
00139 #ifdef __cplusplus
00140 }
00141 #endif
00142
00143 #endif