[aarch64-port-dev ] /hg/icedtea7-forest-aarch64/hotspot: ensure rmethod is reloaded ...

Andrew Dinn adinn at redhat.com
Fri Oct 31 15:56:17 UTC 2014


[forwarding bounced checking message]
Return-path: <adinn at icedtea.classpath.org>
Received: from localhost ([127.0.0.1] helo=icedtea.classpath.org)
	by icedtea.classpath.org with esmtp (Exim 4.69)
	(envelope-from <adinn at icedtea.classpath.org>)
	id 1XkDXR-0008QP-HV
	for aarch64-port-dev at openjdk.java.net; Fri, 31 Oct 2014 14:50:53 +0000
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Date: Fri, 31 Oct 2014 14:50:53 +0000
Subject: /hg/icedtea7-forest-aarch64/hotspot: ensure rmethod is reloaded ...
From: adinn at icedtea.classpath.org
X-Hg-Notification: changeset 99a0ed4de8a1
Message-Id:
<hg.99a0ed4de8a1.1414767053.-5017525213744097322 at icedtea.classpath.org>
To: aarch64-port-dev at openjdk.java.net

changeset 99a0ed4de8a1 in /hg/icedtea7-forest-aarch64/hotspot
details:
http://icedtea.classpath.org/hg/icedtea7-forest-aarch64/hotspot?cmd=changeset;node=99a0ed4de8a1
author: adinn
date: Fri Oct 31 14:50:26 2014 +0000

	ensure rmethod is reloaded from stack when interpreter makes non leaf
VM call

	n.b. we always push and pop rmethod around VM calls because it is
	volatile. this is redundant for calls from the interpreter and it
	would be godo to be able to avoid it. there is a FIXME comment in the
	code as a reminder.


diffstat:

 src/cpu/aarch64/vm/assembler_aarch64.cpp   |  3 +++
 src/cpu/aarch64/vm/interp_masm_aarch64.cpp |  3 +++
 2 files changed, 6 insertions(+), 0 deletions(-)

diffs (33 lines):

diff -r eff2294b2b17 -r 99a0ed4de8a1
src/cpu/aarch64/vm/assembler_aarch64.cpp
--- a/src/cpu/aarch64/vm/assembler_aarch64.cpp	Thu Oct 30 10:46:37 2014
-0400
+++ b/src/cpu/aarch64/vm/assembler_aarch64.cpp	Fri Oct 31 14:50:26 2014
+0000
@@ -2687,6 +2687,9 @@
 					Label *retaddr) {
   Label E, L;

+  // !!! FIXME AARCH64 we normally need to save rmethod as it is
+  // volatile.  however we don't need to when calling from the
+  // interpreter.
   stp(rscratch1, rmethod, Address(pre(sp, -2 * wordSize)));

   // We add 1 to number_of_arguments because the thread in arg0 is
diff -r eff2294b2b17 -r 99a0ed4de8a1
src/cpu/aarch64/vm/interp_masm_aarch64.cpp
--- a/src/cpu/aarch64/vm/interp_masm_aarch64.cpp	Thu Oct 30 10:46:37
2014 -0400
+++ b/src/cpu/aarch64/vm/interp_masm_aarch64.cpp	Fri Oct 31 14:50:26
2014 +0000
@@ -1413,6 +1413,7 @@
   // Note: No need to save/restore rbcp & rlocals pointer since these
   //       are callee saved registers and no blocking/ GC can happen
   //       in leaf calls.
+  // also no need to restore method register
 #ifdef ASSERT
   {
     Label L;
@@ -1456,6 +1457,8 @@
                                entry_point, number_of_arguments,
                      check_exceptions);
 // interpreter specific
+  // method oop may have moved so reload from interpreter stack frame
+  get_method(rmethod);
   restore_bcp();
   restore_locals();
   // reload the constant pool cache in case a PermGen GC moved it






More information about the aarch64-port-dev mailing list