< prev index next >

src/hotspot/cpu/x86/templateInterpreterGenerator_x86.cpp

Print this page
rev 50307 : [mq]: cont

*** 36,45 **** --- 36,46 ---- #include "oops/method.hpp" #include "oops/oop.inline.hpp" #include "prims/jvmtiExport.hpp" #include "prims/jvmtiThreadState.hpp" #include "runtime/arguments.hpp" + #include "runtime/continuation.hpp" #include "runtime/deoptimization.hpp" #include "runtime/frame.inline.hpp" #include "runtime/sharedRuntime.hpp" #include "runtime/stubRoutines.hpp" #include "runtime/synchronizer.hpp"
*** 171,182 **** --- 172,188 ---- __ jump(ExternalAddress(Interpreter::throw_exception_entry())); return entry; } address TemplateInterpreterGenerator::generate_return_entry_for(TosState state, int step, size_t index_size) { + return generate_return_entry_for(state, step, index_size, false); + } + + address TemplateInterpreterGenerator::generate_return_entry_for(TosState state, int step, size_t index_size, bool X) { address entry = __ pc(); + // if(X) __ stop("XXXXXXXX 000"); #ifndef _LP64 #ifdef COMPILER2 // The FPU stack is clean if UseSSE >= 2 but must be cleaned in other cases if ((state == ftos && UseSSE < 1) || (state == dtos && UseSSE < 2)) { for (int i = 1; i < 8; i++) {
*** 197,214 **** --- 203,226 ---- } else if (state == dtos) { __ MacroAssembler::verify_FPU(UseSSE >= 2 ? 0 : 1, "generate_return_entry_for in interpreter"); } #endif // _LP64 + // if(X) __ stop("XXXXXXXX 111"); + // Restore stack bottom in case i2c adjusted stack __ movptr(rsp, Address(rbp, frame::interpreter_frame_last_sp_offset * wordSize)); // and NULL it as marker that esp is now tos until next java call __ movptr(Address(rbp, frame::interpreter_frame_last_sp_offset * wordSize), (int32_t)NULL_WORD); + // if(X) __ stop("XXXXXXXX 222"); + __ restore_bcp(); __ restore_locals(); + // if(X) __ stop("XXXXXXXX 333"); // rbcp = r13 locals = r14 + if (state == atos) { Register mdp = rbx; Register tmp = rcx; __ profile_return_type(mdp, rax, tmp); }
*** 230,239 **** --- 242,253 ---- if (JvmtiExport::can_force_early_return()) { NOT_LP64(__ get_thread(java_thread)); __ check_and_handle_earlyret(java_thread); } + if(X) __ stop("XXXXXXXX 444"); + __ dispatch_next(state, step); return entry; }
*** 693,702 **** --- 707,774 ---- __ movptr(Address(rsp, 0), rsp); // set expression stack bottom } // End of helpers + address TemplateInterpreterGenerator::generate_Continuation_runLevel_entry(void) { + address entry = __ pc(); + + __ movl(rax, 0); + __ ret(0); + + return entry; + } + + // return current sp + address TemplateInterpreterGenerator::generate_Continuation_getSP_entry(void) { + address entry = __ pc(); + + __ lea(rax, Address(rsp, wordSize)); // skip return address + __ ret(0); + + return entry; + } + + // return current fp + address TemplateInterpreterGenerator::generate_Continuation_getFP_entry(void) { + address entry = __ pc(); + + __ movptr(rax, rbp); + __ ret(0); + + return entry; + } + + // return current pc + address TemplateInterpreterGenerator::generate_Continuation_getPC_entry(void) { + address entry = __ pc(); + + __ movptr(rax, Address(rsp, 0)); + __ ret(0); + + return entry; + } + + address TemplateInterpreterGenerator::generate_Continuation_doYield_entry(void) { + address entry = __ pc(); + assert(StubRoutines::cont_doYield() != NULL, "stub not yet generated"); + + __ movl(c_rarg0, Address(rsp, wordSize)); // scopes + __ jump(RuntimeAddress(CAST_FROM_FN_PTR(address, StubRoutines::cont_doYield()))); + + return entry; + } + + address TemplateInterpreterGenerator::generate_Continuation_doContinue_entry(void) { + address entry = __ pc(); + assert(StubRoutines::cont_thaw() != NULL, "stub not yet generated"); + + __ jump(RuntimeAddress(CAST_FROM_FN_PTR(address, StubRoutines::cont_thaw()))); + + return entry; + } + // Method entry for java.lang.ref.Reference.get. address TemplateInterpreterGenerator::generate_Reference_get_entry(void) { // Code: _aload_0, _getfield, _areturn // parameter size = 1 //
*** 1335,1345 **** address TemplateInterpreterGenerator::generate_normal_entry(bool synchronized) { // determine code generation flags bool inc_counter = UseCompiler || CountCompiledCalls || LogTouchedMethods; // ebx: Method* ! // rbcp: sender sp address entry_point = __ pc(); const Address constMethod(rbx, Method::const_offset()); const Address access_flags(rbx, Method::access_flags_offset()); const Address size_of_parameters(rdx, --- 1407,1417 ---- address TemplateInterpreterGenerator::generate_normal_entry(bool synchronized) { // determine code generation flags bool inc_counter = UseCompiler || CountCompiledCalls || LogTouchedMethods; // ebx: Method* ! // rbcp: sender sp (set in InterpreterMacroAssembler::prepare_to_jump_from_interpreted / generate_call_stub) address entry_point = __ pc(); const Address constMethod(rbx, Method::const_offset()); const Address access_flags(rbx, Method::access_flags_offset()); const Address size_of_parameters(rdx,
< prev index next >