src/cpu/x86/vm/templateTable_x86_32.cpp

changeset 4133
f6b0eb4e44cf
parent 4052
75f33eecc1b3
child 4151
6e5a59a8e4a7
     1.1 --- a/src/cpu/x86/vm/templateTable_x86_32.cpp	Fri Sep 28 14:36:20 2012 -0700
     1.2 +++ b/src/cpu/x86/vm/templateTable_x86_32.cpp	Mon Oct 01 14:50:10 2012 -0700
     1.3 @@ -2139,7 +2139,7 @@
     1.4    const int index_offset = in_bytes(ConstantPoolCache::base_offset() +
     1.5                                      ConstantPoolCacheEntry::f2_offset());
     1.6  
     1.7 -    size_t index_size = (is_invokedynamic ? sizeof(u4) : sizeof(u2));
     1.8 +  size_t index_size = (is_invokedynamic ? sizeof(u4) : sizeof(u2));
     1.9    resolve_cache_and_index(byte_no, cache, index, index_size);
    1.10      __ movptr(method, Address(cache, index, Address::times_ptr, method_offset));
    1.11  
    1.12 @@ -2876,6 +2876,7 @@
    1.13      // since the parameter_size includes it.
    1.14      __ push(rbx);
    1.15      __ mov(rbx, index);
    1.16 +    assert(ConstantPoolCacheEntry::_indy_resolved_references_appendix_offset == 0, "appendix expected at index+0");
    1.17      __ load_resolved_reference_at_index(index, rbx);
    1.18      __ pop(rbx);
    1.19      __ push(index);  // push appendix (MethodType, CallSite, etc.)
    1.20 @@ -3093,8 +3094,8 @@
    1.21  void TemplateTable::invokehandle(int byte_no) {
    1.22    transition(vtos, vtos);
    1.23    assert(byte_no == f1_byte, "use this argument");
    1.24 -  const Register rbx_method = rbx;  // (from f2)
    1.25 -  const Register rax_mtype  = rax;  // (from f1)
    1.26 +  const Register rbx_method = rbx;
    1.27 +  const Register rax_mtype  = rax;
    1.28    const Register rcx_recv   = rcx;
    1.29    const Register rdx_flags  = rdx;
    1.30  
    1.31 @@ -3104,13 +3105,14 @@
    1.32      return;
    1.33    }
    1.34  
    1.35 -  prepare_invoke(byte_no,
    1.36 -                 rbx_method, rax_mtype,  // get f2 Method*, f1 MethodType
    1.37 -                 rcx_recv);
    1.38 +  prepare_invoke(byte_no, rbx_method, rax_mtype, rcx_recv);
    1.39    __ verify_method_ptr(rbx_method);
    1.40    __ verify_oop(rcx_recv);
    1.41    __ null_check(rcx_recv);
    1.42  
    1.43 +  // rax: MethodType object (from cpool->resolved_references[f1], if necessary)
    1.44 +  // rbx: MH.invokeExact_MT method (from f2)
    1.45 +
    1.46    // Note:  rax_mtype is already pushed (if necessary) by prepare_invoke
    1.47  
    1.48    // FIXME: profile the LambdaForm also
    1.49 @@ -3140,7 +3142,7 @@
    1.50  
    1.51    prepare_invoke(byte_no, rbx_method, rax_callsite);
    1.52  
    1.53 -  // rax: CallSite object (from cpool->resolved_references[])
    1.54 +  // rax: CallSite object (from cpool->resolved_references[f1])
    1.55    // rbx: MH.linkToCallSite method (from f2)
    1.56  
    1.57    // Note:  rax_callsite is already pushed by prepare_invoke

mercurial