review for 7045514: SPARC assembly code for JSR 292 ricochet frames

Tom Rodriguez tom.rodriguez at oracle.com
Thu Jun 2 11:52:57 PDT 2011


> 
>> 
>> MethodHandles::verify_stack_move() has commented code. Should UNREASONABLE_STACK_MOVE depends on LP64?
> 
> I'm going to rework this.

We seem to need a larger slop on sparc though I'm not totally clear why.  I think it's because of the register save area but I'm not sure.  I increased it to 31 which allows RicochetTest to pass with max arity 255.

tom

> 
>> 
>> Could you move following verification code under first condition?:
>> 
>> +       if (collect_count_constant >= 0) {
>> +         collect_count = collect_count_constant;
>> +       } else {
>> +         __ load_method_handle_vmslots(O1_collect_count, G3_method_handle, O2_scratch);
>> +         collect_count = O1_collect_count;
>> +       }
>> + #ifdef ASSERT
>> +       if (VerifyMethodHandles && collect_count_constant >= 0) {
>> +         BLOCK_COMMENT("verify collect_count_constant {");
>> +         __ load_method_handle_vmslots(O3_scratch, G3_method_handle, O2_scratch);
>> 
>> The same for dest_slot_constant verification.
> 
> I can join them but I think I might swap the conditions.
> 
> tom
> 
>> 
>> Thanks,
>> Vladimir
>> 
>> Tom Rodriguez wrote:
>>> http://cr.openjdk.java.net/~never/7045514
>>> 2389 lines changed: 1833 ins; 363 del; 193 mod; 46455 unchg
>>> 7045514: SPARC assembly code for JSR 292 ricochet frames
>>> Reviewed-by:
>>> This is the complete support for Ricochet frames on sparc.  Christian
>>> did all the work and testing and I just did some final testing and bug
>>> fixing.
>>> A potential issue with checkcasts reusing locals in
>>> methodHandleWalk.cpp was fixed.  Comments weren't being transferred
>>> onto the MethodHandlesAdapterBlob.  A derived oop issue was found
>>> where an assert was complaining that an offset was too large but
>>> there's no real restriction on the offset of derived oops so I
>>> disabled the assert.  ResourceMarks were added in verification logic.
>>> A verify_vmargslot call was verifying against the wrong signature
>>> resulting in occasional incorrect exceptions.  I updated the
>>> MacroAssembler::debug assertion messages to include the passed in
>>> message.  Many of blob declarations were moved into shared code so
>>> that we don't have to replicate code.  Some x86 method handles code
>>> was changed to make signatures match.
>>> Currently it passes all the jdk regression tests on sparc but I can't
>>> run any of the others because of version mismatches between the JDK
>>> and the tests.  Earlier versions ran those as well they had
>>> previously.  I also ran the jruby tests and those seemed clean as well.
> 



More information about the hotspot-compiler-dev mailing list