Mercurial > hg > truffle
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 |