Author: leo
Date: Sun Feb  5 15:32:19 2006
New Revision: 11433

Modified:
   trunk/src/jit/ppc/core.jit
   trunk/src/jit/ppc/jit_emit.h
Log:
PIC/JIT - -Ofun / ppc

* implement set_returns and returncc in JIT/ppc
* create a JIT function for .sub __pic_test ; return(x) ; .end


Modified: trunk/src/jit/ppc/core.jit
==============================================================================
--- trunk/src/jit/ppc/core.jit  (original)
+++ trunk/src/jit/ppc/core.jit  Sun Feb  5 15:32:19 2006
@@ -953,7 +953,46 @@ Parrot_set_args_pc {
 }
 
 extern Parrot_set_returns_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, sig;
+
+       sig_pmc = CONTEXT(interpreter->ctx)->constants[CUR_OPCODE[1]]->u.key;
+       sig_bits = PMC_data(sig_pmc);
+       sig = sig_bits[0];
+       /* ISR2 <- args[0] */ 
+       jit_emit_lwz(jit_info->native_ptr, ISR2, 0, r5);
+       switch (sig & (PARROT_ARG_TYPE_MASK|PARROT_ARG_CONSTANT)) {
+           case PARROT_ARG_INTVAL:
+               jit_emit_stw(jit_info->native_ptr, MAP(2), 0, ISR2);
+               break;
+           case PARROT_ARG_INTVAL|PARROT_ARG_CONSTANT:
+               jit_emit_mov_ri_i(NATIVECODE, ISR1, *INT_CONST[2]);
+               jit_emit_stw(jit_info->native_ptr, ISR1, 0, ISR2);
+               break;
+           default:
+               internal_exception(1, "set_returns_jit - unknown tyep");
+               break;
+       }
+    }
+}
+
+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);
+
+       /* return sequence */
+       jit_emit_lwz(jit_info->native_ptr, r1, 0, r1);
+       jit_emit_lwz(jit_info->native_ptr, r31, -4, r1);
+       jit_emit_lwz(jit_info->native_ptr, r0, 8, r1);   /* opt */
+       jit_emit_mtlr(jit_info->native_ptr, r0);   /* opt */
+       jit_emit_blr(jit_info->native_ptr);
+    }
 }
 
 extern Parrot_get_params_pc {

Modified: trunk/src/jit/ppc/jit_emit.h
==============================================================================
--- trunk/src/jit/ppc/jit_emit.h        (original)
+++ trunk/src/jit/ppc/jit_emit.h        Sun Feb  5 15:32:19 2006
@@ -846,23 +846,7 @@ Parrot_jit_begin_sub_regs(Parrot_jit_inf
     /* r31 = 0 - needed for load immediate */
     jit_emit_xor_rrr(jit_info->native_ptr, r31, r31, r31);
 
-    /* TEST implement __pic_test */
 
-    /* fetch args[0] */
-    jit_emit_lwz(jit_info->native_ptr, ISR1, 0, r5);
-    /* set return value to 42 */
-    jit_emit_mov_ri_i(jit_info->native_ptr, ISR2, 42);
-    jit_emit_stw(jit_info->native_ptr, ISR2, 0, ISR1);
-
-    /* fetch args[1] -> retval */
-    jit_emit_lwz(jit_info->native_ptr, r3, 4, r5);
-
-    /* return sequence */
-    jit_emit_lwz(jit_info->native_ptr, r1, 0, r1);
-    jit_emit_lwz(jit_info->native_ptr, r31, -4, r1);
-    jit_emit_lwz(jit_info->native_ptr, r0, 8, r1);   /* opt */
-    jit_emit_mtlr(jit_info->native_ptr, r0);   /* opt */
-    jit_emit_blr(jit_info->native_ptr);
 }
 
 static void

Reply via email to