src/cpu/x86/vm/interp_masm_x86_64.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File
*** old/src/cpu/x86/vm/interp_masm_x86_64.cpp	Mon Mar  3 22:46:20 2014
--- new/src/cpu/x86/vm/interp_masm_x86_64.cpp	Mon Mar  3 22:46:20 2014

*** 269,292 **** --- 269,278 ---- // skip past the header addptr(cache, in_bytes(ConstantPoolCache::base_offset())); addptr(cache, tmp); // construct pointer to cache entry } void InterpreterMacroAssembler::get_method_counters(Register method, Register mcs, Label& skip) { Label has_counters; movptr(mcs, Address(method, Method::method_counters_offset())); testptr(mcs, mcs); jcc(Assembler::notZero, has_counters); call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::build_method_counters), method); movptr(mcs, Address(method,Method::method_counters_offset())); testptr(mcs, mcs); jcc(Assembler::zero, skip); // No MethodCounters allocated, OutOfMemory bind(has_counters); } // Load object from cpool->resolved_references(index) void InterpreterMacroAssembler::load_resolved_reference_at_index( Register result, Register index) { assert_different_registers(result, index); // convert from field index to resolved_references() index and from
*** 674,683 **** --- 660,684 ---- mov(rsp, rbx); // set sp to sender sp } #endif // C_INTERP + void InterpreterMacroAssembler::get_method_counters(Register method, + Register mcs, Label& skip) { + Label has_counters; + movptr(mcs, Address(method, Method::method_counters_offset())); + testptr(mcs, mcs); + jcc(Assembler::notZero, has_counters); + call_VM(noreg, CAST_FROM_FN_PTR(address, + InterpreterRuntime::build_method_counters), method); + movptr(mcs, Address(method,Method::method_counters_offset())); + testptr(mcs, mcs); + jcc(Assembler::zero, skip); // No MethodCounters allocated, OutOfMemory + bind(has_counters); + } + + // Lock object // // Args: // c_rarg1: BasicObjectLock to be used for locking //
*** 1421,1430 **** --- 1422,1445 ---- } } void InterpreterMacroAssembler::verify_FPU(int stack_depth, TosState state) { } + + // Jump if ((*counter_addr += increment) & mask) satisfies the condition. + void InterpreterMacroAssembler::increment_mask_and_jump(Address counter_addr, + int increment, int mask, + Register scratch, bool preloaded, + Condition cond, Label* where) { + if (!preloaded) { + movl(scratch, counter_addr); + } + 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
*** 1489,1506 **** --- 1504,1508 ---- r15_thread, c_rarg1); NOT_CC_INTERP(pop(state)); } } // Jump if ((*counter_addr += increment) & mask) satisfies the condition. void InterpreterMacroAssembler::increment_mask_and_jump(Address counter_addr, int increment, int mask, Register scratch, bool preloaded, Condition cond, Label* where) { if (!preloaded) { movl(scratch, counter_addr); } incrementl(scratch, increment); movl(counter_addr, scratch); andl(scratch, mask); jcc(cond, *where); }

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