@@ -1285,13 +1285,7 @@ int MacroAssembler::ic_check(int end_alignment) {
12851285 if (use_trap_based_null_check) {
12861286 trap_null_check (receiver);
12871287 }
1288- if (UseCompactObjectHeaders) {
1289- load_narrow_klass_compact (tmp1, receiver);
1290- } else if (UseCompressedClassPointers) {
1291- lwz (tmp1, oopDesc::klass_offset_in_bytes (), receiver);
1292- } else {
1293- ld (tmp1, oopDesc::klass_offset_in_bytes (), receiver);
1294- }
1288+ load_klass_no_decode (tmp1, receiver); // 2 instructions with UseCompactObjectHeaders
12951289 ld (tmp2, in_bytes (CompiledICData::speculated_klass_offset ()), data);
12961290 trap_ic_miss_check (tmp1, tmp2);
12971291
@@ -1307,11 +1301,7 @@ int MacroAssembler::ic_check(int end_alignment) {
13071301 cmpdi (CCR0, receiver, 0 );
13081302 beqctr (CCR0);
13091303 }
1310- if (UseCompressedClassPointers) {
1311- lwz (tmp1, oopDesc::klass_offset_in_bytes (), receiver);
1312- } else {
1313- ld (tmp1, oopDesc::klass_offset_in_bytes (), receiver);
1314- }
1304+ load_klass_no_decode (tmp1, receiver); // 2 instructions with UseCompactObjectHeaders
13151305 ld (tmp2, in_bytes (CompiledICData::speculated_klass_offset ()), data);
13161306 cmpd (CCR0, tmp1, tmp2);
13171307 bnectr (CCR0);
@@ -3365,18 +3355,23 @@ void MacroAssembler::decode_klass_not_null(Register dst, Register src) {
33653355 }
33663356}
33673357
3368- void MacroAssembler::load_klass (Register dst, Register src) {
3358+ void MacroAssembler::load_klass_no_decode (Register dst, Register src) {
33693359 if (UseCompactObjectHeaders) {
33703360 load_narrow_klass_compact (dst, src);
3371- decode_klass_not_null (dst);
33723361 } else if (UseCompressedClassPointers) {
33733362 lwz (dst, oopDesc::klass_offset_in_bytes (), src);
3374- decode_klass_not_null (dst);
33753363 } else {
33763364 ld (dst, oopDesc::klass_offset_in_bytes (), src);
33773365 }
33783366}
33793367
3368+ void MacroAssembler::load_klass (Register dst, Register src) {
3369+ load_klass_no_decode (dst, src);
3370+ if (UseCompressedClassPointers) { // also true for UseCompactObjectHeaders
3371+ decode_klass_not_null (dst);
3372+ }
3373+ }
3374+
33803375// Loads the obj's Klass* into dst.
33813376// Preserves all registers (incl src, rscratch1 and rscratch2).
33823377// Input:
0 commit comments