8263425: AArch64: two potential bugs in C1 LIRGenerator::generate_address()

Reviewed-by: aph
This commit is contained in:
Nick Gasson 2021-03-15 05:20:39 +00:00
parent 554dd29fb6
commit f7e0a09802

View File

@ -174,7 +174,7 @@ LIR_Address* LIRGenerator::generate_address(LIR_Opr base, LIR_Opr index,
if (large_disp != 0) {
LIR_Opr tmp = new_pointer_register();
if (Assembler::operand_valid_for_add_sub_immediate(large_disp)) {
__ add(tmp, tmp, LIR_OprFact::intptrConst(large_disp));
__ add(index, LIR_OprFact::intptrConst(large_disp), tmp);
index = tmp;
} else {
__ move(tmp, LIR_OprFact::intptrConst(large_disp));
@ -191,7 +191,7 @@ LIR_Address* LIRGenerator::generate_address(LIR_Opr base, LIR_Opr index,
}
// at this point we either have base + index or base + displacement
if (large_disp == 0) {
if (large_disp == 0 && index->is_register()) {
return new LIR_Address(base, index, type);
} else {
assert(Address::offset_ok_for_immed(large_disp, 0), "must be");