I am actually working on unboxing interpreter through common call paths on
a private branch with an eventual goal of adding specialized interpreters
for methods(class/instance) and for script/eval bodies (two different
patterns of instructions).  It seemed wrong to implement new interpreters
without punching argument unboxing through first.

Hopefully something interesting for next week?

-Tom


On Thu, Feb 6, 2014 at 5:46 PM, Charles Oliver Nutter
<head...@headius.com>wrote:

> A lot more code is working now that I've just opted to back off
> specializing anything beyond what the IR does itself. This means that
> passing a block to nested closures is done by reifying it into a Proc,
> sticking it in the DynamicScope, and unboxing it on the other side...among
> other things. Methods always use boxed argument lists; invokedynamic is
> used to handle boxing arguments on the calling side and unboxing them on
> the receiving side. This *might* make that boxing eligible for escape
> analysis to eliminate the allocation, but I have not dug deeper to see.
>
> I also have closures basically working now, though non-local flow control
> still requires too much data from IR structures to implement right now
> (non-local break and return, for example).
>
> I also ran into an issue with how heap variable assignment is being
> optimized:
>
> for the closure passed to foo: a = 'here'; foo { a = 'bar'; puts a }
>
> Linearized instructions for JIT:
> 0 thread_poll
> 1 line_num(0)
> 2 %t_a_1 = "bar"
> 3 %cl_1_0 = call_1o(FUNCTIONAL, 'puts', %self, [%t_a_1]){1O}
> 4 store_lvar(%t_a_1, -e_CLOSURE_1, a(1:0))
> 5 return(%cl_1_0)
> 6 %cl_1_2 = recv_jruby_exc
> 7 store_lvar(%t_a_1, -e_CLOSURE_1, a(1:0))
> 8 runtime_helper(catchUncaughtBreakInLambdas, [%cl_1_2])
>
> The exception table here handles exceptions from 0 to 5 by branching to 6.
> However, 7 attempts to load a value first assigned within that catch range.
> When I try to compile this to JVM bytecode, it fails because there's no
> guarantee that %t_a_1 has been assigned before 7 runs.
>
> In any case, things are moving along well. There's a few things to fix and
> lots of things to optimize, but progress is being made.
>
> - Charlie
>



-- 
blog: http://blog.enebo.com       twitter: tom_enebo
mail: tom.en...@gmail.com

Reply via email to