changeset 6470:854132273cf4

8167200, PR3204: AArch64: Broken stack pointer adjustment in interpreter Summary: Always adjust SP unconditionally Reviewed-by: dlong, kbarrett
author aph
date Thu, 06 Oct 2016 15:11:35 +0000
parents 2f48c9cd3e1b
children 0771982261c9
files src/cpu/aarch64/vm/templateTable_aarch64.cpp
diffstat 1 files changed, 3 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/src/cpu/aarch64/vm/templateTable_aarch64.cpp	Sun Sep 06 05:02:06 2015 -0700
+++ b/src/cpu/aarch64/vm/templateTable_aarch64.cpp	Thu Oct 06 15:11:35 2016 +0000
@@ -3779,19 +3779,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