Threaded interpreter in Java

Remi Forax forax at univ-mlv.fr
Wed Aug 3 22:33:33 UTC 2016


I think it's better to make
  tab[i].invokeExact(...)
a tailcall,
so the loop will be part of the implementation, not part of the spec.

Rémi

----- Mail original -----
> De: "John Rose" <john.r.rose at oracle.com>
> À: "Da Vinci Machine Project" <mlvm-dev at openjdk.java.net>
> Envoyé: Jeudi 4 Août 2016 00:14:37
> Objet: Re: Threaded interpreter in Java

> On Aug 3, 2016, at 1:22 PM, Remi Forax <forax at univ-mlv.fr> wrote:
>> 
>> Charles ask if we can make a fast register interpreter in Java,
>> here is my take on a threaded-like interpreter
>> 
>> https://gist.github.com/forax/f38b533e089217cfc4d0ae3c6e2de9c9
> 
> Nicely done.  We were talking last night at dinner about making
> bytecode interpreters go fast, and this is helpful.
> 
> I think there may be a combinator here, for bytecode dispatch loops.
> (This feels like the PIC combinator, both fundamental and tricky to get right.)
> A "bytecode" dispatch combinator might provide a pattern like the following:
> 
> MethodHandle init, pred, step, fini, index;
> @NonNull MethodHandle[] tab;
> R dispatch(A… a) {
>   V v = init(a…);  // one here; there might be many v…
>   while (pred(a…)) {
>      v = step(v, a…);
>      // execute one "instruction":
>      int i = index(v, a…);
>      tab[i].invokeExact(v, a…);
>   }
>   return fini(V, a…);
> }
> 
> The explicit table would be recopied internally to an @Stable array for constant
> folding.
> The various index values could be tracked and turned into traces (or some other
> profile
> driven structure) which would be compiled together, in specialized segments of
> the unrolled
> interpreter loop.
> 
> Or maybe just the table lookup part alone makes a good combinator, to be paired
> with the loop combinators?
> 
> Comments welcome…
> 
> — John
> 
> P.S. Another new RFE:
> experimental hook for creating heisenboxes
> https://bugs.openjdk.java.net/browse/JDK-8163133
> _______________________________________________
> mlvm-dev mailing list
> mlvm-dev at openjdk.java.net
> http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev


More information about the mlvm-dev mailing list