X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=src%2Fvm%2Fjit%2Fmips%2Fmd-abi.h;h=ab8bf31994831343799d39b5bf8c0aa2bfe6db82;hb=9f859ad50d3d5d98c185d40b86b2179bc4dc9aeb;hp=993bb833240bc9a25501208e5871c91bc197cbb9;hpb=d06153329f75cecd1a958d2799e04458d7db3ff5;p=cacao.git diff --git a/src/vm/jit/mips/md-abi.h b/src/vm/jit/mips/md-abi.h index 993bb8332..ab8bf3199 100644 --- a/src/vm/jit/mips/md-abi.h +++ b/src/vm/jit/mips/md-abi.h @@ -1,9 +1,9 @@ /* src/vm/jit/mips/md-abi.h - defines for MIPS ABI - Copyright (C) 1996-2005 R. Grafl, A. Krall, C. Kruegel, C. Oates, - R. Obermaisser, M. Platter, M. Probst, S. Ring, E. Steiner, - C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich, J. Wenninger, - Institut f. Computersprachen - TU Wien + Copyright (C) 1996-2005, 2006, 2007 R. Grafl, A. Krall, C. Kruegel, + C. Oates, R. Obermaisser, M. Platter, M. Probst, S. Ring, + E. Steiner, C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich, + J. Wenninger, Institut f. Computersprachen - TU Wien This file is part of CACAO. @@ -19,16 +19,8 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA - 02111-1307, USA. - - Contact: cacao@complang.tuwien.ac.at - - Authors: Christian Thalinger - - Changes: - - $Id: md-abi.h 2713 2005-06-15 14:10:47Z twisti $ + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301, USA. */ @@ -47,8 +39,16 @@ #define REG_RESULT 2 /* to deliver method results */ +#if SIZEOF_VOID_P == 4 +#define REG_RESULT2 3 /* to deliver method results (low 32-bits) */ +#endif + #define REG_ITMP1 1 /* temporary register */ +#if SIZEOF_VOID_P == 8 #define REG_ITMP2 3 /* temporary register and method pointer */ +#else +#define REG_ITMP2 24 /* temporary register and method pointer */ +#endif #define REG_ITMP3 25 /* temporary register */ #define REG_RA 31 /* return address */ @@ -58,36 +58,50 @@ #define REG_PV 30 /* procedure vector, must be provided by caller */ #define REG_METHODPTR 25 /* pointer to the place from where the procedure */ /* vector has been fetched */ -#define REG_ITMP1_XPTR 1 /* exception pointer = temporary register 1 */ -#define REG_ITMP2_XPC 3 /* exception pc = temporary register 2 */ +#define REG_ITMP1_XPTR REG_ITMP1 /* exception pointer = temporary register 1 */ +#define REG_ITMP2_XPC REG_ITMP2 /* exception pc = temporary register 2 */ +#define REG_A0 4 /* define some argument registers */ +#define REG_A1 5 +#define REG_A2 6 +#define REG_A3 7 -/* floating point registers */ +#if SIZEOF_VOID_P == 8 +#define REG_A4 8 +#endif -#define REG_FRESULT 0 /* to deliver floating point method results */ +/* floating point registers */ -#define REG_FTMP1 1 /* temporary floating point register */ -#define REG_FTMP2 2 /* temporary floating point register */ -#define REG_FTMP3 3 /* temporary floating point register */ +#define REG_FRESULT 0 /* to deliver floating point method results */ -#define REG_IFTMP 1 /* temporary integer and floating point register */ +#define REG_IFTMP 1 /* temporary integer and floating point register */ #if SIZEOF_VOID_P == 8 /* MIPS64 defines */ +#define REG_FTMP1 1 /* temporary floating point register */ +#define REG_FTMP2 2 /* temporary floating point register */ +#define REG_FTMP3 3 /* temporary floating point register */ + +#define REG_FA0 12 /* define some argument registers */ +#define REG_FA1 13 +#define REG_FA2 14 + #define INT_REG_CNT 32 /* number of integer registers */ -#define INT_SAV_CNT 8 /* number of int callee saved registers */ -#define INT_ARG_CNT 8 /* number of int argument registers */ -#define INT_TMP_CNT 5 /* number of integer temporary registers */ -#define INT_RES_CNT 3 /* number of integer reserved registers */ +#define INT_SAV_CNT 8 /* number of int callee saved registers */ +#define INT_ARG_CNT 8 /* number of int argument registers */ +#define INT_TMP_CNT 5 /* number of integer temporary registers */ +#define INT_RES_CNT 10 /* number of integer reserved registers */ + /* + 1 REG_RET totals to 32 */ #define FLT_REG_CNT 32 /* number of float registers */ -#define FLT_SAV_CNT 4 /* number of flt callee saved registers */ -#define FLT_ARG_CNT 8 /* number of flt argument registers */ -#define FLT_TMP_CNT 15 /* number of float temporary registers */ -#define FLT_RES_CNT 3 /* number of float reserved registers */ +#define FLT_SAV_CNT 4 /* number of flt callee saved registers */ +#define FLT_ARG_CNT 8 /* number of flt argument registers */ +#define FLT_TMP_CNT 16 /* number of float temporary registers */ +#define FLT_RES_CNT 3 /* number of float reserved registers */ + /* + 1 REG_RET totals to 32 */ #define TRACE_ARGS_NUM 8 @@ -95,21 +109,26 @@ /* MIPS32 defines */ +#define REG_FTMP1 2 /* temporary floating point register */ +#define REG_FTMP2 4 /* temporary floating point register */ +#define REG_FTMP3 6 /* temporary floating point register */ + #define INT_REG_CNT 32 /* number of integer registers */ #define INT_SAV_CNT 8 /* number of int callee saved registers */ #define INT_ARG_CNT 4 /* number of int argument registers */ -#define INT_TMP_CNT 9 /* number of integer temporary registers */ -#define INT_RES_CNT 3 /* number of integer reserved registers */ +#define INT_TMP_CNT 8 /* number of integer temporary registers */ +#define INT_RES_CNT 11 /* number of integer reserved registers */ + /* + 1 REG_RET totals to 32 */ -#if 0 +#if !defined(ENABLE_SOFT_FLOAT) #define FLT_REG_CNT 32 /* number of float registers */ -#define FLT_SAV_CNT 4 /* number of flt callee saved registers */ -#define FLT_ARG_CNT 8 /* number of flt argument registers */ -#define FLT_TMP_CNT 15 /* number of float temporary registers */ -#define FLT_RES_CNT 3 /* number of float reserved registers */ +#define FLT_SAV_CNT 6 /* number of flt callee saved registers */ +#define FLT_ARG_CNT 2 /* number of flt argument registers */ +#define FLT_TMP_CNT 4 /* number of float temporary registers */ +#define FLT_RES_CNT 4 /* number of float reserved registers */ -#else +#else /* !defined(ENABLE_SOFT_FLOAT) */ #define FLT_REG_CNT 0 /* number of float registers */ #define FLT_SAV_CNT 0 /* number of flt callee saved registers */ @@ -117,12 +136,44 @@ #define FLT_TMP_CNT 0 /* number of float temporary registers */ #define FLT_RES_CNT 0 /* number of float reserved registers */ -#endif +#endif /* !defined(ENABLE_SOFT_FLOAT) */ -#define TRACE_ARGS_NUM 4 +#define TRACE_ARGS_NUM 2 #endif /* SIZEOF_VOID_P == 8 */ + +/* ABI defines ****************************************************************/ + +#if SIZEOF_VOID_P == 8 +# define PA_SIZE 0 /* we don't have a parameter area */ +#else +# define PA_SIZE 4 * 4 /* parameter area is max. 4 * 4 bytes */ +#endif + + +/* packed register defines ****************************************************/ + +#if SIZEOF_VOID_P == 4 +# if WORDS_BIGENDIAN == 1 +# define REG_RESULT_PACKED PACK_REGS(REG_RESULT2, REG_RESULT) + +# define REG_A0_A1_PACKED PACK_REGS(REG_A1, REG_A0) +# define REG_A2_A3_PACKED PACK_REGS(REG_A3, REG_A2) + +# define REG_ITMP12_PACKED PACK_REGS(REG_ITMP2, REG_ITMP1) +# define REG_ITMP23_PACKED PACK_REGS(REG_ITMP3, REG_ITMP2) +# else +# define REG_RESULT_PACKED PACK_REGS(REG_RESULT, REG_RESULT2) + +# define REG_A0_A1_PACKED PACK_REGS(REG_A0, REG_A1) +# define REG_A2_A3_PACKED PACK_REGS(REG_A2, REG_A3) + +# define REG_ITMP12_PACKED PACK_REGS(REG_ITMP1, REG_ITMP2) +# define REG_ITMP23_PACKED PACK_REGS(REG_ITMP2, REG_ITMP3) +# endif +#endif + #endif /* _MD_ABI_H */