* src/vm/jit/m68k/linux/md-abi.h (ADR_SAV_CNT): Increased by one (%fp).
authortbfg <none@none>
Fri, 11 May 2007 18:58:24 +0000 (18:58 +0000)
committertbfg <none@none>
Fri, 11 May 2007 18:58:24 +0000 (18:58 +0000)
(ADR_RES_CNT): Decreased by one (%fp).

* src/vm/jit/m68k/linux/md-abi.c (nregdescadr): Declared %fp a
REG_SAV.

* src/vm/jit/m68k/arch.h (SUPPORT_DIVISION): Defined.

* src/vm/jit/m68k/asmpart.S (asm_handle_exception): Additional
logic to restore %fp when unwinding the stack.

src/vm/jit/m68k/arch.h
src/vm/jit/m68k/asmpart.S
src/vm/jit/m68k/linux/md-abi.c
src/vm/jit/m68k/linux/md-abi.h

index e23bff44d01b9d4c2befc0251822b1d46af4de3e..8169fbd4ad576fb2171f230e41839fb749ecef42 100644 (file)
@@ -37,7 +37,7 @@
 
 #define U8_AVAILABLE                     1
 
-#define SUPPORT_DIVISION                 0
+#define SUPPORT_DIVISION                 1
 #define SUPPORT_LONG                     0
 
 #define SUPPORT_FMOD                     0
@@ -62,7 +62,6 @@
                                             /* only store REG_ZERO            */
 
 
-/* float **********************************************************************/
 
 #if defined(ENABLE_SOFTFLOAT)
        #define SUPPORT_FLOAT                   0
        #define SUPPORT_FLOAT                    1
        #define SUPPORT_DOUBLE                   1
 
+/* float **********************************************************************/
        #if defined(ENABLE_SOFT_FLOAT_CMP)
                #define SUPPORT_FLOAT_CMP               0
        #else
                #define SUPPORT_FLOAT_CMP               1
        #endif
 
+/* double *********************************************************************/
        #if defined(ENABLE_SOFT_DOUBLE_CMP)
                #define SUPPORT_DOUBLE_CMP              0
        #else
@@ -88,7 +89,6 @@
 #endif
 
 
-/* double *********************************************************************/
 
 
 
index 7638cefc3125657ab6d9a026c04eff77163e6dc8..c963ae599b70e43444d44a41edf4e6a5c83ff471 100644 (file)
@@ -414,10 +414,18 @@ L_asm_handle_ex_int_done:
 
        movel   %a3@(IntSave), %d0
        andil   #0xffff0000, %d0        /* this is AdrSave */
-       tstl    %d0
-       beq     L_handle_exception_nat_catched_no_adr
+       lsrl    #8, %d0
+       lsrl    #8, %d0
+
+       cmpb    #0, %d0
+       beq     L_asm_handle_ex_adr_done
+       moveal  -(%a0), %fp
+
+       cmpb    #1,%d0
+       beq     L_asm_handle_ex_adr_done
        moveal  -(%a0), %a5
-L_handle_exception_nat_catched_no_adr:
+
+L_asm_handle_ex_adr_done:
 
 #if !defined(ENABLE_SOFTFLOAT)
        movel   %a3@(FltSave), %d0
index 538669dff97c1afa6779013243e0cafdbd0ade02..8ac8ade0ac20756aa7b4b490f4998bb072448e89 100644 (file)
@@ -51,7 +51,7 @@ const s4 abi_registers_integer_temporary[]    = {0,1};
 /* Address register description */
 /* A6 is used as framepointer by native code, so be sure it is REG_RES */
 /*                        A0,      A1,   ATMP1,   ATMP2,   ATMP3,      A5,  REG_FP, REG_SP */
-s4 nregdescadr[] = { REG_TMP, REG_TMP, REG_RES, REG_RES, REG_RES, REG_SAV, REG_RES, REG_RES, REG_END };
+s4 nregdescadr[] = { REG_TMP, REG_TMP, REG_RES, REG_RES, REG_RES, REG_SAV, REG_SAV, REG_RES, REG_END };
 
 
 /* Floatingpoint register description */
index f52c6d67570e5106310252ee3d28afe23b0bae39..f6a72e2ac43ff8673fa3326ed3ffcf4895a485a0 100644 (file)
 #endif
 
 #define ADR_REG_CNT      8
-#define ADR_SAV_CNT      1
+#define ADR_SAV_CNT      2
 #define ADR_ARG_CNT      0
 #define ADR_TMP_CNT      2
-#define ADR_RES_CNT      5
+#define ADR_RES_CNT      4
 
 
 /* packed register defines ***************************************************/