hg: mlvm/mlvm/hotspot: indy.compiler: First commit, not enabled in series file.

John Rose John.Rose at Sun.COM
Tue Jun 23 00:53:10 PDT 2009


I just pushed an update which fixed the stack pointer smashing problem  
we ran into at JavaOne.  Since C2 stack frames do not use EBP for a  
frame pointer (EBP is a regular register) there is no way to  
checkpoint the current ESP just before a method handle call.  This is  
unfortunate, since method handles can rearrange the stack as they  
insert or delete arguments.

The solution is pretty simple:  Use EBP itself to hold a checkpointed  
value of ESP.  (It is already the case that all calling sequences save  
and restore EBP, for the sake of the interpreter and its adapters.)   
This means a method handle call looks like this:
   mov rbp, rsp
   call MH.invoke.from_compiled_entry
   mov rsp, rbp

That's not too bad, except of course that we need to inline these guys  
routinely.

(I had considered more exotic solutions, like inventing new frame  
types or checkpointing the ESP on a thread-local variable.  This  
solution is pleasantly simple.)

The stack frame walking code had to be per-kludged (i.e., another  
kludge on top of kludges) to know about this convention.  It wants a  
clean-up.  And there's a deoptimization bug in there somewhere; yuck.

The resulting JVM runs the 1600 unit tests of MethodHandlesTest with  
CompileThreshold set to 1 (usually it's 10000). It almost runs in - 
Xcomp mode also, but crashes very late trying to deoptimize in a  
catchException combinator.

In my previous push I put the compiler patch into the series file, but  
it only applies if the "testable" guard is removed.  I suppose it's  
actually testable now.

Your turn, Christian!

-- John

On Jun 18, 2009, at 4:30 AM, Christian Thalinger wrote:

> Christian.Thalinger at Sun.COM wrote:
>> Changeset: aeb8308e7dfe
>> Author:    twisti
>> Date:      2009-06-17 15:24 +0200
>> URL:       http://hg.openjdk.java.net/mlvm/mlvm/hotspot/rev/aeb8308e7dfe
>>
>> indy.compiler: First commit, not enabled in series file.
>>
>> + indy.compiler.patch
>
> Although it's not working yet, this is the first commit for compiler
> support for invokedynamic.  More to come.




More information about the mlvm-dev mailing list