mirror of
https://github.com/qbittorrent/qBittorrent
synced 2025-08-14 18:47:37 -07: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
1 changed files with 12 additions and 2 deletions
|
@ -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…
Add table
Add a link
Reference in a new issue