X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=src%2Fvm%2Fjit%2Fpowerpc%2Flinux%2Fmd-abi.c;h=184bb07905d5600a490f87a8af80b224060ba6e1;hb=fa3fb41985bc911b5300f144b740159ac0c1eea0;hp=b57a0815d57ddd4d5a177f12b576901c36918507;hpb=b6fbb1958c8971b06e87ea3c37be0deaff131768;p=cacao.git diff --git a/src/vm/jit/powerpc/linux/md-abi.c b/src/vm/jit/powerpc/linux/md-abi.c index b57a0815d..184bb0790 100644 --- a/src/vm/jit/powerpc/linux/md-abi.c +++ b/src/vm/jit/powerpc/linux/md-abi.c @@ -1,9 +1,7 @@ /* src/vm/jit/powerpc/linux/md-abi.c - functions for PowerPC Linux 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. @@ -32,11 +30,11 @@ #include "vm/jit/powerpc/linux/md-abi.h" +#include "vm/descriptor.hpp" #include "vm/global.h" #include "vm/jit/abi.h" - -#include "vmcore/descriptor.h" +#include "vm/jit/stack.h" /* register descripton arrays *************************************************/ @@ -402,16 +400,19 @@ void md_param_alloc_native(methoddesc *md) *******************************************************************************/ -void md_return_alloc(jitdata *jd, stackptr stackslot) +void md_return_alloc(jitdata *jd, stackelement_t *stackslot) { methodinfo *m; + codeinfo *code; registerdata *rd; methoddesc *md; + varinfo *v; /* get required compiler data */ - m = jd->m; - rd = jd->rd; + m = jd->m; + code = jd->code; + rd = jd->rd; md = m->parseddesc; @@ -419,32 +420,37 @@ void md_return_alloc(jitdata *jd, stackptr stackslot) their argument register -> so leafmethods with paramcount > 0 could already use R3 == a00! */ - if (!jd->isleafmethod || (md->paramcount == 0)) { + if (!code_is_leafmethod(code) || (md->paramcount == 0)) { /* Only precolor the stackslot, if it is not a SAVEDVAR <-> has not to survive method invokations. */ if (!(stackslot->flags & SAVEDVAR)) { - VAR(stackslot->varnum)->flags = PREALLOC; + v = VAR(stackslot->varnum); + v->flags = PREALLOC; - if (IS_INT_LNG_TYPE(md->returntype.type)) { - if (!IS_2_WORD_TYPE(md->returntype.type)) { - if (rd->argintreguse < 1) - rd->argintreguse = 1; + switch (md->returntype.type) { + case TYPE_INT: + case TYPE_ADR: + if (rd->argintreguse < 1) + rd->argintreguse = 1; - VAR(stackslot->varnum)->vv.regoff = REG_RESULT; - } - else { - if (rd->argintreguse < 2) - rd->argintreguse = 2; + v->vv.regoff = REG_RESULT; + break; - VAR(stackslot->varnum)->vv.regoff = REG_RESULT_PACKED; - } - } - else { /* float/double */ + case TYPE_LNG: + if (rd->argintreguse < 2) + rd->argintreguse = 2; + + v->vv.regoff = REG_RESULT_PACKED; + break; + + case TYPE_FLT: + case TYPE_DBL: if (rd->argfltreguse < 1) rd->argfltreguse = 1; - - VAR(stackslot->varnum)->vv.regoff = REG_FRESULT; + + v->vv.regoff = REG_FRESULT; + break; } } } @@ -462,4 +468,5 @@ void md_return_alloc(jitdata *jd, stackptr stackslot) * c-basic-offset: 4 * tab-width: 4 * End: + * vim:noexpandtab:sw=4:ts=4: */