changeset in /hg/icedtea6: 2008-11-07 Gary Benson <gbenson at red...

Gary Benson gbenson at redhat.com
Fri Nov 7 02:36:58 PST 2008


changeset 56fbf813637d in /hg/icedtea6
details: http://icedtea.classpath.org/hg/icedtea6?cmd=changeset;node=56fbf813637d
description:
	2008-11-07  Gary Benson  <gbenson at redhat.com>

		* ports/hotspot/src/cpu/zero/vm/frame_zero.cpp
		(frame::interpreter_frame_result): Implemented.

diffstat:

2 files changed, 57 insertions(+), 1 deletion(-)
ChangeLog                                    |    5 ++
ports/hotspot/src/cpu/zero/vm/frame_zero.cpp |   53 +++++++++++++++++++++++++-

diffs (75 lines):

diff -r b182fe895dda -r 56fbf813637d ChangeLog
--- a/ChangeLog	Thu Nov 06 12:14:32 2008 -0500
+++ b/ChangeLog	Fri Nov 07 05:36:53 2008 -0500
@@ -1,3 +1,8 @@ 2008-11-06  Gary Benson  <gbenson at redhat
+2008-11-07  Gary Benson  <gbenson at redhat.com>
+
+	* ports/hotspot/src/cpu/zero/vm/frame_zero.cpp
+	(frame::interpreter_frame_result): Implemented.
+
 2008-11-06  Gary Benson  <gbenson at redhat.com>
 
 	* ports/hotspot/src/os_cpu/linux_zero/vm/os_linux_zero.cpp
diff -r b182fe895dda -r 56fbf813637d ports/hotspot/src/cpu/zero/vm/frame_zero.cpp
--- a/ports/hotspot/src/cpu/zero/vm/frame_zero.cpp	Thu Nov 06 12:14:32 2008 -0500
+++ b/ports/hotspot/src/cpu/zero/vm/frame_zero.cpp	Fri Nov 07 05:36:53 2008 -0500
@@ -133,7 +133,58 @@ BasicType frame::interpreter_frame_resul
 BasicType frame::interpreter_frame_result(oop* oop_result,
                                           jvalue* value_result)
 {
-  Unimplemented();
+  assert(is_interpreted_frame(), "interpreted frame expected");
+  methodOop method = interpreter_frame_method();
+  BasicType type = method->result_type();
+  intptr_t* tos_addr = (intptr_t *) interpreter_frame_tos_address();
+  oop obj;
+
+  switch (type) {
+  case T_VOID:
+    break;
+  case T_BOOLEAN:
+    value_result->z = *(jboolean *) tos_addr;
+    break;
+  case T_BYTE:
+    value_result->b = *(jbyte *) tos_addr;
+    break;
+  case T_CHAR:
+    value_result->c = *(jchar *) tos_addr;
+    break;
+  case T_SHORT:
+    value_result->s = *(jshort *) tos_addr;
+    break;
+  case T_INT:
+    value_result->i = *(jint *) tos_addr;
+    break;
+  case T_LONG:
+    value_result->j = *(jlong *) tos_addr;
+    break;
+  case T_FLOAT:
+    value_result->f = *(jfloat *) tos_addr;
+    break;
+  case T_DOUBLE:
+    value_result->d = *(jdouble *) tos_addr;
+    break;
+
+  case T_OBJECT: 
+  case T_ARRAY:
+    if (method->is_native()) {
+      obj = get_interpreterState()->oop_temp();
+    }
+    else {
+      oop* obj_p = (oop *) tos_addr;
+      obj = (obj_p == NULL) ? (oop) NULL : *obj_p;
+    }
+    assert(obj == NULL || Universe::heap()->is_in(obj), "sanity check");
+    *oop_result = obj;
+    break;
+
+  default:
+    ShouldNotReachHere();
+  }
+
+  return type;
 }
 
 int frame::frame_size() const



More information about the distro-pkg-dev mailing list