< prev index next >
src/cpu/x86/vm/c1_MacroAssembler_x86.cpp
Print this page
@@ -21,10 +21,11 @@
* questions.
*
*/
#include "precompiled.hpp"
+#include "assembler_x86.hpp"
#include "c1/c1_MacroAssembler.hpp"
#include "c1/c1_Runtime1.hpp"
#include "classfile/systemDictionary.hpp"
#include "gc/shared/collectedHeap.hpp"
#include "interpreter/interpreter.hpp"
@@ -199,10 +200,14 @@
assert(header_size >= 0 && object_size >= header_size, "illegal sizes");
try_allocate(obj, noreg, object_size * BytesPerWord, t1, t2, slow_case);
initialize_object(obj, klass, noreg, object_size * HeapWordSize, t1, t2, UseTLAB);
+
+ HEAP_MONITORING(this, noreg, noreg, object_size * HeapWordSize, obj,
+ t1, t2, call(RuntimeAddress(Runtime1::entry_for(
+ Runtime1::heap_object_sample_id))););
}
void C1_MacroAssembler::initialize_object(Register obj, Register klass, Register var_size_in_bytes, int con_size_in_bytes, Register t1, Register t2, bool is_tlab_allocated) {
assert((con_size_in_bytes & MinObjAlignmentInBytesMask) == 0,
"con_size_in_bytes is not multiple of alignment");
@@ -275,17 +280,23 @@
initialize_header(obj, klass, len, t1, t2);
// clear rest of allocated space
const Register len_zero = len;
+ // Initialize body destroys arr_size so remember it.
+ push(arr_size);
initialize_body(obj, arr_size, header_size * BytesPerWord, len_zero);
+ pop(arr_size);
if (CURRENT_ENV->dtrace_alloc_probes()) {
assert(obj == rax, "must be");
call(RuntimeAddress(Runtime1::entry_for(Runtime1::dtrace_object_alloc_id)));
}
+ HEAP_MONITORING(this, noreg, arr_size, 0, obj, t1, noreg,
+ call(RuntimeAddress(Runtime1::entry_for(
+ Runtime1::heap_object_sample_id))););
verify_oop(obj);
}
< prev index next >