MCPcopy Create free account
hub / github.com/comaps/comaps / PerfectShuffle

Function PerfectShuffle

libs/base/bits.hpp:48–56  ·  view source on GitHub ↗

Perform a perfect shuffle of the bits of 64-bit integer, shuffling bits from 'abcd efgh ijkl mnop ABCD EFGH IJKL MNOP' to 'aAbB cCdD eEfF gGhH iIjJ kKlL mMnN oOpP'. See http://www.icodeguru.com/Embedded/Hacker's-Delight/047.htm

Source from the content-addressed store, hash-verified

46// 'abcd efgh ijkl mnop ABCD EFGH IJKL MNOP' to 'aAbB cCdD eEfF gGhH iIjJ kKlL mMnN oOpP'.
47// See http://www.icodeguru.com/Embedded/Hacker's-Delight/047.htm
48constexpr uint64_t PerfectShuffle(uint64_t x)
49{
50 x = ((x & 0x00000000FFFF0000ULL) << 16) | ((x >> 16) & 0x00000000FFFF0000ULL) | (x & 0xFFFF00000000FFFFULL);
51 x = ((x & 0x0000FF000000FF00ULL) << 8) | ((x >> 8) & 0x0000FF000000FF00ULL) | (x & 0xFF0000FFFF0000FFULL);
52 x = ((x & 0x00F000F000F000F0ULL) << 4) | ((x >> 4) & 0x00F000F000F000F0ULL) | (x & 0xF00FF00FF00FF00FULL);
53 x = ((x & 0x0C0C0C0C0C0C0C0CULL) << 2) | ((x >> 2) & 0x0C0C0C0C0C0C0C0CULL) | (x & 0xC3C3C3C3C3C3C3C3ULL);
54 x = ((x & 0x2222222222222222ULL) << 1) | ((x >> 1) & 0x2222222222222222ULL) | (x & 0x9999999999999999ULL);
55 return x;
56}
57
58// Reverses the perfect shuffle of bits in a 64-bit integer
59constexpr uint64_t PerfectUnshuffle(uint64_t x)

Callers 2

BitwiseMergeFunction · 0.85
UNIT_TESTFunction · 0.85

Calls

no outgoing calls

Tested by 1

UNIT_TESTFunction · 0.68