Author: Dann Corbit
Date: 10:42:07 07/17/03
The assembly versions will surely be faster in a test harness. But when you poke them into actual code and turn on the maximal optimizer settings, do the assembly high and low bit functions actually beat this C code? I ask because it seems that the optimizer is somehow smarter when dealing with C with some experiments that I have run. What happens when you try it? #ifdef _MSC_VER typedef unsigned __int64 Bitboard; #else typedef unsigned long long Bitboard; #endif /* Returns top bit of x, or 0 if x = 0. */ /* This algorithm is due to Robert Harley */ Bitboard hi_bit(Bitboard x) { x |= x >> 1; x |= x >> 2; x |= x >> 4; x |= x >> 8; x |= x >> 16; x |= x >> 32; return x ^ x >> 1; } /* end function top_bit */ // // Hard to say which of these will be faster on your system. // Bitboard lo_bit0(Bitboard n) { return ((n & (n - 1)) ^ n); } Bitboard lo_bit1(Bitboard n) { return n & -n; }
This page took 0.01 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.