src/cpu/x86/vm/interp_masm_x86.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File
*** old/src/cpu/x86/vm/interp_masm_x86.cpp	Thu Dec 17 17:52:04 2015
--- new/src/cpu/x86/vm/interp_masm_x86.cpp	Thu Dec 17 17:52:04 2015

*** 43,53 **** --- 43,52 ---- void InterpreterMacroAssembler::jump_to_entry(address entry) { assert(entry, "Entry must have been generated by now"); jump(RuntimeAddress(entry)); } #ifndef CC_INTERP void InterpreterMacroAssembler::profile_obj_type(Register obj, const Address& mdo_addr) { Label update, next, none; verify_oop(obj);
*** 244,263 **** --- 243,253 ---- jcc(Assembler::positive, loop); bind(profile_continue); } } #endif #ifdef CC_INTERP void InterpreterMacroAssembler::get_method(Register reg) { movptr(reg, Address(rbp, -(sizeof(BytecodeInterpreter) + 2 * wordSize))); movptr(reg, Address(reg, byte_offset_of(BytecodeInterpreter, _method))); } #endif // CC_INTERP #ifndef CC_INTERP void InterpreterMacroAssembler::call_VM_leaf_base(address entry_point, int number_of_arguments) { // interpreter specific // // Note: No need to save/restore bcp & locals registers
*** 1044,1054 **** --- 1034,1043 ---- } leave(); // remove frame anchor pop(ret_addr); // get return address mov(rsp, rbx); // set sp to sender sp } #endif // !CC_INTERP void InterpreterMacroAssembler::get_method_counters(Register method, Register mcs, Label& skip) { Label has_counters; movptr(mcs, Address(method, Method::method_counters_offset()));
*** 1225,1235 **** --- 1214,1224 ---- bind(done); restore_bcp(); } } #ifndef CC_INTERP + void InterpreterMacroAssembler::test_method_data_pointer(Register mdp, Label& zero_continue) { assert(ProfileInterpreter, "must be profiling interpreter"); movptr(mdp, Address(rbp, frame::interpreter_frame_mdp_offset * wordSize)); testptr(mdp, mdp);
*** 1884,1894 **** --- 1873,1882 ---- incrementl(scratch, increment); movl(counter_addr, scratch); andl(scratch, mask); jcc(cond, *where); } #endif // CC_INTERP void InterpreterMacroAssembler::notify_method_entry() { // Whenever JVMTI is interp_only_mode, method entry/exit events are sent to // track stack depth. If it is possible to enter interp_only_mode we add // the code to check if the event should be sent.
*** 1936,1963 **** --- 1924,1950 ---- // Note: frame::interpreter_frame_result has a dependency on how the // method result is saved across the call to post_method_exit. If this // is changed then the interpreter_frame_result implementation will // need to be updated too. // For c++ interpreter the result is always stored at a known location in the frame // template interpreter will leave it on the top of the stack. NOT_CC_INTERP(push(state);) + // template interpreter will leave the result on the top of the stack. + push(state); NOT_LP64(get_thread(rthread);) movl(rdx, Address(rthread, JavaThread::interp_only_mode_offset())); testl(rdx, rdx); jcc(Assembler::zero, L); call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::post_method_exit)); bind(L); ! NOT_CC_INTERP(pop(state)); } { SkipIfEqual skip(this, &DTraceMethodProbes, false); ! NOT_CC_INTERP(push(state)); NOT_LP64(get_thread(rthread);) get_method(rarg); call_VM_leaf(CAST_FROM_FN_PTR(address, SharedRuntime::dtrace_method_exit), rthread, rarg); ! NOT_CC_INTERP(pop(state)); } }

src/cpu/x86/vm/interp_masm_x86.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File