Author: Robert Hyatt
Date: 13:41:11 11/19/02
Go up one level in this thread
On November 19, 2002 at 16:29:41, Eugene Nalimov wrote:
>You don't need asm file to figure out what is going on. For a large switch table
>compiler generated jump table, and code should look like
> cmp eax, upper_switch_value+1
> jnc default_case
> mov eax, jump_table[eax*4]
> jmp eax
>Here indirect branch is not better than indirect function call. Plus, as Gunnar
>mentioned, there is some overhead.
What about a jump to a jump instead? That ought to be more predictable as the
second jump will _always_ be taken and to the same target address. IE the first
"switch" I saw did something like this:
assuming ebx has the switch case (0,1,..., N-1)
<check range>
lea eax, jumptable+ebx*4
jmp [eax]
And jumptable looked like this:
jumptable: jmp case0
jmp case1
etc...
That is loosely translated into x86 assembly as this was not an x86
architecture,
and yes, the ebx*4 is not quite the right number, but it was the idea rather
than
trying to adjust ebx by a non-power-of-2 and I chose the easy way for
illustration...
the jmp [eax] can't be predicted, but the rest in the jump table can be.
>
>Thanks,
>Eugene
>
>On November 19, 2002 at 14:40:50, Robert Hyatt wrote:
>
>>On November 19, 2002 at 04:41:59, Gunnar Andersson wrote:
>>
>>>On November 18, 2002 at 20:09:27, Eugene Nalimov wrote:
>>>
>>>>Indirect call costs *at least* the same as conditional branch, sometimes much
>>>>more.
>>>
>>>I've discovered that arrays of function pointers can outperform switch
>>>statements, at least with GCC and many cases. To me the generated assembly code
>>>for the switch statement contains a jump table anyway, and there's some extra
>>>assembly code essentially performing range checking.
>>>
>>>/ Gunnar
>>
>>
>>It would be interesting to look at the .s file from gcc to see what it is doing.
>> The
>>indirect calls should be bad. Of course the range checking in a switch is also
>>bad,
>>but I have seen compilers that would let me turn this off...
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.