review for 7045514: SPARC assembly code for JSR 292 ricochet	frames
    John Rose 
    john.r.rose at oracle.com
       
    Wed Jun  1 19:19:23 PDT 2011
    
    
  
On Jun 1, 2011, at 6:15 PM, Vladimir Kozlov wrote:
> Christian is hero to write all this :)
I agree.  :-)
> MethodHandles::verify_stack_move() has commented code. Should UNREASONABLE_STACK_MOVE depends on LP64?
It could.  Tom writes this: // extra-large, XXX large enough?
The key idea is that the most a MH can move the SP is by up to 255 argument positions, assuming an extreme spread or collect operation.
Since an argument is 4 or 8 bytes, we round up and get the constant.  Could also use something like (MAX_ARITY+FENCE_POST_ERROR)*stackElementSize, but that seems like overkill to me.  The idea is to defend (partially) against garbage values that move the SP by large leaps.
> 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.
Remember that it's also helpful, when reading the code, to see both cases together (constant/nonconstant).  Either way is fine with me.
(I agree with your other points.)
-- John
    
    
More information about the hotspot-compiler-dev
mailing list