Author: Angrim
Date: 15:49:49 02/11/02
Go up one level in this thread
On February 11, 2002 at 13:03:57, Eugene Nalimov wrote: <snip> >(3) They did not try to remove poorly predicted branch from their implementation >of the LOOKUP algorithm. For example, on x86 there is no branches in the >following variant: > > extern unsigned char tab[256]; > > unsigned Lookup8 (unsigned i) > { > unsigned b, n; > > b = ((i & 0xFFFF0000) != 0); > n = b * 16; > i >>= b * 16; > b = ((i & 0x0000FF00) != 0); > n += b * 8; > i >>= b * 8; > return n + tab[i]; > } > >Eugene Cool, your posts are a nice source to learn more about program optimization. I had thought that code like b= (i!=0); would be the same as if(i!=0) b=1; else b=0; but now I know that the compiler(even gcc) is smart enough to use "test" and "setne" instructions to avoid branches here. Now to glance through my engine a bit and see if I can find some places that I can use this information. Angrim
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.