Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: Branchless code

Author: Gerd Isenberg

Date: 09:46:40 11/19/02

Go up one level in this thread


On November 19, 2002 at 12:30:09, Tony Werten wrote:

>On November 19, 2002 at 08:58:16, Gerd Isenberg wrote:
>
>><snip>
>>
>>>>Btw. the build in C++ type "bool" is often implemented with byte size.
>>>>Due to performace reasons, it might be advantageous to use an own typedef like
>>>
>>>Yes, that's it, it's a performance warning.
>>
>>solvable by including an != 0 without any code size effects...
>>
>>int  i = 1234;
>>bool b = i;    // the value range of bool is [0,1] resp [false,true]
>>               // so the (ms)compiler warns, but implicitly assignes (i != 0)
>>
>>
>>>
>>>>typedef int BOOL;
>>>>
>>>>#ifndef TRUE
>>>>#define FALSE 0
>>>>#define TRUE 1
>>>>#endif
>>>
>>>I don't think I get it, you suggest to cast to int instead, what is the rest
>>>for?
>>
>>Confusion :)
>>
>>You find the BOOL typedef it a lot in ms-header files, maybe also for historical
>>reasons, because in older days there was no bool type in C.
>>
>>But even today, "bool" may have some performance problems due to byte-size.
>>
>>Look in MFC-functions you find mostly BOOL instead of bool, because sizeof(BOOL)
>>is 4, which is the natural register size of x86 processors. Another point is
>>pushing bool/char parameters may result in some misalignment on the stack.
>>
>>The rest, i guess you mean the defines?
>>
>>MS simply use the old fashioned preprocessor to define TRUE,FALSE literals, if
>>not already defined.
>>
>>Of course this BOOL type, behaves exactly like an int.
>>
>>
>>>
>>>Anyway, I hardly ever do cast to bool, it's working fine without it so it's
>>>probably just wasted clocks?
>>>
>>
>>
>>It's a good idea to assign only other boolean expressions to variables of type
>>bool incuding the literals "true" or "false". If you wan't to assign other types
>>to bool you should always use explicite relational operators, most likely != 0.
>>
>>Assigning bool to int is another thing, because bool is a kind of pragmatical
>>subset of int, due to "true" maps to "one" and "false" to "zero".
>>Therefore expressions like that are possible:
>>
>>int a,b,c;
>>...
>>bool bExpression = (b>c);
>>int nTrueConditions = (a>b) + (a>c) + bExpression;
>>
>>with a value range of [0...3]
>>
>>In strict and for didactical purposes more cleaner languages like Java or Pascal
>>you can't simply do such performance relevant "dirty" tricks like in the
>>"pragmatic" C-language.
>
>Actually, since in Pascal a bool is garanteed to be 0 or 1 there are some nice
>trics.
>
>So you can replace: if (a>5) then inc(b)
>with: inc(b,a>5)  ( Could be inc(b,integer(a>5)), I'm not sure)
>
>Tony

Aha, i guess some pragmatic borland delphi specials, type conversion function
from bool(ean) to integer, like casts in c.

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.