From b9074332ac3915f5dd71907184fcfe6361f15cdc Mon Sep 17 00:00:00 2001 From: tbfg Date: Fri, 11 May 2007 18:58:24 +0000 Subject: [PATCH] * src/vm/jit/m68k/linux/md-abi.h (ADR_SAV_CNT): Increased by one (%fp). (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 | 6 +++--- src/vm/jit/m68k/asmpart.S | 14 +++++++++++--- src/vm/jit/m68k/linux/md-abi.c | 2 +- src/vm/jit/m68k/linux/md-abi.h | 4 ++-- 4 files changed, 17 insertions(+), 9 deletions(-) diff --git a/src/vm/jit/m68k/arch.h b/src/vm/jit/m68k/arch.h index e23bff44d..8169fbd4a 100644 --- a/src/vm/jit/m68k/arch.h +++ b/src/vm/jit/m68k/arch.h @@ -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 @@ -73,12 +72,14 @@ #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 *********************************************************************/ diff --git a/src/vm/jit/m68k/asmpart.S b/src/vm/jit/m68k/asmpart.S index 7638cefc3..c963ae599 100644 --- a/src/vm/jit/m68k/asmpart.S +++ b/src/vm/jit/m68k/asmpart.S @@ -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 diff --git a/src/vm/jit/m68k/linux/md-abi.c b/src/vm/jit/m68k/linux/md-abi.c index 538669dff..8ac8ade0a 100644 --- a/src/vm/jit/m68k/linux/md-abi.c +++ b/src/vm/jit/m68k/linux/md-abi.c @@ -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 */ diff --git a/src/vm/jit/m68k/linux/md-abi.h b/src/vm/jit/m68k/linux/md-abi.h index f52c6d675..f6a72e2ac 100644 --- a/src/vm/jit/m68k/linux/md-abi.h +++ b/src/vm/jit/m68k/linux/md-abi.h @@ -106,10 +106,10 @@ #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 ***************************************************/ -- 2.25.1