Computed gotos on Reddit

Don Clugston dac at nospam.com
Wed Jul 25 00:51:49 PDT 2012


On 25/07/12 09:37, Walter Bright wrote:
> On 7/24/2012 11:46 PM, Dmitry Olshansky wrote:
>> It's pc => address because one can first preprocess all of byte code
>> doing
>> opcode => address rewrites. But you can't do it unless taking address
>> of labels
>> is possible.
>
> All right, that's the piece that was missing.
>
> I suppose it is possible for the compiler to recognize that the
> opcode=>address array is invariant, and optimize it out, but that would
> be a novel optimization. I don't know how hard it would be.
>
>
>  > Done: http://d.puremagic.com/issues/show_bug.cgi?id=8431
>
> Thanks!

Another interesting optimization with "final switch" would be if each 
case has about the same code length.

final switch(x) {
case C1:  ...
case C2:  ...
case C3:  ...
case C4:  ...
}
then if &(case c2) - &(case C1) == &(case C3) - &(case C2)

change it to
goto (&case C1) + x *( &(case c2) - &(case C1) );

so that there is no lookup table, just a multiply.


More information about the Digitalmars-d mailing list