Skip to content

Commit a13e34d

Browse files
committed
8353274: [PPC64] Bug related to -XX:+UseCompactObjectHeaders -XX:-UseSIGTRAP in JDK-8305895
Reviewed-by: rrich, amitkumar
1 parent 41d4a0d commit a13e34d

File tree

2 files changed

+11
-15
lines changed

2 files changed

+11
-15
lines changed

src/hotspot/cpu/ppc/macroAssembler_ppc.cpp

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1284,13 +1284,7 @@ int MacroAssembler::ic_check(int end_alignment) {
12841284
if (use_trap_based_null_check) {
12851285
trap_null_check(receiver);
12861286
}
1287-
if (UseCompactObjectHeaders) {
1288-
load_narrow_klass_compact(tmp1, receiver);
1289-
} else if (UseCompressedClassPointers) {
1290-
lwz(tmp1, oopDesc::klass_offset_in_bytes(), receiver);
1291-
} else {
1292-
ld(tmp1, oopDesc::klass_offset_in_bytes(), receiver);
1293-
}
1287+
load_klass_no_decode(tmp1, receiver); // 2 instructions with UseCompactObjectHeaders
12941288
ld(tmp2, in_bytes(CompiledICData::speculated_klass_offset()), data);
12951289
trap_ic_miss_check(tmp1, tmp2);
12961290

@@ -1306,11 +1300,7 @@ int MacroAssembler::ic_check(int end_alignment) {
13061300
cmpdi(CR0, receiver, 0);
13071301
beqctr(CR0);
13081302
}
1309-
if (UseCompressedClassPointers) {
1310-
lwz(tmp1, oopDesc::klass_offset_in_bytes(), receiver);
1311-
} else {
1312-
ld(tmp1, oopDesc::klass_offset_in_bytes(), receiver);
1313-
}
1303+
load_klass_no_decode(tmp1, receiver); // 2 instructions with UseCompactObjectHeaders
13141304
ld(tmp2, in_bytes(CompiledICData::speculated_klass_offset()), data);
13151305
cmpd(CR0, tmp1, tmp2);
13161306
bnectr(CR0);
@@ -3536,18 +3526,23 @@ void MacroAssembler::decode_klass_not_null(Register dst, Register src) {
35363526
}
35373527
}
35383528

3539-
void MacroAssembler::load_klass(Register dst, Register src) {
3529+
void MacroAssembler::load_klass_no_decode(Register dst, Register src) {
35403530
if (UseCompactObjectHeaders) {
35413531
load_narrow_klass_compact(dst, src);
3542-
decode_klass_not_null(dst);
35433532
} else if (UseCompressedClassPointers) {
35443533
lwz(dst, oopDesc::klass_offset_in_bytes(), src);
3545-
decode_klass_not_null(dst);
35463534
} else {
35473535
ld(dst, oopDesc::klass_offset_in_bytes(), src);
35483536
}
35493537
}
35503538

3539+
void MacroAssembler::load_klass(Register dst, Register src) {
3540+
load_klass_no_decode(dst, src);
3541+
if (UseCompressedClassPointers) { // also true for UseCompactObjectHeaders
3542+
decode_klass_not_null(dst);
3543+
}
3544+
}
3545+
35513546
// Loads the obj's Klass* into dst.
35523547
// Preserves all registers (incl src, rscratch1 and rscratch2).
35533548
// Input:

src/hotspot/cpu/ppc/macroAssembler_ppc.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -802,6 +802,7 @@ class MacroAssembler: public Assembler {
802802
inline void decode_heap_oop(Register d);
803803

804804
// Load/Store klass oop from klass field. Compress.
805+
void load_klass_no_decode(Register dst, Register src);
805806
void load_klass(Register dst, Register src);
806807
void load_narrow_klass_compact(Register dst, Register src);
807808
void cmp_klass(ConditionRegister dst, Register obj, Register klass, Register tmp, Register tmp2);

0 commit comments

Comments
 (0)