mirror of
https://github.com/sockspls/badfish
synced 2025-04-30 08:43:09 +00:00
Optimized bitScanReverse32()
Should be a bit faster then previous one. Hacked by Pascal Georges. No functional change. Signed-off-by: Marco Costalba <mcostalba@gmail.com>
This commit is contained in:
parent
cf486cf229
commit
990d83a72d
1 changed files with 22 additions and 11 deletions
|
@ -368,27 +368,38 @@ Square pop_1st_bit(Bitboard* bb) {
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// Optimized bitScanReverse32() implementation by Pascal Georges. Note
|
||||||
|
// that first bit is 1, this allow to differentiate between 0 and 1.
|
||||||
|
static CACHE_LINE_ALIGNMENT
|
||||||
|
const char MsbTable[256] = {
|
||||||
|
0, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5,
|
||||||
|
5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
|
||||||
|
6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7,
|
||||||
|
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
|
||||||
|
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
|
||||||
|
7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
|
||||||
|
8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
|
||||||
|
8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
|
||||||
|
8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
|
||||||
|
8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
|
||||||
|
8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8
|
||||||
|
};
|
||||||
|
|
||||||
int bitScanReverse32(uint32_t b)
|
int bitScanReverse32(uint32_t b)
|
||||||
{
|
{
|
||||||
int result = 0;
|
int result = 0;
|
||||||
|
|
||||||
if (b > 0xFFFF) {
|
if (b > 0xFFFF)
|
||||||
|
{
|
||||||
b >>= 16;
|
b >>= 16;
|
||||||
result += 16;
|
result += 16;
|
||||||
}
|
}
|
||||||
if (b > 0xFF) {
|
if (b > 0xFF)
|
||||||
|
{
|
||||||
b >>= 8;
|
b >>= 8;
|
||||||
result += 8;
|
result += 8;
|
||||||
}
|
}
|
||||||
if (b > 0xF) {
|
return result + MsbTable[b];
|
||||||
b >>= 4;
|
|
||||||
result += 4;
|
|
||||||
}
|
|
||||||
if (b > 0x3) {
|
|
||||||
b >>= 2;
|
|
||||||
result += 2;
|
|
||||||
}
|
|
||||||
return result + (b > 0) + (b > 1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
Loading…
Add table
Reference in a new issue