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 {