< prev index next >

src/cpu/x86/vm/templateTable_x86.cpp

Print this page

        

*** 3925,3934 **** --- 3925,3935 ---- if (UseTLAB || Universe::heap()->supports_inline_contig_alloc()) { // The object is initialized before the header. If the object size is // zero, go directly to the header initialization. __ bind(initialize_object); + __ movq(rbx, rdx); // Save the size for HeapMonitoring __ decrement(rdx, sizeof(oopDesc)); __ jcc(Assembler::zero, initialize_header); // Initialize topmost object field, divide rdx by 8, check if odd and // test if zero.
*** 3955,3964 **** --- 3956,3969 ---- __ jcc(Assembler::notZero, loop); } // initialize object header only. __ bind(initialize_header); + + // Restore size for HeapMonitoring + __ movq(rdx, rbx); + if (UseBiasedLocking) { __ pop(rcx); // get saved klass back in the register. __ movptr(rbx, Address(rcx, Klass::prototype_header_offset())); __ movptr(Address(rax, oopDesc::mark_offset_in_bytes ()), rbx); } else {
*** 3975,3988 **** { SkipIfEqual skip_if(_masm, &DTraceAllocProbes, 0); // Trigger dtrace event for fastpath __ push(atos); __ call_VM_leaf( ! CAST_FROM_FN_PTR(address, SharedRuntime::dtrace_object_alloc), rax); __ pop(atos); } __ jmp(done); } // slow case __ bind(slow_case); --- 3980,4003 ---- { SkipIfEqual skip_if(_masm, &DTraceAllocProbes, 0); // Trigger dtrace event for fastpath __ push(atos); __ call_VM_leaf( ! CAST_FROM_FN_PTR(address, SharedRuntime::dtrace_object_alloc), ! rax, rdx); __ pop(atos); } + HEAP_MONITORING(_masm, noreg, rdx, 0, rax, rcx, noreg, \ + { \ + __ push(atos); \ + __ call_VM_leaf( \ + CAST_FROM_FN_PTR(address, HeapMonitoring::object_alloc), \ + rax, rdx); \ + __ pop(atos); \ + }); + __ jmp(done); } // slow case __ bind(slow_case);
< prev index next >