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