8330806: test/hotspot/jtreg/compiler/c1/TestLargeMonitorOffset.java fails on ARM32

Reviewed-by: snazarki, dsamersoff
This commit is contained in:
Aleksei Voitylov 2024-07-09 10:27:44 +00:00 committed by Dmitry Samersoff
parent f3ff4f7427
commit 0e0dfca21f

View File

@ -152,8 +152,14 @@ void LIR_Assembler::osr_entry() {
int monitor_offset = (method()->max_locals() + 2 * (number_of_locks - 1)) * BytesPerWord; int monitor_offset = (method()->max_locals() + 2 * (number_of_locks - 1)) * BytesPerWord;
for (int i = 0; i < number_of_locks; i++) { for (int i = 0; i < number_of_locks; i++) {
int slot_offset = monitor_offset - (i * 2 * BytesPerWord); int slot_offset = monitor_offset - (i * 2 * BytesPerWord);
if (slot_offset >= 4096 - BytesPerWord) {
__ add_slow(R2, OSR_buf, slot_offset);
__ ldr(R1, Address(R2, 0*BytesPerWord));
__ ldr(R2, Address(R2, 1*BytesPerWord));
} else {
__ ldr(R1, Address(OSR_buf, slot_offset + 0*BytesPerWord)); __ ldr(R1, Address(OSR_buf, slot_offset + 0*BytesPerWord));
__ ldr(R2, Address(OSR_buf, slot_offset + 1*BytesPerWord)); __ ldr(R2, Address(OSR_buf, slot_offset + 1*BytesPerWord));
}
__ str(R1, frame_map()->address_for_monitor_lock(i)); __ str(R1, frame_map()->address_for_monitor_lock(i));
__ str(R2, frame_map()->address_for_monitor_object(i)); __ str(R2, frame_map()->address_for_monitor_object(i));
} }