… | |
… | |
289 | |
289 | |
290 | return r + ecb_ld32 (x); |
290 | return r + ecb_ld32 (x); |
291 | } |
291 | } |
292 | #endif |
292 | #endif |
293 | |
293 | |
|
|
294 | ecb_function_ uint8_t ecb_bitrev8 (uint8_t x) |
|
|
295 | { |
|
|
296 | return ( (x * 0x0802U & 0x22110U) |
|
|
297 | | (x * 0x8020U & 0x88440U)) * 0x10101U >> 16; |
|
|
298 | } |
|
|
299 | |
|
|
300 | ecb_function_ uint16_t ecb_bitrev16 (uint16_t x) |
|
|
301 | { |
|
|
302 | x = ((x >> 1) & 0x5555) | ((x & 0x5555) << 1); |
|
|
303 | x = ((x >> 2) & 0x3333) | ((x & 0x3333) << 2); |
|
|
304 | x = ((x >> 4) & 0x0f0f) | ((x & 0x0f0f) << 4); |
|
|
305 | x = ( x >> 8 ) | ( x << 8); |
|
|
306 | |
|
|
307 | return x; |
|
|
308 | } |
|
|
309 | |
|
|
310 | ecb_function_ uint32_t ecb_bitrev32 (uint32_t x) |
|
|
311 | { |
|
|
312 | x = ((x >> 1) & 0x55555555) | ((x & 0x55555555) << 1); |
|
|
313 | x = ((x >> 2) & 0x33333333) | ((x & 0x33333333) << 2); |
|
|
314 | x = ((x >> 4) & 0x0f0f0f0f) | ((x & 0x0f0f0f0f) << 4); |
|
|
315 | x = ((x >> 8) & 0x00ff00ff) | ((x & 0x00ff00ff) << 8); |
|
|
316 | x = ( x >> 16 ) | ( x << 16); |
|
|
317 | |
|
|
318 | return x; |
|
|
319 | } |
|
|
320 | |
294 | /* popcount64 is only available on 64 bit cpus as gcc builtin */ |
321 | /* popcount64 is only available on 64 bit cpus as gcc builtin */ |
295 | /* so for this version we are lazy */ |
322 | /* so for this version we are lazy */ |
296 | ecb_function_ int ecb_popcount64 (uint64_t x) ecb_const; |
323 | ecb_function_ int ecb_popcount64 (uint64_t x) ecb_const; |
297 | ecb_function_ int |
324 | ecb_function_ int |
298 | ecb_popcount64 (uint64_t x) |
325 | ecb_popcount64 (uint64_t x) |