Computed gotos on Reddit

Dmitry Olshansky dmitry.olsh at gmail.com
Wed Jul 25 04:26:47 PDT 2012


On 25-Jul-12 15:14, Don Clugston wrote:
> On 25/07/12 12:11, Walter Bright wrote:
>> On 7/25/2012 12:51 AM, Don Clugston wrote:
>>> so that there is no lookup table, just a multiply.
>>
>> Rethinking your idea a bit...
>>
>> Suppose the switch jump_address[] array was really an array of hardcoded
>> jmp instructions, 5 bytes each:
>>
>>    jmp_table:
>>      jmp Lcase1;
>>      jmp Lcase2;
>>      jmp Lcase3;
>>      ...
>>
>> and then the switch(EBX) would be:
>>
>>      lea EAX,jmp_table[EBX][EBX*4]
>>      jmp EAX
>>
>> is that kick-ass or what?
>>
>> (There'd be some additional complication for PIC code.)
>
> Very nice. The jumps in the jump table take effectively zero cycles.
> That looks quite doable.

Looks neat. I'd more then willing to test how it affects my tiny VM in 
std.regex.

-- 
Dmitry Olshansky


More information about the Digitalmars-d mailing list