comparison src/cpu/sparc/vm/templateInterpreter_sparc.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 46c544b8fbfc
children 3cce976666d9 bd3237e0e18d
comparison
equal deleted inserted replaced
11996:22a5aff0df0b 12010:ca0165daa6ec
1885 // The method data pointer was incremented already during 1885 // The method data pointer was incremented already during
1886 // call profiling. We have to restore the mdp for the current bcp. 1886 // call profiling. We have to restore the mdp for the current bcp.
1887 if (ProfileInterpreter) { 1887 if (ProfileInterpreter) {
1888 __ set_method_data_pointer_for_bcp(); 1888 __ set_method_data_pointer_for_bcp();
1889 } 1889 }
1890
1891 #if INCLUDE_JVMTI
1892 if (EnableInvokeDynamic) {
1893 Label L_done;
1894
1895 __ ldub(Address(Lbcp, 0), G1_scratch); // Load current bytecode
1896 __ cmp_and_br_short(G1_scratch, Bytecodes::_invokestatic, Assembler::notEqual, Assembler::pn, L_done);
1897
1898 // The member name argument must be restored if _invokestatic is re-executed after a PopFrame call.
1899 // Detect such a case in the InterpreterRuntime function and return the member name argument, or NULL.
1900
1901 __ call_VM(G1_scratch, CAST_FROM_FN_PTR(address, InterpreterRuntime::member_name_arg_or_null), I0, Lmethod, Lbcp);
1902
1903 __ br_null(G1_scratch, false, Assembler::pn, L_done);
1904 __ delayed()->nop();
1905
1906 __ st_ptr(G1_scratch, Lesp, wordSize);
1907 __ bind(L_done);
1908 }
1909 #endif // INCLUDE_JVMTI
1910
1890 // Resume bytecode interpretation at the current bcp 1911 // Resume bytecode interpretation at the current bcp
1891 __ dispatch_next(vtos); 1912 __ dispatch_next(vtos);
1892 // end of JVMTI PopFrame support 1913 // end of JVMTI PopFrame support
1893 1914
1894 Interpreter::_remove_activation_entry = __ pc(); 1915 Interpreter::_remove_activation_entry = __ pc();