src/cpu/x86/vm/templateTable_x86_64.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File hotspot Cdiff src/cpu/x86/vm/templateTable_x86_64.cpp

src/cpu/x86/vm/templateTable_x86_64.cpp

Print this page
rev 1195 : 6587322: dtrace probe object__alloc doesn't fire in some situations on amd64
Summary: Fix misplaced probe point
Reviewed-by:
Contributed-by: neojia@gmail.com

*** 3236,3257 **** (intptr_t) markOopDesc::prototype()); // header (address 0x1) } __ xorl(rcx, rcx); // use zero reg to clear memory (shorter code) __ store_klass_gap(rax, rcx); // zero klass gap for compressed oops __ store_klass(rax, rsi); // store klass last - __ jmp(done); - } { SkipIfEqual skip(_masm, &DTraceAllocProbes, false); // Trigger dtrace event for fastpath __ push(atos); // save the return value __ call_VM_leaf( CAST_FROM_FN_PTR(address, SharedRuntime::dtrace_object_alloc), rax); __ pop(atos); // restore the return value } // slow case __ bind(slow_case); __ get_constant_pool(c_rarg1); __ get_unsigned_2_byte_index_at_bcp(c_rarg2, 1); call_VM(rax, CAST_FROM_FN_PTR(address, InterpreterRuntime::_new), c_rarg1, c_rarg2); --- 3236,3259 ---- (intptr_t) markOopDesc::prototype()); // header (address 0x1) } __ xorl(rcx, rcx); // use zero reg to clear memory (shorter code) __ store_klass_gap(rax, rcx); // zero klass gap for compressed oops __ store_klass(rax, rsi); // store klass last { SkipIfEqual skip(_masm, &DTraceAllocProbes, false); // Trigger dtrace event for fastpath __ push(atos); // save the return value __ call_VM_leaf( CAST_FROM_FN_PTR(address, SharedRuntime::dtrace_object_alloc), rax); __ pop(atos); // restore the return value + } + __ jmp(done); + } + // slow case __ bind(slow_case); __ get_constant_pool(c_rarg1); __ get_unsigned_2_byte_index_at_bcp(c_rarg2, 1); call_VM(rax, CAST_FROM_FN_PTR(address, InterpreterRuntime::_new), c_rarg1, c_rarg2);
src/cpu/x86/vm/templateTable_x86_64.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File