Skip to content
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
107 commits
Select commit Hold shift + click to select a range
ed03217
8305895: Implement JEP 450: Compact Object Headers (Experimental)
rkennke Aug 22, 2024
18e08c1
Add missing newline
rkennke Aug 22, 2024
1578ffa
Remove hashcode leftovers from SA
rkennke Aug 22, 2024
7009e14
Fix hash_mask_in_place in ClhsdbLongConstant test
rkennke Aug 22, 2024
5ffc582
Fix hash shift for 32 bit builds
rkennke Aug 22, 2024
eaec111
Fix bit counts in GCForwarding
rkennke Aug 22, 2024
c9e0d07
Merge remote-tracking branch 'origin/master' into JDK-8305895-v4
rkennke Sep 9, 2024
40d327c
Fix metaspace issues post JDK-8338929
tstuefe Sep 2, 2024
9652ea3
GCForwarding init, SerialGC: wrong max heap size used
tstuefe Aug 30, 2024
3aaf07a
Zero should allow LightWeight locking mode
tstuefe Aug 29, 2024
be6f395
Improve comment for CDS precalculating narrow Klass IDs
tstuefe Aug 30, 2024
bf5067e
More fixes post JDK-8338929
tstuefe Sep 2, 2024
a39e5ac
Fix merge error in ClassLoaderMetaspace::deallocate
tstuefe Sep 2, 2024
2224b93
fix merge problem in PSPromotionManager::push_objArray
tstuefe Sep 2, 2024
ecb017b
Fix TestAutoCreateSharedArchiveNoDefaultArchive
stefank Sep 2, 2024
439bbc0
Let CDS print compact headers state
stefank Sep 2, 2024
3f1d0ed
Use FLAG_SET_ERGO when turning off UseCompactObjectHeaders
stefank Sep 2, 2024
88b3709
aarch64: Fix loadNKlassCompactHeaders
xmas92 Sep 3, 2024
2bc8088
x86_64: Fix loadNKlassCompactHeaders
xmas92 Sep 3, 2024
0a10679
Cleanup markWord bits and comments
xmas92 Sep 3, 2024
8671688
Fix jdk/tools/jlink/plugins/CDSPluginTest.java
tstuefe Sep 3, 2024
e00e4f4
Fix runtime/cds/appcds/loaderConstraints/DynamicLoaderConstraintsTest…
tstuefe Sep 3, 2024
294c2ce
GC code tweaks
stefank Aug 23, 2024
015f65a
Nit in header_size
stefank Sep 3, 2024
b35d6df
Simplify arrayOopDesc::length_offset_in_bytes and oopDesc::base_offse…
stefank Sep 4, 2024
4912638
Fix compiler/c2/irTests/TestPadding.java for +COH
tstuefe Sep 9, 2024
c5a840d
Fix release build error
tstuefe Sep 2, 2024
70f492d
Try to avoid lea in loadNklass (aarch64)
rkennke Sep 9, 2024
0a9a51b
GCForwarding touch-ups
rkennke Sep 9, 2024
91bc475
Get rid of forward_safe_* methods
rkennke Sep 9, 2024
3b1b6eb
Simplify oopDesc::init_mark()
rkennke Sep 9, 2024
49017fb
Simplify getKlass() in SA
rkennke Sep 9, 2024
33cf12e
Improve initialization of mark-word in CDS ArchiveHeapWriter
rkennke Sep 9, 2024
2884499
Print as warning when UCOH doesn't match in CDS archive
rkennke Sep 9, 2024
696003c
Fix comment
rkennke Sep 10, 2024
e986d19
Rename GCForwarding -> FullGCForwarding; some touch-ups
rkennke Sep 10, 2024
c85c2ed
Improve is_oop()
rkennke Sep 10, 2024
321a44a
Various touch-ups
rkennke Sep 10, 2024
6b27782
Remove asserts in XArrayKlass::oop_oop_iterate()
rkennke Sep 10, 2024
5da250c
More touch-ups, fix Shenandoah oop iterator
rkennke Sep 10, 2024
6abda7b
Fix FullGCForwarding initialization
rkennke Sep 10, 2024
bff4dc1
Re-enable some vectorization tests
rkennke Sep 11, 2024
b6c11f7
Make is_oop() MT-safe
rkennke Sep 11, 2024
9e008ac
Revert accidental change of UCOH default
rkennke Sep 11, 2024
69f1ef1
Hide log timestamps in test to prevent false failures
robcasloz Sep 12, 2024
990926f
Various touch-ups
rkennke Sep 13, 2024
af9adf3
Merge commit '597788850041e7272a23714c05ba546ee6080856' into JDK-8305…
rkennke Sep 16, 2024
d54133a
Fixes post 8338526
tstuefe Sep 11, 2024
78d1a22
remove stray debug output
tstuefe Sep 11, 2024
2f70eb5
Rework compressedklass encoding
tstuefe Sep 12, 2024
c398b05
clarify obscure assert in metasapce setup
tstuefe Sep 13, 2024
a191abc
Fix loop on aarch64
tstuefe Sep 13, 2024
49c8754
Fix test/hotspot/jtreg/runtime/CompressedOops/CompressedClassPointer…
tstuefe Sep 13, 2024
2125cd8
Merge remote-tracking branch 'origin/master' into JDK-8305895-v4
rkennke Sep 16, 2024
194d5ab
Merge upstream up to and including 8340184
tstuefe Sep 17, 2024
6a4617b
Fixes post-8340184
tstuefe Sep 17, 2024
28a26ae
fix CompressedClassPointersEncodingScheme yet again for linux aarch64
tstuefe Sep 17, 2024
352e708
Johan review feedback
tstuefe Sep 17, 2024
612d304
CompressedKlassPointers::is_encodable shall be callable with -UseCCP
tstuefe Sep 17, 2024
bb64162
Merge remote-tracking branch 'origin/master' into JDK-8305895-v4
rkennke Sep 18, 2024
9ad2e62
JVMCI support
mur47x111 Sep 18, 2024
b25a4b6
Simplify LIR_Assembler::emit_load_klass()
rkennke Sep 19, 2024
945eb6f
review feedback
tstuefe Sep 19, 2024
0d8a923
Merge remote-tracking branch 'lilliput/JEP-450-temporary-fix-branch-2…
rkennke Sep 19, 2024
2c4a787
Improve matching of loadNKlassCompactHeaders on aarch64
rkennke Sep 20, 2024
cd69da8
Enforce lightweight locking on 32-bit platforms
rkennke Sep 25, 2024
4904d43
Allow LM_MONITOR on 32-bit platforms
rkennke Sep 25, 2024
805a4e0
Improve CollectedHeap::is_oop()
rkennke Sep 26, 2024
d48f55d
@robcasloz review comments
rkennke Sep 26, 2024
059b157
Disable TestSplitPacks::test4a, failing on aarch64
rkennke Sep 27, 2024
f00c899
Disable some vectorization tests that fail with +UCOH and UseSSE<=3
rkennke Oct 2, 2024
d2547b4
Simplify object init code in interpreter
rkennke Oct 2, 2024
aea8f00
Revert "Disable TestSplitPacks::test4a, failing on aarch64"
rkennke Oct 2, 2024
2883e7b
Merge tag 'jdk-24+18' into JDK-8305895-v4
rkennke Oct 4, 2024
119bdc5
Fix for CDSPluginTest.java
rkennke Oct 4, 2024
8742f3c
Merge remote-tracking branch 'rkennke/JDK-8305895-v4' into JDK-830589…
rkennke Oct 4, 2024
572f1ac
@stefank review comments
rkennke Oct 7, 2024
6040108
Remove unused variable
rkennke Oct 7, 2024
1ab2077
Rename nklass/nKlass
rkennke Oct 7, 2024
17f8eb5
Some more review comments/cleanups
rkennke Oct 7, 2024
f65ef5d
Fix header < 16 bytes in indexOf intrinsic, by @sviswa7
rkennke Oct 8, 2024
4d7228e
Rename nklass in x86 code
rkennke Oct 8, 2024
9b1877d
Fix comment
rkennke Oct 8, 2024
17d8367
Rename nklass in aarch64
rkennke Oct 8, 2024
0be2fc4
Re-enable indexOf intrinsic for compact headers
rkennke Oct 8, 2024
d57dbfc
Improve PSParallelCompact::fill_dense_prefix_end() even more
rkennke Oct 8, 2024
4035bb6
Fix include guards
rkennke Oct 8, 2024
b289ef8
Increase compiler code stubs size for indexOf intrinsic
rkennke Oct 8, 2024
6722f8b
PPC64 implementation of Compact Object Headers (JEP 450)
TheRealMDoerr Oct 9, 2024
86f94fe
Merge tag 'jdk-24+19' into JDK-8305895-v4
rkennke Oct 15, 2024
005498b
Fix aarch64.ad
rkennke Oct 15, 2024
1fd365d
Address comments by @vpaprotsk
rkennke Oct 16, 2024
ec42f4d
Problem-list SharedBaseAddress tests on aarch64
rkennke Oct 16, 2024
e4c0878
Remove extra sanity check
rkennke Oct 16, 2024
1b907cc
Compact header riscv (#3)
rkennke Oct 17, 2024
8c4eb6d
Fix needle copying in indexOf intrinsic for smaller headers
rkennke Oct 22, 2024
e324d95
Merge tag 'jdk-24+20' into JDK-8305895-v4
rkennke Oct 22, 2024
19d05e4
Update copyright headers
rkennke Oct 22, 2024
2bbff19
Avoid assert/endless-loop in JFR code
rkennke Oct 22, 2024
1ef6394
Update copyright
rkennke Oct 22, 2024
aadd7b8
Conditionalize platform specific parts of CompressedClassPointersEnco…
rkennke Oct 24, 2024
c2f6d20
s390 port
rkennke Oct 24, 2024
434c681
Enable riscv in CompressedClassPointersEncodingScheme test
rkennke Oct 24, 2024
b945822
Merge tag 'jdk-24+22' into JDK-8305895-v4
rkennke Nov 5, 2024
1ea4de1
Fix gen-ZGC removal
rkennke Nov 6, 2024
4d28224
Merge tag 'jdk-25+23' into JDK-8305895-v4
rkennke Nov 7, 2024
c1a6323
Merge branch 'master' into JDK-8305895-v4
rkennke Nov 7, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion make/autoconf/jdk-options.m4
Original file line number Diff line number Diff line change
Expand Up @@ -692,7 +692,8 @@ AC_DEFUN([JDKOPT_ENABLE_DISABLE_CDS_ARCHIVE_COH],
test "x$OPENJDK_TARGET_CPU" != "xaarch64" &&
test "x$OPENJDK_TARGET_CPU" != "xppc64" &&
test "x$OPENJDK_TARGET_CPU" != "xppc64le" &&
test "x$OPENJDK_TARGET_CPU" != "xriscv64"; then
test "x$OPENJDK_TARGET_CPU" != "xriscv64" &&
test "x$OPENJDK_TARGET_CPU" != "xs390x"; then
AC_MSG_RESULT([no (compact object headers not supported for this platform)])
AVAILABLE=false
else
Expand Down
27 changes: 6 additions & 21 deletions src/hotspot/cpu/s390/c1_LIRAssembler_s390.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2029,8 +2029,6 @@ void LIR_Assembler::emit_arraycopy(LIR_OpArrayCopy* op) {

Address src_length_addr = Address(src, arrayOopDesc::length_offset_in_bytes());
Address dst_length_addr = Address(dst, arrayOopDesc::length_offset_in_bytes());
Address src_klass_addr = Address(src, oopDesc::klass_offset_in_bytes());
Address dst_klass_addr = Address(dst, oopDesc::klass_offset_in_bytes());

// Length and pos's are all sign extended at this point on 64bit.

Expand Down Expand Up @@ -2094,13 +2092,7 @@ void LIR_Assembler::emit_arraycopy(LIR_OpArrayCopy* op) {
// We don't know the array types are compatible.
if (basic_type != T_OBJECT) {
// Simple test for basic type arrays.
if (UseCompressedClassPointers) {
__ z_l(tmp, src_klass_addr);
__ z_c(tmp, dst_klass_addr);
} else {
__ z_lg(tmp, src_klass_addr);
__ z_cg(tmp, dst_klass_addr);
}
__ cmp_klasses_from_objects(src, dst, tmp, Z_R1_scratch);
__ branch_optimized(Assembler::bcondNotEqual, *stub->entry());
} else {
// For object arrays, if src is a sub class of dst then we can
Expand Down Expand Up @@ -2234,15 +2226,13 @@ void LIR_Assembler::emit_arraycopy(LIR_OpArrayCopy* op) {
}

if (basic_type != T_OBJECT) {
if (UseCompressedClassPointers) { __ z_c (tmp, dst_klass_addr); }
else { __ z_cg(tmp, dst_klass_addr); }
__ cmp_klass(tmp, dst, Z_R1_scratch);
__ branch_optimized(Assembler::bcondNotEqual, halt);
if (UseCompressedClassPointers) { __ z_c (tmp, src_klass_addr); }
else { __ z_cg(tmp, src_klass_addr); }

__ cmp_klass(tmp, src, Z_R1_scratch);
__ branch_optimized(Assembler::bcondEqual, known_ok);
} else {
if (UseCompressedClassPointers) { __ z_c (tmp, dst_klass_addr); }
else { __ z_cg(tmp, dst_klass_addr); }
__ cmp_klass(tmp, dst, Z_R1_scratch);
__ branch_optimized(Assembler::bcondEqual, known_ok);
__ compareU64_and_branch(src, dst, Assembler::bcondEqual, known_ok);
}
Expand Down Expand Up @@ -2737,12 +2727,7 @@ void LIR_Assembler::emit_load_klass(LIR_OpLoadKlass* op) {
add_debug_info_for_null_check_here(info);
}

if (UseCompressedClassPointers) {
__ z_llgf(result, Address(obj, oopDesc::klass_offset_in_bytes()));
__ decode_klass_not_null(result);
} else {
__ z_lg(result, Address(obj, oopDesc::klass_offset_in_bytes()));
}
__ load_klass(result, obj);
}
void LIR_Assembler::emit_profile_call(LIR_OpProfileCall* op) {
ciMethod* method = op->profiled_method();
Expand Down
14 changes: 9 additions & 5 deletions src/hotspot/cpu/s390/c1_MacroAssembler_s390.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -173,17 +173,21 @@ void C1_MacroAssembler::try_allocate(

void C1_MacroAssembler::initialize_header(Register obj, Register klass, Register len, Register Rzero, Register t1) {
assert_different_registers(obj, klass, len, t1, Rzero);
// This assumes that all prototype bits fit in an int32_t.
load_const_optimized(t1, (intx)markWord::prototype().value());
z_stg(t1, Address(obj, oopDesc::mark_offset_in_bytes()));
if (UseCompactObjectHeaders) {
z_lg(t1, Address(klass, in_bytes(Klass::prototype_header_offset())));
z_stg(t1, Address(obj, oopDesc::mark_offset_in_bytes()));
} else {
load_const_optimized(t1, (intx)markWord::prototype().value());
z_stg(t1, Address(obj, oopDesc::mark_offset_in_bytes()));
store_klass(klass, obj, t1);
}

if (len->is_valid()) {
// Length will be in the klass gap, if one exists.
z_st(len, Address(obj, arrayOopDesc::length_offset_in_bytes()));
} else if (UseCompressedClassPointers) {
} else if (UseCompressedClassPointers && !UseCompactObjectHeaders) {
store_klass_gap(Rzero, obj); // Zero klass gap for compressed oops.
}
store_klass(klass, obj, t1);
}

void C1_MacroAssembler::initialize_body(Register objectFields, Register len_in_bytes, Register Rzero) {
Expand Down
7 changes: 7 additions & 0 deletions src/hotspot/cpu/s390/c2_MacroAssembler_s390.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,13 @@ void C2_MacroAssembler::fast_unlock_lightweight(Register obj, Register box, Regi
compiler_fast_unlock_lightweight_object(obj, box, temp1, temp2);
}

void C2_MacroAssembler::load_narrow_klass_compact_c2(Register dst, Address src) {
// The incoming address is pointing into obj-start + klass_offset_in_bytes. We need to extract
// obj-start, so that we can load from the object's mark-word instead.
z_lg(dst, src.plus_disp(-oopDesc::klass_offset_in_bytes()));
z_srlg(dst, dst, markWord::klass_shift); // TODO: could be z_sra
}

//------------------------------------------------------
// Special String Intrinsics. Implementation
//------------------------------------------------------
Expand Down
2 changes: 2 additions & 0 deletions src/hotspot/cpu/s390/c2_MacroAssembler_s390.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@
void fast_lock_lightweight(Register obj, Register box, Register temp1, Register temp2);
void fast_unlock_lightweight(Register obj, Register box, Register temp1, Register temp2);

void load_narrow_klass_compact_c2(Register dst, Address src);

//-------------------------------------------
// Special String Intrinsics Implementation.
//-------------------------------------------
Expand Down
69 changes: 65 additions & 4 deletions src/hotspot/cpu/s390/macroAssembler_s390.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2160,7 +2160,16 @@ void MacroAssembler::call_VM_leaf_base(address entry_point) {
}

int MacroAssembler::ic_check_size() {
return 30 + (ImplicitNullChecks ? 0 : 6);
int ic_size = 24;
if (!ImplicitNullChecks) {
ic_size += 6;
}
if (UseCompactObjectHeaders) {
ic_size += 12;
} else {
ic_size += 6; // either z_llgf or z_lg
}
return ic_size;
}

int MacroAssembler::ic_check(int end_alignment) {
Expand All @@ -2181,7 +2190,9 @@ int MacroAssembler::ic_check(int end_alignment) {
z_cgij(R2_receiver, 0, Assembler::bcondEqual, failure);
}

if (UseCompressedClassPointers) {
if (UseCompactObjectHeaders) {
load_narrow_klass_compact(R1_scratch, R2_receiver);
} else if (UseCompressedClassPointers) {
z_llgf(R1_scratch, Address(R2_receiver, oopDesc::klass_offset_in_bytes()));
} else {
z_lg(R1_scratch, Address(R2_receiver, oopDesc::klass_offset_in_bytes()));
Expand Down Expand Up @@ -4064,17 +4075,66 @@ void MacroAssembler::load_klass(Register klass, Address mem) {
}
}

// Loads the obj's Klass* into dst.
// Input:
// src - the oop we want to load the klass from.
// dst - output nklass.
void MacroAssembler::load_narrow_klass_compact(Register dst, Register src) {
BLOCK_COMMENT("load_narrow_klass_compact {");
assert(UseCompactObjectHeaders, "expects UseCompactObjectHeaders");
z_lg(dst, Address(src, oopDesc::mark_offset_in_bytes()));
z_srlg(dst, dst, markWord::klass_shift);
BLOCK_COMMENT("} load_narrow_klass_compact");
}

void MacroAssembler::cmp_klass(Register klass, Register obj, Register tmp) {
BLOCK_COMMENT("cmp_klass {");
assert_different_registers(obj, klass, tmp);
if (UseCompactObjectHeaders) {
assert(tmp != noreg, "required");
assert_different_registers(klass, obj, tmp);
load_narrow_klass_compact(tmp, obj);
z_cr(klass, tmp);
} else if (UseCompressedClassPointers) {
z_c(klass, Address(obj, oopDesc::klass_offset_in_bytes()));
} else {
z_cg(klass, Address(obj, oopDesc::klass_offset_in_bytes()));
}
BLOCK_COMMENT("} cmp_klass");
}

void MacroAssembler::cmp_klasses_from_objects(Register obj1, Register obj2, Register tmp1, Register tmp2) {
BLOCK_COMMENT("cmp_klasses_from_objects {");
if (UseCompactObjectHeaders) {
assert(tmp1 != noreg && tmp2 != noreg, "required");
assert_different_registers(obj1, obj2, tmp1, tmp2);
load_narrow_klass_compact(tmp1, obj1);
load_narrow_klass_compact(tmp2, obj2);
z_cr(tmp1, tmp2);
} else if (UseCompressedClassPointers) {
z_l(tmp1, Address(obj1, oopDesc::klass_offset_in_bytes()));
z_c(tmp1, Address(obj2, oopDesc::klass_offset_in_bytes()));
} else {
z_lg(tmp1, Address(obj1, oopDesc::klass_offset_in_bytes()));
z_cg(tmp1, Address(obj2, oopDesc::klass_offset_in_bytes()));
}
BLOCK_COMMENT("} cmp_klasses_from_objects");
}

void MacroAssembler::load_klass(Register klass, Register src_oop) {
if (UseCompressedClassPointers) {
if (UseCompactObjectHeaders) {
load_narrow_klass_compact(klass, src_oop);
decode_klass_not_null(klass);
} else if (UseCompressedClassPointers) {
z_llgf(klass, oopDesc::klass_offset_in_bytes(), src_oop);
// Attention: no null check here!
decode_klass_not_null(klass);
} else {
z_lg(klass, oopDesc::klass_offset_in_bytes(), src_oop);
}
}

void MacroAssembler::store_klass(Register klass, Register dst_oop, Register ck) {
assert(!UseCompactObjectHeaders, "Don't use with compact headers");
if (UseCompressedClassPointers) {
assert_different_registers(dst_oop, klass, Z_R0);
if (ck == noreg) ck = klass;
Expand All @@ -4086,6 +4146,7 @@ void MacroAssembler::store_klass(Register klass, Register dst_oop, Register ck)
}

void MacroAssembler::store_klass_gap(Register s, Register d) {
assert(!UseCompactObjectHeaders, "Don't use with compact headers");
if (UseCompressedClassPointers) {
assert(s != d, "not enough registers");
// Support s = noreg.
Expand Down
7 changes: 7 additions & 0 deletions src/hotspot/cpu/s390/macroAssembler_s390.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -803,6 +803,13 @@ class MacroAssembler: public Assembler {
void load_klass(Register klass, Register src_oop);
void store_klass(Register klass, Register dst_oop, Register ck = noreg); // Klass will get compressed if ck not provided.
void store_klass_gap(Register s, Register dst_oop);
void load_narrow_klass_compact(Register dst, Register src);
// Compares the Klass pointer of an object to a given Klass (which might be narrow,
// depending on UseCompressedClassPointers).
void cmp_klass(Register klass, Register obj, Register tmp);
// Compares the Klass pointer of two objects obj1 and obj2. Result is in the condition flags.
// Uses tmp1 and tmp2 as temporary registers.
void cmp_klasses_from_objects(Register obj1, Register obj2, Register tmp1, Register tmp2);

// This function calculates the size of the code generated by
// decode_klass_not_null(register dst)
Expand Down
16 changes: 16 additions & 0 deletions src/hotspot/cpu/s390/s390.ad
Original file line number Diff line number Diff line change
Expand Up @@ -4410,6 +4410,7 @@ instruct loadN(iRegN dst, memory mem) %{

// Load narrow Klass Pointer
instruct loadNKlass(iRegN dst, memory mem) %{
predicate(!UseCompactObjectHeaders);
match(Set dst (LoadNKlass mem));
ins_cost(MEMORY_REF_COST);
size(Z_DISP3_SIZE);
Expand All @@ -4419,6 +4420,21 @@ instruct loadNKlass(iRegN dst, memory mem) %{
ins_pipe(pipe_class_dummy);
%}

instruct loadNKlassCompactHeaders(iRegN dst, memory mem, flagsReg cr) %{
match(Set dst (LoadNKlass mem));
predicate(UseCompactObjectHeaders);
effect(KILL cr);
ins_cost(MEMORY_REF_COST);
format %{ "load_narrow_klass_compact $dst,$mem \t# compressed class ptr" %}
// TODO: size()
ins_encode %{
__ block_comment("load_narrow_klass_compact_c2 {");
__ load_narrow_klass_compact_c2($dst$$Register, $mem$$Address);
__ block_comment("} load_narrow_klass_compact");
%}
ins_pipe(pipe_class_dummy);
%}

// Load constant Compressed Pointer

instruct loadConN(iRegN dst, immN src) %{
Expand Down
27 changes: 20 additions & 7 deletions src/hotspot/cpu/s390/templateTable_s390.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3952,7 +3952,12 @@ void TemplateTable::_new() {
if (!ZeroTLAB) {
// The object is initialized before the header. If the object size is
// zero, go directly to the header initialization.
__ z_aghi(Rsize, (int)-sizeof(oopDesc)); // Subtract header size, set CC.
if (UseCompactObjectHeaders) {
assert(is_aligned(oopDesc::base_offset_in_bytes(), BytesPerLong), "oop base offset must be 8-byte-aligned");
__ z_aghi(Rsize, (int)-oopDesc::base_offset_in_bytes());
} else {
__ z_aghi(Rsize, (int)-sizeof(oopDesc)); // Subtract header size, set CC.
}
__ z_bre(initialize_header); // Jump if size of fields is zero.

// Initialize object fields.
Expand All @@ -3964,17 +3969,25 @@ void TemplateTable::_new() {

// Set Rzero to 0 and use it as src length, then mvcle will copy nothing
// and fill the object with the padding value 0.
__ add2reg(RobjectFields, sizeof(oopDesc), RallocatedObject);
if (UseCompactObjectHeaders) {
__ add2reg(RobjectFields, oopDesc::base_offset_in_bytes(), RallocatedObject);
} else {
__ add2reg(RobjectFields, sizeof(oopDesc), RallocatedObject);
}
__ move_long_ext(RobjectFields, as_Register(Rzero->encoding() - 1), 0);
}

// Initialize object header only.
__ bind(initialize_header);
__ store_const(Address(RallocatedObject, oopDesc::mark_offset_in_bytes()),
(long)markWord::prototype().value());

__ store_klass_gap(Rzero, RallocatedObject); // Zero klass gap for compressed oops.
__ store_klass(iklass, RallocatedObject); // Store klass last.
if (UseCompactObjectHeaders) {
__ z_lg(tmp, Address(iklass, in_bytes(Klass::prototype_header_offset())));
__ z_stg(tmp, Address(RallocatedObject, oopDesc::mark_offset_in_bytes()));
} else {
__ store_const(Address(RallocatedObject, oopDesc::mark_offset_in_bytes()),
(long) markWord::prototype().value());
__ store_klass_gap(Rzero, RallocatedObject); // Zero klass gap for compressed oops.
__ store_klass(iklass, RallocatedObject); // Store klass last.
}

if (DTraceAllocProbes) {
// Trigger dtrace event for fastpath.
Expand Down