mirror of
https://github.com/qbittorrent/qBittorrent.git
synced 2025-03-07 19:47:04 +08:00
Use "table look-up" method for reversing byte
This method takes constant time and is less prone to (CPU) pipeline stalling due to less computation. Also it is slightly faster than the previous method.
This commit is contained in:
parent
cf96e6c642
commit
4cb075b168
@ -37,8 +37,18 @@ namespace
|
||||
{
|
||||
unsigned char reverseByte(const unsigned char byte)
|
||||
{
|
||||
// https://graphics.stanford.edu/~seander/bithacks.html#ReverseByteWith64Bits
|
||||
return (((byte * 0x80200802ULL) & 0x0884422110ULL) * 0x0101010101ULL) >> 32;
|
||||
// https://graphics.stanford.edu/~seander/bithacks.html#BitReverseTable
|
||||
static const unsigned char table[] =
|
||||
{
|
||||
#define R2(n) n, (n + (2 * 64)), (n + 64), (n + (3 * 64))
|
||||
#define R4(n) R2(n), R2(n + (2 * 16)), R2(n + 16), R2(n + (3 * 16))
|
||||
#define R6(n) R4(n), R4(n + (2 * 4)), R4(n + 4), R4(n + (3 * 4))
|
||||
R6(0), R6(2), R6(1), R6(3)
|
||||
#undef R6
|
||||
#undef R4
|
||||
#undef R2
|
||||
};
|
||||
return table[byte];
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user