comparison src/cpu/x86/vm/templateInterpreter_x86_32.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 ce0cc25bc5e2
comparison
equal deleted inserted replaced
11996:22a5aff0df0b 12010:ca0165daa6ec
1918 1918
1919 // Clear the popframe condition flag 1919 // Clear the popframe condition flag
1920 __ get_thread(thread); 1920 __ get_thread(thread);
1921 __ movl(Address(thread, JavaThread::popframe_condition_offset()), JavaThread::popframe_inactive); 1921 __ movl(Address(thread, JavaThread::popframe_condition_offset()), JavaThread::popframe_inactive);
1922 1922
1923 #if INCLUDE_JVMTI
1924 if (EnableInvokeDynamic) {
1925 Label L_done;
1926 const Register local0 = rdi;
1927
1928 __ cmpb(Address(rsi, 0), Bytecodes::_invokestatic);
1929 __ jcc(Assembler::notEqual, L_done);
1930
1931 // The member name argument must be restored if _invokestatic is re-executed after a PopFrame call.
1932 // Detect such a case in the InterpreterRuntime function and return the member name argument, or NULL.
1933
1934 __ get_method(rdx);
1935 __ movptr(rax, Address(local0, 0));
1936 __ call_VM(rax, CAST_FROM_FN_PTR(address, InterpreterRuntime::member_name_arg_or_null), rax, rdx, rsi);
1937
1938 __ testptr(rax, rax);
1939 __ jcc(Assembler::zero, L_done);
1940
1941 __ movptr(Address(rbx, 0), rax);
1942 __ bind(L_done);
1943 }
1944 #endif // INCLUDE_JVMTI
1945
1923 __ dispatch_next(vtos); 1946 __ dispatch_next(vtos);
1924 // end of PopFrame support 1947 // end of PopFrame support
1925 1948
1926 Interpreter::_remove_activation_entry = __ pc(); 1949 Interpreter::_remove_activation_entry = __ pc();
1927 1950