[svn:parrot] r40933 - in branches/context_pmc3/src/jit: amd64 ppc sun4

chromatic at svn.parrot.org chromatic at svn.parrot.org
Wed Sep 2 23:57:30 UTC 2009


Author: chromatic
Date: Wed Sep  2 23:57:29 2009
New Revision: 40933
URL: https://trac.parrot.org/parrot/changeset/40933

Log:
[JIT] Attempted to fix up context accesses for AMD64, PPC, and Sparc JITs as
well.  This might be unfruitful, because they probably don't work anyway... but
why not try?

Modified:
   branches/context_pmc3/src/jit/amd64/jit_defs.c
   branches/context_pmc3/src/jit/ppc/core.jit
   branches/context_pmc3/src/jit/ppc/jit_emit.h
   branches/context_pmc3/src/jit/sun4/jit_emit.h

Modified: branches/context_pmc3/src/jit/amd64/jit_defs.c
==============================================================================
--- branches/context_pmc3/src/jit/amd64/jit_defs.c	Wed Sep  2 23:55:32 2009	(r40932)
+++ branches/context_pmc3/src/jit/amd64/jit_defs.c	Wed Sep  2 23:57:29 2009	(r40933)
@@ -153,7 +153,9 @@
 #endif
     }
     /* Base pointer */
-    emit_mov_r_mr(jit_info->native_ptr, RBX, INTERP, (long)offsetof(Interp, ctx.bp));
+    emit_mov_r_mr(jit_info->native_ptr, RBX, INTERP, (long)offsetof(Interp, ctx));
+    emit_mov_r_mr(jit_info->native_ptr, RBX, RBX, (long)offsetof(PMC, data));
+    emit_mov_r_mr(jit_info->native_ptr, RBX, RBX, (long)offsetof(Parrot_Context, bp));
 
 #ifdef USE_OP_MAP_AND_CODE_START
     emit_jmp_r_r(jit_info->native_ptr, RAX, OP_MAP);

Modified: branches/context_pmc3/src/jit/ppc/core.jit
==============================================================================
--- branches/context_pmc3/src/jit/ppc/core.jit	Wed Sep  2 23:55:32 2009	(r40932)
+++ branches/context_pmc3/src/jit/ppc/core.jit	Wed Sep  2 23:57:29 2009	(r40933)
@@ -1223,8 +1223,8 @@
 ; or just JIT (TODO)  the 2 easy ones
 Parrot_set_args_pc {
     if (jit_info->code_type == JIT_CODE_FILE) {
-    jit_emit_mov_ri_i(NATIVECODE, ISR1, jit_info->cur_op);
-    jit_emit_stw(NATIVECODE, ISR1, offsetof(Interp, current_args), r16);
+        jit_emit_mov_ri_i(NATIVECODE, ISR1, jit_info->cur_op);
+        jit_emit_stw(NATIVECODE, ISR1, offsetof(Interp, current_args), r16);
     }
     else  {
         jit_set_args_pc(jit_info, interp,
@@ -1294,10 +1294,12 @@
 
 Parrot_get_results_pc {
     if (jit_info->code_type == JIT_CODE_FILE) {
-    jit_emit_mov_ri_i(NATIVECODE, ISR1, jit_info->cur_op);
-    jit_emit_lwz(NATIVECODE, ISR2, offsetof(Interp, ctx.state), r16);
-    jit_emit_stw(NATIVECODE, ISR1,
-        offsetof(Parrot_Context, current_results), ISR2);
+        jit_emit_mov_ri_i(NATIVECODE, ISR1, jit_info->cur_op);
+        jit_emit_lwz(NATIVECODE, ISR2, offsetof(Interp, ctx), r16);
+        jit_emit_lwz(NATIVECODE, ISR2, offsetof(PMC, data), ISR2);
+        jit_emit_lwz(NATIVECODE, ISR2, offsetof(Parrot_Context, state), ISR2);
+        jit_emit_stw(NATIVECODE, ISR1,
+            offsetof(Parrot_Context, current_results), ISR2);
     }
     else {
     PackFile_Constant **constants  = CONTEXT(interp)->constants;

Modified: branches/context_pmc3/src/jit/ppc/jit_emit.h
==============================================================================
--- branches/context_pmc3/src/jit/ppc/jit_emit.h	Wed Sep  2 23:55:32 2009	(r40932)
+++ branches/context_pmc3/src/jit/ppc/jit_emit.h	Wed Sep  2 23:57:29 2009	(r40933)
@@ -675,7 +675,9 @@
     jit_emit_lwz((pc), r15,  offsetof(PackFile_Segment, data), ISR1)
 
 #  define jit_emit_branch_to_opcode(pc, D) \
-    jit_emit_lwz((pc), r13, offsetof(Interp, ctx.bp), r16); \
+    jit_emit_lwz((pc), r13, offsetof(Interp, ctx), r16); \
+    jit_emit_lwz((pc), r13, offsetof(PMC, data), r13); \
+    jit_emit_lwz((pc), r13, offsetof(Parrot_Context, bp), r13); \
     jit_emit_sub_rrr(jit_info->native_ptr, ISR1, (D), r15); \
     jit_emit_lwzx(jit_info->native_ptr, ISR1, ISR1, r14); \
     jit_emit_mtctr(jit_info->native_ptr, ISR1); \

Modified: branches/context_pmc3/src/jit/sun4/jit_emit.h
==============================================================================
--- branches/context_pmc3/src/jit/sun4/jit_emit.h	Wed Sep  2 23:55:32 2009	(r40932)
+++ branches/context_pmc3/src/jit/sun4/jit_emit.h	Wed Sep  2 23:57:29 2009	(r40933)
@@ -413,8 +413,12 @@
     emitm_jumpl_i(jit_info->native_ptr, XSR1, 0, XSR1);
 
     /* fixup where we have the Parrot registers - context switches */
-    emitm_ld_i(jit_info->native_ptr, Parrot_jit_intrp, offsetof(Interp, ctx.bp),
-        Parrot_jit_regbase);
+    emitm_ld_i(jit_info->native_ptr, Parrot_jit_intrp, offsetof(Interp, ctx),
+        Parrot_jit_intrp);
+    emitm_ld_i(jit_info->native_ptr, Parrot_jit_intrp, offsetof(PMC, data),
+        Parrot_jit_intrp);
+    emitm_ld_i(jit_info->native_ptr, Parrot_jit_intrp,
+        offsetof(Parrot_Context, bp), Parrot_jit_intrp);
 }
 
 /* Generate conditional branch to offset from current parrot op */


More information about the parrot-commits mailing list