1 #ifndef TEMU_BITMANIP_H
2 #define TEMU_BITMANIP_H
12 static inline uint16_t
13 temu_swap16(uint16_t HWord)
15 uint16_t Res = HWord << 8 | HWord >> 8;
19 static inline uint32_t
20 temu_swap32(uint32_t Word)
22 uint32_t Res = (((uint32_t)temu_swap16(Word)) << 16)
23 | (uint32_t)temu_swap16(Word >> 16);
27 static inline uint64_t
28 temu_swap64(uint64_t DWord)
30 uint64_t Res = (((uint64_t)temu_swap32(DWord)) << 32)
31 | (uint64_t)temu_swap32(DWord >> 32);
36 static inline uint16_t
37 temu_swapBigHost16(uint16_t HWord)
39 return temu_swap16(HWord);
42 static inline uint32_t
43 temu_swapBigHost32(uint32_t Word)
45 return temu_swap32(Word);
48 static inline uint64_t
49 temu_swapBigHost64(uint64_t DWord)
51 return temu_swap64(DWord);
54 static inline uint16_t
55 temu_swapLittleHost16(uint16_t HWord)
60 static inline uint32_t
61 temu_swapLittleHost32(uint32_t Word)
66 static inline uint64_t
67 temu_swapLittleHost64(uint64_t DWord)
75 temu_ctz32(uint32_t Word)
77 if (Word == 0)
return 32;
78 int Res = __builtin_ctz(Word);
84 temu_clz32(uint32_t Word)
86 if (Word == 0)
return 32;
87 int Res = __builtin_clz(Word);
93 temu_popcount32(uint32_t Word)
95 int Res = __builtin_popcount(Word);
100 temu_parity32(uint32_t Word)
102 int Res = __builtin_parity(Word);
107 temu_ctz64(uint64_t Word)
109 if (Word == 0)
return 64;
110 int Res = __builtin_ctzl(Word);
116 temu_clz64(uint64_t Word)
118 if (Word == 0)
return 64;
119 int Res = __builtin_clzl(Word);
125 temu_popcount64(uint64_t Word)
127 int Res = __builtin_popcountl(Word);
132 temu_parity64(uint64_t Word)
134 int Res = __builtin_parityl(Word);