Index: config/gen/platform/darwin.h
===================================================================
RCS file: /cvs/public/parrot/config/gen/platform/darwin.h,v
retrieving revision 1.7
diff -u -r1.7 darwin.h
--- config/gen/platform/darwin.h	17 Dec 2003 02:27:35 -0000	1.7
+++ config/gen/platform/darwin.h	1 Jan 2004 00:07:18 -0000
@@ -35,7 +35,7 @@
 #if defined(PARROT_HAS_HEADER_SIGNAL) && defined(PARROT_HAS_HEADER_SYSTYPES)
 #  include <signal.h>
 #  include <sys/types.h>
-#  define dumpcore() kill(0, SIGQUIT)
+#  define dumpcore() raise(SIGQUIT)
 #endif
 
 #ifdef PARROT_HAS_HEADER_SIGNAL
Index: config/gen/platform/generic.h
===================================================================
RCS file: /cvs/public/parrot/config/gen/platform/generic.h,v
retrieving revision 1.13
diff -u -r1.13 generic.h
--- config/gen/platform/generic.h	18 Dec 2003 12:20:32 -0000	1.13
+++ config/gen/platform/generic.h	1 Jan 2004 00:07:18 -0000
@@ -33,7 +33,7 @@
 #if defined(PARROT_HAS_HEADER_SIGNAL) && defined(PARROT_HAS_HEADER_SYSTYPES)
 #  include <signal.h>
 #  include <sys/types.h>
-#  define dumpcore() kill(0, SIGQUIT)
+#  define dumpcore() raise(SIGQUIT)
 #endif
 
 #ifdef PARROT_HAS_HEADER_SIGNAL
Index: config/gen/platform/openbsd.h
===================================================================
RCS file: /cvs/public/parrot/config/gen/platform/openbsd.h,v
retrieving revision 1.3
diff -u -r1.3 openbsd.h
--- config/gen/platform/openbsd.h	14 Dec 2003 12:55:21 -0000	1.3
+++ config/gen/platform/openbsd.h	1 Jan 2004 00:07:18 -0000
@@ -38,7 +38,7 @@
 #if defined(PARROT_HAS_HEADER_SIGNAL) && defined(PARROT_HAS_HEADER_SYSTYPES)
 #  include <signal.h>
 #  include <sys/types.h>
-#  define dumpcore() kill(0, SIGQUIT)
+#  define dumpcore() raise(SIGQUIT)
 #endif
 
 #ifdef PARROT_HAS_HEADER_SIGNAL
Index: jit/ppc/core.jit
===================================================================
RCS file: /cvs/public/parrot/jit/ppc/core.jit,v
retrieving revision 1.14
diff -u -r1.14 core.jit
--- jit/ppc/core.jit	27 May 2003 05:37:08 -0000	1.14
+++ jit/ppc/core.jit	1 Jan 2004 00:07:19 -0000
@@ -6,10 +6,10 @@
 ;
 
 Parrot_end {
-    jit_emit_add_rri_i(NATIVECODE, r1, r1, 64);
+    jit_emit_lwz(NATIVECODE, r1, 0, r1);
     jit_emit_lwz(NATIVECODE, r0, 8, r1);
     jit_emit_mtlr(NATIVECODE, r0);
-;    jit_emit_lmw(NATIVECODE, r30, -8, r1);
+    jit_emit_lmw(NATIVECODE, r13, -PPC_JIT_REGISTER_SAVE_SPACE, r1);
     jit_emit_blr(NATIVECODE);
 }
 
@@ -540,11 +540,11 @@
 }
 
 Parrot_if_n_ic {
-    Parrot_ifunless_i_ic s/<COND>/BNE/
+    Parrot_ifunless_n_ic s/<COND>/BNE/
 }
 
 Parrot_unless_n_ic {
-    Parrot_ifunless_i_ic s/<COND>/BEQ/
+    Parrot_ifunless_n_ic s/<COND>/BEQ/
 }
 
 TEMPLATE Parrot_branch_i_i_ic {
Index: jit/ppc/jit_emit.h
===================================================================
RCS file: /cvs/public/parrot/jit/ppc/jit_emit.h,v
retrieving revision 1.31
diff -u -r1.31 jit_emit.h
--- jit/ppc/jit_emit.h	13 Oct 2003 13:36:11 -0000	1.31
+++ jit/ppc/jit_emit.h	1 Jan 2004 00:07:19 -0000
@@ -202,7 +202,7 @@
 #  define jit_emit_bcctrx(pc, bo, bi, type, lk) \
     *(pc++) = 19 << 2 | bo >> 3; \
     *(pc++) = (char)(bo << 5 | bi); \
-    *(pc++) = type >> 8; \
+    *(pc++) = type >> 7; \
     *(pc++) = (char)(type << 1| lk)
 
 #  define jit_emit_bcctr(pc, bo, bi) \
@@ -391,10 +391,13 @@
 #  define jit_emit_fsub_rrr(pc, D, A, B) jit_emit_3a(pc, 63, D, A, B, 0, 20, 0)
 #  define jit_emit_fmul_rrr(pc, D, A, B) jit_emit_3a(pc, 63, D, A, 0, B, 25, 0)
 #  define jit_emit_fdiv_rrr(pc, D, A, B) jit_emit_3a(pc, 63, D, A, B, 0, 18, 0)
+#  define jit_emit_fsel(pc, D, A, B, C) jit_emit_3a(pc, 63, D, A, B, C, 23, 0)
 
 #  define jit_emit_fabs_rrr(pc, D, A)  jit_emit_3reg_x(pc, 63, D, 0, A, 264, 0)
 #  define jit_emit_fneg_rrr(pc, D, A)   jit_emit_3reg_x(pc, 63, D, 0, A, 40, 0)
 
+#  define jit_emit_fmr(pc, D, A)   jit_emit_3reg_x(pc, 63, D, 0, A, 72, 0)
+
 /* not in core.ops, but probably should be: */
 #  define jit_emit_fsqrt(pc, D, A) jit_emit_3reg(pc, 63, D, 0, A, 0, 18, 0)
 
@@ -558,8 +561,9 @@
       jit_emit_oris(pc, D, D, (long)imm >> 16); }
 
 #  define add_disp(pc, D, disp) \
-    jit_emit_addis(pc, D, r15, (long)disp >> 16); \
-    jit_emit_add_rri_i(pc, D, D, (long)disp & 0xffff)
+    jit_emit_mov_ri_i(pc, ISR1, disp); \
+    jit_emit_add_rrr(pc, D, r15, ISR1)
+
 
 #  if EXEC_CAPABLE
 #   define load_nc(pc, D, disp) \
@@ -572,6 +576,10 @@
 #endif /* EXEC_CAPABLE */
 
 #endif /* JIT_EMIT */
+
+#define PPC_JIT_REGISTER_SAVE_SPACE (4*19)
+#define PPC_JIT_FRAME_SIZE (PPC_JIT_REGISTER_SAVE_SPACE + 68)
+
 #if JIT_EMIT == 2
 
 void
@@ -579,9 +587,9 @@
                  struct Parrot_Interp * interpreter)
 {
     jit_emit_mflr(jit_info->native_ptr, r0);
-/*    jit_emit_stmw(jit_info->native_ptr, r30, -8, r1); */
+    jit_emit_stmw(jit_info->native_ptr, r13, -PPC_JIT_REGISTER_SAVE_SPACE, r1);
     jit_emit_stw(jit_info->native_ptr, r0, 8, r1);
-    jit_emit_stwu(jit_info->native_ptr, r1, -64, r1);
+    jit_emit_stwu(jit_info->native_ptr, r1, -PPC_JIT_FRAME_SIZE, r1);
     jit_emit_xor_rrr(jit_info->native_ptr, r31, r31, r31);
     jit_emit_mov_rr(jit_info->native_ptr, r13, r3);
     if (!jit_info->objfile) {
@@ -609,6 +617,7 @@
         ((long)jit_info->cur_op - (long)interpreter->code->byte_code));
     jit_emit_mov_rr(jit_info->native_ptr, r4, r13);
 
+    /*
     Parrot_jit_newfixup(jit_info);
 
     jit_info->arena.fixups->type = JIT_PPC_CALL;
@@ -616,6 +625,12 @@
         (void (*)(void))interpreter->op_func_table[*(jit_info->cur_op)];
 
     _emit_bx(jit_info->native_ptr, 1, 0);
+    */
+
+    jit_emit_mov_ri_i(jit_info->native_ptr, ISR1, 
+            (long)(interpreter->op_func_table[*(jit_info->cur_op)]));
+    jit_emit_mtctr(jit_info->native_ptr, ISR1);
+    jit_emit_bctrl(jit_info->native_ptr);
 }
 
 void
Index: t/op/jit.t
===================================================================
RCS file: /cvs/public/parrot/t/op/jit.t,v
retrieving revision 1.5
diff -u -r1.5 jit.t
--- t/op/jit.t	22 Mar 2003 11:26:15 -0000	1.5
+++ t/op/jit.t	1 Jan 2004 00:07:19 -0000
@@ -1,6 +1,6 @@
 #! perl -w
 # test WRT JIT register allocation
-use Parrot::Test tests => 57;
+use Parrot::Test tests => 58;
 
 output_is(<<'CODE', <<'OUTPUT', "add_i_i_i 1,2,3 mapped");
 set I0,0
@@ -1119,3 +1119,21 @@
 ok 3
 ok 4
 OUTPUT
+
+my $code;
+for (0..4096)
+{
+	$code .= qq{   set S0, "hello"\n};
+}
+$code .= <<CODE;
+   print S0
+   print "\\ndone\\n"
+   end
+CODE
+
+output_is($code, <<OUTPUT, "large code" );
+hello
+done
+OUTPUT
+
+1;
Index: t/op/stacks.t
===================================================================
RCS file: /cvs/public/parrot/t/op/stacks.t,v
retrieving revision 1.31
diff -u -r1.31 stacks.t
--- t/op/stacks.t	18 Jul 2003 16:01:11 -0000	1.31
+++ t/op/stacks.t	1 Jan 2004 00:07:19 -0000
@@ -241,9 +241,10 @@
 for (0..1024) {
    $code .= "   popi\n";
    $code .= "   print I0\n";
+   $code .= "   print \",\"\n";
    $code .= "   print I31\n";
    $code .= "   print \"\\n\"\n";
-   $output .= (1024-$_) . "$_\n";
+   $output .= (1024-$_) . ",$_\n";
 }
 $code .= "      end\n";
 output_is($code, $output, "pushi & popi (deep)" );
