< prev index next > src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp
Print this page
}
if (data == src)
mov(dst, src);
}
! void MacroAssembler::decode_heap_oop(Register d, Register s) {
#ifdef ASSERT
verify_heapbase("MacroAssembler::decode_heap_oop: heap base corrupted?");
#endif
if (CompressedOops::base() == nullptr) {
if (CompressedOops::shift() != 0) {
lsl(d, s, CompressedOops::shift());
} else if (d != s) {
mov(d, s);
}
} else {
Label done;
if (d != s)
mov(d, s);
! cbz(s, done);
add(d, rheapbase, s, Assembler::LSL, LogMinObjAlignmentInBytes);
bind(done);
}
verify_oop_msg(d, "broken oop in decode_heap_oop");
}
}
if (data == src)
mov(dst, src);
}
! void MacroAssembler::decode_heap_oop(Register d, Register s, Label* L_null_target) {
#ifdef ASSERT
verify_heapbase("MacroAssembler::decode_heap_oop: heap base corrupted?");
#endif
if (CompressedOops::base() == nullptr) {
if (CompressedOops::shift() != 0) {
lsl(d, s, CompressedOops::shift());
} else if (d != s) {
mov(d, s);
}
+ if (L_null_target != nullptr) {
+ cbz(d, *L_null_target);
+ }
} else {
Label done;
if (d != s)
mov(d, s);
! cbz(d, L_null_target != nullptr ? *L_null_target : done);
add(d, rheapbase, s, Assembler::LSL, LogMinObjAlignmentInBytes);
bind(done);
}
verify_oop_msg(d, "broken oop in decode_heap_oop");
}
< prev index next >