< prev index next >
src/cpu/aarch64/vm/aarch64.ad
Print this page
rev 9227 : 8143067: aarch64: guarantee failure in javac
Summary: Fix adrp going out of range during code relocation
Reviewed-by: duke
@@ -4396,11 +4396,11 @@
assert(rtype == relocInfo::none, "unexpected reloc type");
if (con < (address)(uintptr_t)os::vm_page_size()) {
__ mov(dst_reg, con);
} else {
unsigned long offset;
- __ adrp(dst_reg, con, offset);
+ __ far_adrp(dst_reg, con, offset);
__ add(dst_reg, dst_reg, offset);
}
}
}
%}
@@ -4420,20 +4420,20 @@
enc_class aarch64_enc_mov_poll_page(iRegP dst, immPollPage src) %{
MacroAssembler _masm(&cbuf);
address page = (address)$src$$constant;
Register dst_reg = as_Register($dst$$reg);
unsigned long off;
- __ adrp(dst_reg, Address(page, relocInfo::poll_type), off);
+ __ far_adrp(dst_reg, Address(page, relocInfo::poll_type), off);
assert(off == 0, "assumed offset == 0");
%}
enc_class aarch64_enc_mov_byte_map_base(iRegP dst, immByteMapBase src) %{
MacroAssembler _masm(&cbuf);
address page = (address)$src$$constant;
Register dst_reg = as_Register($dst$$reg);
unsigned long off;
- __ adrp(dst_reg, ExternalAddress(page), off);
+ __ far_adrp(dst_reg, ExternalAddress(page), off);
assert(off == 0, "assumed offset == 0");
%}
enc_class aarch64_enc_mov_n(iRegN dst, immN src) %{
MacroAssembler _masm(&cbuf);
< prev index next >