Author: Gerd Isenberg
Date: 11:24:52 07/11/03
Go up one level in this thread
>These are all very fascinating, but after testing them all, it seems that a
>16-bit lookup table is still the fastest on my Athlon. Probably the bsf method
>will be fastest on a P3.
Yes, absolutely.
In IsiChess on XP2.8+ Barton unconditional bsf is fastest now.
__asm
{
mov edx, [bb]
bsf eax, [edx+4]
xor eax, 32
bsf eax, [edx]
btr [edx],eax
}
What about this one with the (bb ^ (bb - 1)) idea?
const int lsz64_tbl[64] =
{
63,30, 3,32,59,14,11,33,
60,24,50, 9,55,19,21,34,
61,29, 2,53,51,23,41,18,
56,28, 1,43,46,27, 0,35,
62,31,58, 4, 5,49,54, 6,
15,52,12,40, 7,42,45,16,
25,57,48,13,10,39, 8,44,
20,47,38,22,17,37,36,26,
};
int bitScanAndReset(BitBoard &bb)
{
BitBoard lsb = bb ^ (bb - 1);
bb &= ~lsb;
unsigned int foldedLSB = ((int) lsb) ^ ((int)(lsb>>32));
return lsz64_tbl[foldedLSB * 0x78291ACF >> 26];
}
Gerd
This page took 0 seconds to execute
Last modified: Thu, 15 Apr 21 08:11:13 -0700
Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.