Skip to content

Commit 3f8b7ab

Browse files
committed
8353274: [PPC64] Bug related to -XX:+UseCompactObjectHeaders -XX:-UseSIGTRAP in JDK-8305895
1 parent d4d1835 commit 3f8b7ab

File tree

2 files changed

+13
-12
lines changed

2 files changed

+13
-12
lines changed

src/hotspot/cpu/ppc/macroAssembler_ppc.cpp

Lines changed: 12 additions & 12 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);
@@ -3548,6 +3538,16 @@ void MacroAssembler::load_klass(Register dst, Register src) {
35483538
}
35493539
}
35503540

3541+
void MacroAssembler::load_klass_no_decode(Register dst, Register src) {
3542+
if (UseCompactObjectHeaders) {
3543+
load_narrow_klass_compact(dst, src);
3544+
} else if (UseCompressedClassPointers) {
3545+
lwz(dst, oopDesc::klass_offset_in_bytes(), src);
3546+
} else {
3547+
ld(dst, oopDesc::klass_offset_in_bytes(), src);
3548+
}
3549+
}
3550+
35513551
// Loads the obj's Klass* into dst.
35523552
// Preserves all registers (incl src, rscratch1 and rscratch2).
35533553
// Input:

src/hotspot/cpu/ppc/macroAssembler_ppc.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -803,6 +803,7 @@ class MacroAssembler: public Assembler {
803803

804804
// Load/Store klass oop from klass field. Compress.
805805
void load_klass(Register dst, Register src);
806+
void load_klass_no_decode(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);
808809
void cmp_klasses_from_objects(ConditionRegister dst, Register obj1, Register obj2, Register tmp1, Register tmp2);

0 commit comments

Comments
 (0)