Daniel Grunblatt wrote:

> I have tested times using computed goto in the interpreter and here are
> the results:
> 
> # ./test_prog mops.pbc
> Iterations:    100000000
> Estimated ops: 300000000
> Elapsed time:  8.604721
> M op/s:        34.864582



Yes, I wrote a poor-man's computed goto version just of mops.pasm the
other day with an inner loop like this:

#define NEXT goto **ip++

  op8:
     if (ireg[2] == ireg[4]) {
         *ip+=3;
         goto **ip;
     }
     NEXT;
  op9:
     ireg[2] += ireg[3];
     NEXT;
  op10:
     *ip-=3;
     goto **ip;

It ran at ~58 M op/s, slightly over twice the current dispatcher.
Obviously my code is not a general machine, but I hypothesized that
58 would be near the ideal upper bound on direct-threading
performance for the current architecture on my computer.

-Kevin


Reply via email to