Author: leo
Date: Sun Feb  5 12:26:15 2006
New Revision: 11426

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

* create a JIT function for .sub __pic_test ; return(42) ; .end
* a lot hardcoded for now, but it works :)


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 12:26:15 2006
@@ -837,6 +837,32 @@ static void
 Parrot_jit_begin_sub_regs(Parrot_jit_info_t *jit_info,
                  Interp * interpreter)
 {
+    jit_emit_mflr(jit_info->native_ptr, r0);    /* optional */
+    jit_emit_stw(jit_info->native_ptr, r0, 8, r1); /* stw     r0,8(r1) */
+    /* preserve r31 */
+    jit_emit_stw(jit_info->native_ptr, r31, -4, r1); 
+    /* 24 linkage area, 0 params , 1 word local, roundup => 32 */
+    jit_emit_stwu(jit_info->native_ptr, r1, -32, r1);
+    /* 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
@@ -1050,7 +1076,7 @@ static const jit_arch_info arch_info = {
             floatval_map_sub
         },
         {
-            Parrot_jit_begin_sub_regs,   /* emit code prologue */
+            Parrot_jit_begin_sub_regs,  /* emit code prologue */
             7,                  /* 7 mapped ints */
             7,                  /* all volatile */
             intval_map_sub,

Reply via email to