38 lines
1.6 KiB
Diff
38 lines
1.6 KiB
Diff
|
|
||
|
# HG changeset patch
|
||
|
# User aph
|
||
|
# Date 1475745921 0
|
||
|
# Node ID 60a8cbf7030e4de40050472705776509fa9cb960
|
||
|
# Parent d9960bd9fb6d3a5ac0450a47d70f3a3afd7f515d
|
||
|
8167200: AArch64: Broken stack pointer adjustment in interpreter
|
||
|
Summary: Always adjust SP unconditionally
|
||
|
Reviewed-by: dlong, kbarrett
|
||
|
|
||
|
diff -r d9960bd9fb6d -r 60a8cbf7030e src/cpu/aarch64/vm/templateTable_aarch64.cpp
|
||
|
--- openjdk/hotspot/src/cpu/aarch64/vm/templateTable_aarch64.cpp Tue May 24 08:47:37 2016 -0700
|
||
|
+++ openjdk/hotspot/src/cpu/aarch64/vm/templateTable_aarch64.cpp Thu Oct 06 09:25:21 2016 +0000
|
||
|
@@ -3717,19 +3717,15 @@
|
||
|
|
||
|
// allocate one if there's no free slot
|
||
|
{
|
||
|
- Label entry, loop, no_adjust;
|
||
|
+ Label entry, loop;
|
||
|
// 1. compute new pointers // rsp: old expression stack top
|
||
|
__ ldr(c_rarg1, monitor_block_bot); // c_rarg1: old expression stack bottom
|
||
|
- __ sub(esp, esp, entry_size); // move expression stack top
|
||
|
+ __ sub(esp, esp, entry_size); // move expression stack top
|
||
|
__ sub(c_rarg1, c_rarg1, entry_size); // move expression stack bottom
|
||
|
__ mov(c_rarg3, esp); // set start value for copy loop
|
||
|
__ str(c_rarg1, monitor_block_bot); // set new monitor block bottom
|
||
|
|
||
|
- __ cmp(sp, c_rarg3); // Check if we need to move sp
|
||
|
- __ br(Assembler::LO, no_adjust); // to allow more stack space
|
||
|
- // for our new esp
|
||
|
- __ sub(sp, sp, 2 * wordSize);
|
||
|
- __ bind(no_adjust);
|
||
|
+ __ sub(sp, sp, entry_size); // make room for the monitor
|
||
|
|
||
|
__ b(entry);
|
||
|
// 2. move expression stack contents
|
||
|
|