changeset 350:914992a3ebba

2007-11-13 Gary Benson <gbenson@redhat.com> * ports/hotspot/src/cpu/ppc/vm/interpreterRT_ppc.cpp (SlowSignatureHandler::pass_int): Implemented. (SlowSignatureHandler::pass_object): Likewise.
author Gary Benson <gbenson@redhat.com>
date Tue, 13 Nov 2007 10:20:57 -0500
parents 55e5e7e59cb7
children 9cbaee9e9b57
files ChangeLog ports/hotspot/src/cpu/ppc/vm/interpreterRT_ppc.cpp
diffstat 2 files changed, 33 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Tue Nov 13 06:50:47 2007 -0500
+++ b/ChangeLog	Tue Nov 13 10:20:57 2007 -0500
@@ -1,3 +1,9 @@
+2007-11-13  Gary Benson  <gbenson@redhat.com>
+
+	* ports/hotspot/src/cpu/ppc/vm/interpreterRT_ppc.cpp
+	(SlowSignatureHandler::pass_int): Implemented.
+	(SlowSignatureHandler::pass_object): Likewise.
+
 2007-11-13  Gary Benson  <gbenson@redhat.com>
 
 	* ports/hotspot/src/cpu/ppc/vm/cppInterpreter_ppc.cpp
--- a/ports/hotspot/src/cpu/ppc/vm/interpreterRT_ppc.cpp	Tue Nov 13 06:50:47 2007 -0500
+++ b/ports/hotspot/src/cpu/ppc/vm/interpreterRT_ppc.cpp	Tue Nov 13 10:20:57 2007 -0500
@@ -246,7 +246,18 @@
 
 void InterpreterRuntime::SlowSignatureHandler::pass_int()
 {
-  Unimplemented();
+  jint src = *(jint *)
+    (_from + Interpreter::local_offset_in_bytes(offset()));
+
+  if (_gp_regs <= _gp_reg_max) {
+    *(jint *)(_gp_regs++) = src;
+#ifdef PPC64
+    _st_args++;
+#endif
+  }
+  else {
+    *(jint *)(_st_args++) = src;
+  }
 }
 
 void InterpreterRuntime::SlowSignatureHandler::pass_long()
@@ -293,7 +304,21 @@
 
 void InterpreterRuntime::SlowSignatureHandler::pass_object()
 {
-  Unimplemented();
+  intptr_t *src = (intptr_t *)
+    (_from + Interpreter::local_offset_in_bytes(offset()));
+
+  if (*src == 0)
+    src = NULL;
+
+  if (_gp_regs <= _gp_reg_max) {
+    *(intptr_t **)(_gp_regs++) = src;
+#ifdef PPC64
+    _st_args++;
+#endif
+  }
+  else {
+    *(intptr_t **)(_st_args++) = src;
+  }
 }
 
 IRT_ENTRY(address,