8305387: JDK-8301995 breaks arm 32-bit

Reviewed-by: shade, matsaave
This commit is contained in:
Aleksei Voitylov 2023-04-28 09:41:55 +00:00 committed by Aleksey Shipilev
parent 3d9d84b742
commit 60a29a668c
4 changed files with 103 additions and 13 deletions

View file

@ -364,24 +364,32 @@ address TemplateInterpreterGenerator::generate_return_entry_for(TosState state,
const Register Rcache = R2_tmp;
const Register Rindex = R3_tmp;
__ get_cache_and_index_at_bcp(Rcache, Rindex, 1, index_size);
__ add(Rtemp, Rcache, AsmOperand(Rindex, lsl, LogBytesPerWord));
__ ldrb(Rtemp, Address(Rtemp, ConstantPoolCache::base_offset() + ConstantPoolCacheEntry::flags_offset()));
__ check_stack_top();
__ add(Rstack_top, Rstack_top, AsmOperand(Rtemp, lsl, Interpreter::logStackElementSize));
if (index_size == sizeof(u4)) {
__ load_resolved_indy_entry(Rcache, Rindex);
__ ldrh(Rcache, Address(Rcache, in_bytes(ResolvedIndyEntry::num_parameters_offset())));
__ check_stack_top();
__ add(Rstack_top, Rstack_top, AsmOperand(Rcache, lsl, Interpreter::logStackElementSize));
} else {
// Pop N words from the stack
__ get_cache_and_index_at_bcp(Rcache, Rindex, 1, index_size);
__ add(Rtemp, Rcache, AsmOperand(Rindex, lsl, LogBytesPerWord));
__ ldrb(Rtemp, Address(Rtemp, ConstantPoolCache::base_offset() + ConstantPoolCacheEntry::flags_offset()));
__ check_stack_top();
__ add(Rstack_top, Rstack_top, AsmOperand(Rtemp, lsl, Interpreter::logStackElementSize));
}
__ convert_retval_to_tos(state);
__ check_and_handle_popframe();
__ check_and_handle_earlyret();
__ check_and_handle_popframe();
__ check_and_handle_earlyret();
__ dispatch_next(state, step);
return entry;
}
address TemplateInterpreterGenerator::generate_deopt_entry_for(TosState state, int step, address continuation) {
address entry = __ pc();