comparison src/cpu/x86/vm/templateInterpreter_x86_64.cpp @ 12010:ca0165daa6ec

7187554: JSR 292: JVMTI PopFrame needs to handle appendix arguments Summary: Restore the appendix argument after PopFrame() call Reviewed-by: twisti, coleenp Contributed-by: serguei.spitsyn@oracle.com
author sspitsyn
date Tue, 06 Aug 2013 16:33:59 -0700
parents b800986664f4
children 3cce976666d9 6725044c5725
comparison
equal deleted inserted replaced
11996:22a5aff0df0b 12010:ca0165daa6ec
1927 1927
1928 // Clear the popframe condition flag 1928 // Clear the popframe condition flag
1929 __ movl(Address(r15_thread, JavaThread::popframe_condition_offset()), 1929 __ movl(Address(r15_thread, JavaThread::popframe_condition_offset()),
1930 JavaThread::popframe_inactive); 1930 JavaThread::popframe_inactive);
1931 1931
1932 #if INCLUDE_JVMTI
1933 if (EnableInvokeDynamic) {
1934 Label L_done;
1935 const Register local0 = r14;
1936
1937 __ cmpb(Address(r13, 0), Bytecodes::_invokestatic);
1938 __ jcc(Assembler::notEqual, L_done);
1939
1940 // The member name argument must be restored if _invokestatic is re-executed after a PopFrame call.
1941 // Detect such a case in the InterpreterRuntime function and return the member name argument, or NULL.
1942
1943 __ get_method(rdx);
1944 __ movptr(rax, Address(local0, 0));
1945 __ call_VM(rax, CAST_FROM_FN_PTR(address, InterpreterRuntime::member_name_arg_or_null), rax, rdx, r13);
1946
1947 __ testptr(rax, rax);
1948 __ jcc(Assembler::zero, L_done);
1949
1950 __ movptr(Address(rbx, 0), rax);
1951 __ bind(L_done);
1952 }
1953 #endif // INCLUDE_JVMTI
1954
1932 __ dispatch_next(vtos); 1955 __ dispatch_next(vtos);
1933 // end of PopFrame support 1956 // end of PopFrame support
1934 1957
1935 Interpreter::_remove_activation_entry = __ pc(); 1958 Interpreter::_remove_activation_entry = __ pc();
1936 1959