changeset 2222:cf905f6ef379

Just as broken :(
author Gary Benson <gbenson@redhat.com>
date Wed, 16 Feb 2011 14:05:03 +0000
parents cafe64e5bd30
children c1d2626ae66c
files src/cpu/zero/vm/cppInterpreter_zero.cpp
diffstat 1 files changed, 17 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/cpu/zero/vm/cppInterpreter_zero.cpp	Wed Feb 16 13:53:11 2011 +0000
+++ b/src/cpu/zero/vm/cppInterpreter_zero.cpp	Wed Feb 16 14:05:03 2011 +0000
@@ -613,6 +613,9 @@
 #define VMSLOTS_SLOT(offset)    ((intptr_t*)&vmslot0[-(offset)])
 #define VMSLOTS_OBJECT(offset)  ((oop)vmslot0[-(offset)])
 
+#define SET_VMSLOTS_OBJECT(value, offset) \
+  (*((oop *)&vmslot0[-(offset)]) = (value))
+
 int CppInterpreter::method_handle_entry(methodOop method,
                                         intptr_t UNUSED, TRAPS) {
   JavaThread *thread = (JavaThread *) THREAD;
@@ -678,19 +681,30 @@
           break;
         stack->alloc(arg_slots * wordSize);
 
+        for (int i = -1; i < vmslots; i++)
+          tty->print_cr("a) VMSLOTS_OBJECT(%d) = %p", i, VMSLOTS_OBJECT(i));
+        
         // Shuffle everything up
-        Unimplemented();
+        int arg_slot = sun_dyn_BoundMethodHandle::vmargslot(method_handle);
+        for (int i = vmslots - 1; i >= arg_slot; i--) {
+          Unimplemented();
+        }
+        vmslots += arg_slots;
 
         // Store bound argument into new stack slot
         oop arg = sun_dyn_BoundMethodHandle::argument(method_handle);
+        tty->print_cr("\narg = %p\n", arg);
         if (arg_type == T_OBJECT) {
           assert(arg_slots == 1, "should be");
-          //SET_LOCALS_OBJECT(arg, max_locals - arg_slots);
-          Unimplemented();
+          SET_VMSLOTS_OBJECT(arg, arg_slot);
         }
         else {
           Unimplemented();
         }
+
+        for (int i = -1; i < vmslots; i++)
+          tty->print_cr("b) VMSLOTS_OBJECT(%d) = %p", i, VMSLOTS_OBJECT(i));
+        
         
         // Continue
         if (direct_to_method) {