PatchSet 6676 
Date: 2005/07/01 16:53:35
Author: guilhem
Branch: HEAD
Tag: (none) 
Log:
Important fixes for JIT3/ppc.


        * config/powerpc/jit.h: Include jit-labels.h
        (CALL_KAFFE_EXCEPTION): Use apple syntax on register if necessary.

        * kaffe/kaffevm/jit3/icode.c
        (cvt_float_int, cvt_double_int): Imported JIT code to do a precise NaN
        conversion.

Members: 
        ChangeLog:1.4201->1.4202 
        config/powerpc/jit.h:1.2->1.3 
        kaffe/kaffevm/jit3/icode.c:1.55->1.56 

Index: kaffe/ChangeLog
diff -u kaffe/ChangeLog:1.4201 kaffe/ChangeLog:1.4202
--- kaffe/ChangeLog:1.4201      Fri Jul  1 11:06:31 2005
+++ kaffe/ChangeLog     Fri Jul  1 16:53:35 2005
@@ -1,3 +1,12 @@
+2005-07-01  Guilhem Lavaux  <[EMAIL PROTECTED]>
+
+       * config/powerpc/jit.h: Include jit-labels.h
+       (CALL_KAFFE_EXCEPTION): Use apple syntax on register if necessary.
+
+       * kaffe/kaffevm/jit3/icode.c
+       (cvt_float_int, cvt_double_int): Imported JIT code to do a precise NaN
+       conversion.
+
 2005-07-01  Davanum Srinivas <[EMAIL PROTECTED]>
 
        * binreloc/prefix.c: (br_locate) Fix for cygwin.
Index: kaffe/config/powerpc/jit.h
diff -u kaffe/config/powerpc/jit.h:1.2 kaffe/config/powerpc/jit.h:1.3
--- kaffe/config/powerpc/jit.h:1.2      Tue Dec 21 00:15:28 2004
+++ kaffe/config/powerpc/jit.h  Fri Jul  1 16:53:39 2005
@@ -93,6 +93,16 @@
 /*
  * Call a jitted java exception handler.
  */
+#if defined(__APPLE__)
+#define CALL_KAFFE_EXCEPTION(frame, handler, object) \
+       asm volatile ("mr r1, %0\n" \
+                     "\tlwz r10, 0(r1)\n" \
+                     "\tlmw r14, -72(r10)\n" \
+                     "\tmr r3, %1\n" \
+                     "\tmtctr %2\n" \
+                     "\tbctr\n" \
+                     : : "r" (frame), "r" (object), "r" (handler) : "r3")
+#else
 #define CALL_KAFFE_EXCEPTION(frame, handler, object) \
        asm volatile ("mr 1, %0\n" \
                      "\tlwz 10, 0(1)\n" \
@@ -101,6 +111,7 @@
                      "\tmtctr %2\n" \
                      "\tbctr\n" \
                      : : "r" (frame), "r" (object), "r" (handler) : "r3")
+#endif
 
 /*
  * Call a JanosVM catastrophe handler.
@@ -124,5 +135,7 @@
 #define KAFFEJIT_TO_NATIVE(M)
 
 #define PUSHARG_FORWARDS
+
+#include "jit-labels.h"
 
 #endif
Index: kaffe/kaffe/kaffevm/jit3/icode.c
diff -u kaffe/kaffe/kaffevm/jit3/icode.c:1.55 
kaffe/kaffe/kaffevm/jit3/icode.c:1.56
--- kaffe/kaffe/kaffevm/jit3/icode.c:1.55       Mon May 30 09:24:01 2005
+++ kaffe/kaffe/kaffevm/jit3/icode.c    Fri Jul  1 16:53:39 2005
@@ -4291,6 +4291,36 @@
        used_ieee_rounding = true;
 #if defined(HAVE_cvt_float_int)
        slot_slot_slot(dst, 0, src, HAVE_cvt_float_int, Tcomplex);
+#elif defined(HAVE_cvt_float_int_ieee)
+       {
+         SlotInfo *tmp;
+         
+         slot_alloctmp(tmp);
+
+         end_sub_block();
+         and_int_const(tmp, src, FEXPMASK);
+         cbranch_int_const_ne(tmp, FEXPMASK, reference_label(1, 1));
+         
+         and_int_const(tmp, src, FMANMASK);
+         cbranch_int_const_eq(tmp, 0, reference_label(1, 2));
+
+          start_sub_block();
+         move_int_const(dst, 0);
+         end_sub_block();
+         branch_a(reference_label(1, 3));
+
+         set_label(1, 1);
+         set_label(1, 2);
+         start_sub_block();
+         slot_slot_lslot(dst, 0, src, HAVE_cvt_float_int_ieee, Tcomplex);
+         end_sub_block();
+
+         set_label(1, 3);
+
+         start_sub_block();
+
+         slot_freetmp(tmp);
+       }
 #else
        begin_func_sync();
        pusharg_float(src, 0);
@@ -4338,6 +4368,39 @@
        used_ieee_rounding = true;
 #if defined(HAVE_cvt_double_int)
        slot_slot_lslot(dst, NULL, src, HAVE_cvt_double_int, Tcomplex);
+#elif defined(HAVE_cvt_double_int_ieee)
+       {
+         SlotInfo *tmp;
+         int i;
+         
+         end_sub_block();
+         slot_alloc2tmp(tmp);
+
+         and_long_const(tmp, src, DEXPMASK);
+         cbranch_int_const_ne(LSLOT(tmp), (jint)(DEXPMASK & 0xffffffff), 
reference_label(1, 1));
+         cbranch_int_const_ne(HSLOT(tmp), (jint)((DEXPMASK >> 32) & 
0xffffffff), reference_label(1, 2));
+         
+         and_long_const(tmp, src, DMANMASK);
+         cbranch_int_const_ne(LSLOT(tmp), 0, reference_label(1, 3));
+         cbranch_int_const_eq(HSLOT(tmp), 0, reference_label(1, 4));
+
+         set_label(1, 3);
+         start_sub_block();
+         move_int_const(dst, 0);
+         end_sub_block();
+         branch_a(reference_label(1, 5));
+
+         set_label(1, 4);
+         set_label(1, 1);
+         set_label(1, 2);
+         start_sub_block();
+         slot_slot_lslot(dst, 0, src, HAVE_cvt_double_int_ieee, Tcomplex);
+         end_sub_block();
+
+         set_label(1, 5);
+         slot_free2tmp(tmp);
+         start_sub_block();
+       }
 #else
        begin_func_sync();
        pusharg_double(src, 0);

_______________________________________________
kaffe mailing list
[email protected]
http://kaffe.org/cgi-bin/mailman/listinfo/kaffe

Reply via email to