Author: leo
Date: Mon Feb  6 13:17:51 2006
New Revision: 11458

Modified:
   trunk/src/jit/ppc/core.jit
Log:
PIC/JIT - ppc: implement get_params

* pass arguments to JITted subroutines
* currently INTVAL only (and constant ints)


Modified: trunk/src/jit/ppc/core.jit
==============================================================================
--- trunk/src/jit/ppc/core.jit  (original)
+++ trunk/src/jit/ppc/core.jit  Mon Feb  6 13:17:51 2006
@@ -983,8 +983,8 @@ extern Parrot_returncc {
     if (jit_info->code_type == JIT_CODE_FILE)
        Parrot_jit_restart_op(jit_info, interpreter);
     else {
-       /* fetch args[1] -> retval */
-       jit_emit_lwz(jit_info->native_ptr, r3, 4, r5);
+       /* fetch args[n+1] -> retval */
+       jit_emit_lwz(jit_info->native_ptr, r3, 4 + jit_info->n_args * 4, r5);
 
        /* return sequence */
        jit_emit_lwz(jit_info->native_ptr, r1, 0, r1);
@@ -996,7 +996,20 @@ extern Parrot_returncc {
 }
 
 extern Parrot_get_params_pc {
-    Parrot_jit_normal_op(jit_info, interpreter);
+    if (jit_info->code_type == JIT_CODE_FILE)
+       Parrot_jit_normal_op(jit_info, interpreter);
+    else {
+        PMC *sig_pmc;
+        INTVAL *sig_bits, i, n;
+
+        sig_pmc = CONTEXT(interpreter->ctx)->constants[CUR_OPCODE[1]]->u.key;
+        sig_bits = PMC_data(sig_pmc);
+        n = PMC_int_val(sig_pmc);
+        jit_info->n_args = n;
+        for (i = 0; i < n; ++i) {
+            jit_emit_lwz(NATIVECODE, MAP(2+i), 4 + i*4, r5);
+       }
+    }
 }
 
 Parrot_get_results_pc {

Reply via email to