@@ -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:
0 commit comments