@@ -1284,13 +1284,7 @@ int MacroAssembler::ic_check(int end_alignment) {
1284
1284
if (use_trap_based_null_check) {
1285
1285
trap_null_check (receiver);
1286
1286
}
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
1294
1288
ld (tmp2, in_bytes (CompiledICData::speculated_klass_offset ()), data);
1295
1289
trap_ic_miss_check (tmp1, tmp2);
1296
1290
@@ -1306,11 +1300,7 @@ int MacroAssembler::ic_check(int end_alignment) {
1306
1300
cmpdi (CR0, receiver, 0 );
1307
1301
beqctr (CR0);
1308
1302
}
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
1314
1304
ld (tmp2, in_bytes (CompiledICData::speculated_klass_offset ()), data);
1315
1305
cmpd (CR0, tmp1, tmp2);
1316
1306
bnectr (CR0);
@@ -3536,18 +3526,23 @@ void MacroAssembler::decode_klass_not_null(Register dst, Register src) {
3536
3526
}
3537
3527
}
3538
3528
3539
- void MacroAssembler::load_klass (Register dst, Register src) {
3529
+ void MacroAssembler::load_klass_no_decode (Register dst, Register src) {
3540
3530
if (UseCompactObjectHeaders) {
3541
3531
load_narrow_klass_compact (dst, src);
3542
- decode_klass_not_null (dst);
3543
3532
} else if (UseCompressedClassPointers) {
3544
3533
lwz (dst, oopDesc::klass_offset_in_bytes (), src);
3545
- decode_klass_not_null (dst);
3546
3534
} else {
3547
3535
ld (dst, oopDesc::klass_offset_in_bytes (), src);
3548
3536
}
3549
3537
}
3550
3538
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
+
3551
3546
// Loads the obj's Klass* into dst.
3552
3547
// Preserves all registers (incl src, rscratch1 and rscratch2).
3553
3548
// Input:
0 commit comments