[svn:parrot] r38052 - trunk/src/jit/i386

whiteknight at svn.parrot.org whiteknight at svn.parrot.org
Sat Apr 11 03:20:47 UTC 2009


Author: whiteknight
Date: Sat Apr 11 03:20:45 2009
New Revision: 38052
URL: https://trac.parrot.org/parrot/changeset/38052

Log:
attempted JIT fix, since my earlier commit apparently broke it. I'm not on i386, so if anybody is, please test this and let me know if I borked it worse please

Modified:
   trunk/src/jit/i386/jit_defs.c

Modified: trunk/src/jit/i386/jit_defs.c
==============================================================================
--- trunk/src/jit/i386/jit_defs.c	Sat Apr 11 02:24:42 2009	(r38051)
+++ trunk/src/jit/i386/jit_defs.c	Sat Apr 11 03:20:45 2009	(r38052)
@@ -2267,8 +2267,11 @@
                 break;
             case 'V':
                 emitm_call_cfunc(pc, get_nci_P);
-                emitm_lea_m_r(interp, pc, emit_EAX, emit_EAX, 0, 1, offsetof(struct PMC, data));
-                /* emitm_lea_m_r(interp, pc, emit_EAX, emit_EAX, 0, 1, 0); */
+                emitm_movl_r_m(interp, pc, emit_EAX, emit_EBP, 0, 1, temp_calls_offset + 4);
+                /* Call the get_pointer VTABLE on the Pointer PMC to get the returned pointer */
+                emitm_movl_m_r(interp, pc, emit_EAX, emit_EAX, 0, 1, offsetof(PMC, vtable));
+                emitm_movl_m_r(interp, pc, emit_EAX, emit_EAX, 0, 1, offsetof(VTABLE, get_pointer));
+                emitm_callr(pc, emit_EAX);
                 emitm_movl_r_m(interp, pc, emit_EAX, emit_EBP, 0, 1, args_offset);
                 break;
             case 'b':   /* buffer (void*) pass PObj_bufstart(SReg) */


More information about the parrot-commits mailing list