X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=src%2Fvm%2Fjit%2Falpha%2Fmd-abi.c;h=73530aab9d7bc4668fa38bfd9d599f13521a73a9;hb=fa3fb41985bc911b5300f144b740159ac0c1eea0;hp=1026f87adda794b7fc968187f80efde0e50b501c;hpb=1cb4ca468a985116ea6ef3fba8c0bf3c4d824dc6;p=cacao.git diff --git a/src/vm/jit/alpha/md-abi.c b/src/vm/jit/alpha/md-abi.c index 1026f87ad..73530aab9 100644 --- a/src/vm/jit/alpha/md-abi.c +++ b/src/vm/jit/alpha/md-abi.c @@ -1,9 +1,7 @@ /* src/vm/jit/alpha/md-abi.c - functions for Alpha ABI - 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 + Copyright (C) 1996-2005, 2006, 2007, 2008 + CACAOVM - Verein zur Foerderung der freien virtuellen Maschine CACAO This file is part of CACAO. @@ -22,8 +20,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - $Id: md-abi.c 7335 2007-02-12 10:43:33Z twisti $ - */ @@ -32,12 +28,11 @@ #include "vm/jit/alpha/md-abi.h" +#include "vm/descriptor.hpp" #include "vm/global.h" #include "vm/jit/abi.h" -#include "vmcore/descriptor.h" - /* register descripton array **************************************************/ @@ -64,6 +59,39 @@ const char *abi_registers_integer_name[] = { "t10", "t11", "ra", "pv", "at", "gp", "sp", "zero" }; +const s4 abi_registers_integer_argument[] = { + 16, /* a0 */ + 17, /* a1 */ + 18, /* a2 */ + 19, /* a3 */ + 20, /* a4 */ + 21, /* a5 */ +}; + +const s4 abi_registers_integer_saved[] = { + 9, /* s0 */ + 10, /* s1 */ + 11, /* s2 */ + 12, /* s3 */ + 13, /* s4 */ + 14, /* s5 */ + 15, /* s6 */ +}; + +const s4 abi_registers_integer_temporary[] = { + 1, /* t0 */ + 2, /* t1 */ + 3, /* t2 */ + 4, /* t3 */ + 5, /* t4 */ + 6, /* t5 */ + 7, /* t6 */ + 8, /* t7 */ + 22, /* t8 */ + 23, /* t9 */ + 24, /* t10 */ +}; + s4 nregdescfloat[] = { REG_RET, REG_TMP, REG_SAV, REG_SAV, REG_SAV, REG_SAV, REG_SAV, REG_SAV, @@ -74,6 +102,43 @@ s4 nregdescfloat[] = { }; +const s4 abi_registers_float_argument[] = { + 16, /* fa0 */ + 17, /* fa1 */ + 18, /* fa2 */ + 19, /* fa3 */ + 20, /* fa4 */ + 21, /* fa5 */ +}; + +const s4 abi_registers_float_saved[] = { + 2, /* fs0 */ + 3, /* fs1 */ + 4, /* fs2 */ + 5, /* fs3 */ + 6, /* fs4 */ + 7, /* fs5 */ + 8, /* fs6 */ + 9, /* fs7 */ +}; + +const s4 abi_registers_float_temporary[] = { + 1, /* ft0 */ + 10, /* ft1 */ + 11, /* ft2 */ + 12, /* ft3 */ + 13, /* ft4 */ + 14, /* ft5 */ + 15, /* ft6 */ + 22, /* ft7 */ + 23, /* ft8 */ + 24, /* ft9 */ + 25, /* ft10 */ + 26, /* ft11 */ + 27, /* ft12 */ +}; + + /* md_param_alloc ************************************************************** Allocate the parameters of the given method descriptor according to the @@ -90,7 +155,7 @@ void md_param_alloc(methoddesc *md) /* set default values */ - reguse = 0; + reguse = 0; stacksize = 0; /* get params field of methoddesc */ @@ -104,13 +169,15 @@ void md_param_alloc(methoddesc *md) case TYPE_LNG: if (i < INT_ARG_CNT) { pd->inmemory = false; - pd->regoff = reguse; + pd->index = reguse; + pd->regoff = abi_registers_integer_argument[reguse]; reguse++; md->argintreguse = reguse; } else { pd->inmemory = true; - pd->regoff = stacksize; + pd->index = stacksize; + pd->regoff = stacksize * 8; stacksize++; } break; @@ -119,13 +186,15 @@ void md_param_alloc(methoddesc *md) case TYPE_DBL: if (i < FLT_ARG_CNT) { pd->inmemory = false; - pd->regoff = reguse; + pd->index = reguse; + pd->regoff = abi_registers_float_argument[reguse]; reguse++; md->argfltreguse = reguse; } else { pd->inmemory = true; - pd->regoff = stacksize; + pd->index = stacksize; + pd->regoff = stacksize * 8; stacksize++; } break; @@ -174,7 +243,7 @@ void md_param_alloc_native(methoddesc *md) NOTE: Do not pass a LOCALVAR in stackslot->varnum. *******************************************************************************/ -void md_return_alloc(jitdata *jd, stackptr stackslot) +void md_return_alloc(jitdata *jd, stackelement_t *stackslot) { methodinfo *m; methoddesc *md; @@ -211,4 +280,5 @@ void md_return_alloc(jitdata *jd, stackptr stackslot) * c-basic-offset: 4 * tab-width: 4 * End: + * vim:noexpandtab:sw=4:ts=4: */