src/cpu/x86/vm/templateInterpreter_x86_32.cpp

changeset 5496
ca0165daa6ec
parent 5353
b800986664f4
child 5921
ce0cc25bc5e2
     1.1 --- a/src/cpu/x86/vm/templateInterpreter_x86_32.cpp	Tue Aug 06 14:28:48 2013 +0400
     1.2 +++ b/src/cpu/x86/vm/templateInterpreter_x86_32.cpp	Tue Aug 06 16:33:59 2013 -0700
     1.3 @@ -1920,6 +1920,29 @@
     1.4    __ get_thread(thread);
     1.5    __ movl(Address(thread, JavaThread::popframe_condition_offset()), JavaThread::popframe_inactive);
     1.6  
     1.7 +#if INCLUDE_JVMTI
     1.8 +  if (EnableInvokeDynamic) {
     1.9 +    Label L_done;
    1.10 +    const Register local0 = rdi;
    1.11 +
    1.12 +    __ cmpb(Address(rsi, 0), Bytecodes::_invokestatic);
    1.13 +    __ jcc(Assembler::notEqual, L_done);
    1.14 +
    1.15 +    // The member name argument must be restored if _invokestatic is re-executed after a PopFrame call.
    1.16 +    // Detect such a case in the InterpreterRuntime function and return the member name argument, or NULL.
    1.17 +
    1.18 +    __ get_method(rdx);
    1.19 +    __ movptr(rax, Address(local0, 0));
    1.20 +    __ call_VM(rax, CAST_FROM_FN_PTR(address, InterpreterRuntime::member_name_arg_or_null), rax, rdx, rsi);
    1.21 +
    1.22 +    __ testptr(rax, rax);
    1.23 +    __ jcc(Assembler::zero, L_done);
    1.24 +
    1.25 +    __ movptr(Address(rbx, 0), rax);
    1.26 +    __ bind(L_done);
    1.27 +  }
    1.28 +#endif // INCLUDE_JVMTI
    1.29 +
    1.30    __ dispatch_next(vtos);
    1.31    // end of PopFrame support
    1.32  

mercurial