(stackelement): Moved from here...
* src/vm/jit/stack.h (stackelement_t): ...to here.
* src/vm/jit/abi.h,
src/vm/jit/allocator/liveness.c,
src/vm/jit/allocator/lsra.c,
src/vm/jit/allocator/lsra.h,
src/vm/jit/allocator/simplereg.c,
src/vm/jit/alpha/md-abi.c,
src/vm/jit/arm/md-abi.c,
src/vm/jit/i386/asmpart.S,
src/vm/jit/i386/md-abi.c,
src/vm/jit/loop/analyze.c,
src/vm/jit/m68k/linux/md-abi.c,
src/vm/jit/mips/md-abi.c,
src/vm/jit/optimizing/lifetimes.h,
src/vm/jit/optimizing/lsra.c,
src/vm/jit/parse.c,
src/vm/jit/powerpc/darwin/md-abi.c,
src/vm/jit/powerpc/linux/md-abi.c,
src/vm/jit/powerpc/netbsd/md-abi.c,
src/vm/jit/powerpc64/linux/md-abi.c,
src/vm/jit/s390/md-abi.c,
src/vm/jit/sparc64/md-abi.c,
src/vm/jit/stack.c,
src/vm/jit/x86_64/md-abi.c: Replaced stackptr with stackelement_t*.
/* src/vm/jit/abi.h - common ABI defines
- 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.
#include "config.h"
#include "vm/types.h"
+#include "arch.h"
+
#include "vm/jit/abi-asm.h"
#include "vm/jit/jit.h"
+#include "vm/jit/stack.h"
-#include "arch.h"
/* ABI externs ****************************************************************/
void md_param_alloc_native(methoddesc *md);
/* machine dependent return value handling function */
-void md_return_alloc(jitdata *jd, stackptr stackslot);
+void md_return_alloc(jitdata *jd, stackelement_t *stackslot);
#endif /* _ABI_H */
/* src/vm/jit/allocator/liveness.c - liveness analysis for lsra
- Copyright (C) 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) 2005, 2006, 2007, 2008
+ CACAOVM - Verein zur Foerderung der freien virtuellen Maschine CACAO
This file is part of CACAO.
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
- Contact: cacao@cacaojvm.org
-
- Authors: Christian Ullrich
-
-
*/
/* function prototypes */
void liveness_scan_registers_canditates(jitdata *jd, int b_index, int iindex,
- stackptr src, lv_sets *sets);
-void liveness_set_stack(lsradata *ls, int block, int g_iindex, stackptr s,
+ stackelement_t* src, lv_sets *sets);
+void liveness_set_stack(lsradata *ls, int block, int g_iindex, stackelement_t* s,
lv_sets *sets, int op);
void liveness_set_local(lsradata *ls, int block, int g_iindex, s4 v_index,
int type, lv_sets *sets, int op);
-void liveness_add_ss(struct lifetime *lt, stackptr s) {
+void liveness_add_ss(struct lifetime *lt, stackelement_t* s) {
struct stackslot *ss;
/* Stackslot noch nicht eingetragen? */
void liveness_setup(jitdata *jd) {
int i, icount, b_index;
- stackptr src;
+ stackelement_t* src;
methodinfo *m;
lsradata *ls;
void liveness_init(jitdata *jd) {
int i, b_index, len;
int lifetimes;
- stackptr src, dst;
+ stackelement_t* src, dst;
instruction *iptr;
methodinfo *m;
lsradata *ls;
void liveness_scan_basicblock(jitdata *jd, int b_index,
lv_sets *sets, int lifetimes) {
int iindex;
- stackptr src;
+ stackelement_t* src;
instruction *iptr;
int i;
methodinfo *m;
int i, p, t;
methoddesc *md;
#ifdef LV_DEBUG_CHECK
- stackptr s;
+ stackelement_t* s;
#endif
methodinfo *m;
registerdata *rd;
}
-struct lifetime *liveness_get_ss_lifetime(lsradata *ls, stackptr s) {
+struct lifetime *liveness_get_ss_lifetime(lsradata *ls, stackelement_t* s) {
struct lifetime *n;
if (s->varnum >= 0) { /* new stackslot lifetime */
return n;
}
-void liveness_set_stack(lsradata *ls, int block, int g_iindex, stackptr s,
+void liveness_set_stack(lsradata *ls, int block, int g_iindex, stackelement_t* s,
lv_sets *sets,
int op) {
struct lifetime *n;
}
void liveness_scan_registers_canditates(jitdata *jd, int b_index, int iindex,
- stackptr src, lv_sets *sets)
+ stackelement_t* src, lv_sets *sets)
{
/* methodinfo *lm; */
builtintable_entry *bte;
methoddesc *md;
int i, g_iindex;
instruction *iptr;
- stackptr dst;
+ stackelement_t* dst;
methodinfo *m;
lsradata *ls;
/* src/vm/jit/allocator/lsra.c - linear scan register allocator
- Copyright (C) 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) 2005, 2006, 2007, 2008
+ CACAOVM - Verein zur Foerderung der freien virtuellen Maschine CACAO
This file is part of CACAO.
void lsra_setflags(int *, int);
#ifdef LSRA_DEBUG_VERBOSE
-void lsra_dump_stack(stackptr );
+void lsra_dump_stack(stackelement_t* );
void print_lifetimes(jitdata *, int *, int);
#endif
void lsra_scan_registers_canditates(jitdata *, int);
void lsra_join_lifetimes(jitdata *, int);
-void _lsra_new_stack( lsradata *, stackptr , int , int, int);
-void _lsra_from_stack(lsradata *, stackptr , int , int, int);
-void lsra_add_ss(struct lifetime *, stackptr );
+void _lsra_new_stack( lsradata *, stackelement_t* , int , int, int);
+void _lsra_from_stack(lsradata *, stackelement_t* , int , int, int);
+void lsra_add_ss(struct lifetime *, stackelement_t* );
void lsra_usage_local(lsradata *, s4 , int , int , int , int );
#endif
#if defined(LSRA_DEBUG_CHECK)
methodinfo *m;
int b_index;
- stackptr in,out;
+ stackelement_t* in,out;
int ind, outd;
#endif
}
}
-struct stackslot *lsra_make_ss(stackptr s, int bb_index)
+struct stackslot *lsra_make_ss(stackelement_t* s, int bb_index)
{
struct stackslot *ss;
return ss;
}
-void lsra_add_ss(struct lifetime *lt, stackptr s) {
+void lsra_add_ss(struct lifetime *lt, stackelement_t* s) {
struct stackslot *ss;
/* Stackslot not in list? */
}
}
-struct lifetime *get_ss_lifetime(lsradata *ls, stackptr s) {
+struct lifetime *get_ss_lifetime(lsradata *ls, stackelement_t* s) {
struct lifetime *n;
if (s->varnum >= 0) { /* new stackslot lifetime */
#define lsra_new_stack(ls, s, block, instr) \
if ((s)->varkind != ARGVAR) _lsra_new_stack(ls, s, block, instr, LSRA_STORE)
-void _lsra_new_stack(lsradata *ls, stackptr s, int block, int instr, int store)
+void _lsra_new_stack(lsradata *ls, stackelement_t* s, int block, int instr, int store)
{
struct lifetime *n;
if ((s)->varkind != ARGVAR) _lsra_from_stack(ls, s, block, instr, LSRA_LOAD)
#define lsra_pop_from_stack(ls, s, block, instr) \
if ((s)->varkind != ARGVAR) _lsra_from_stack(ls, s, block, instr, LSRA_POP)
-void _lsra_from_stack(lsradata *ls, stackptr s, int block, int instr, int store)
+void _lsra_from_stack(lsradata *ls, stackelement_t* s, int block, int instr, int store)
{
struct lifetime *n;
}
#ifdef LSRA_DEBUG_VERBOSE
-void lsra_dump_stack(stackptr s)
+void lsra_dump_stack(stackelement_t* s)
{
while (s!=NULL) {
printf("%p(R%3i N%3i K%3i T%3i F%3i) ",(void *)s,s->regoff, s->varnum,
int i;
int opcode;
int iindex;
- stackptr src;
- stackptr dst;
+ stackelement_t* src;
+ stackelement_t* dst;
instruction *iptr;
bool join_ret; /* for lsra_join* Macros */
methodinfo *m;
/* src/vm/jit/allocator/lsra.h - linear scan register allocator header
- Copyright (C) 2005, 2006 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) 2005, 2006, 2008
+ CACAOVM - Verein zur Foerderung der freien virtuellen Maschine CACAO
This file is part of CACAO.
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
- Contact: cacao@cacaojvm.org
-
- Authors: Christian Ullrich
-
- Changes: Edwin Steiner
-
*/
struct stackslot {
- stackptr s;
+ stackelement_t* s;
int bb;
struct stackslot *next;
};
/* src/vm/jit/allocator/simplereg.c - register allocator
- Copyright (C) 1996-2005, 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, 2007, 2008
+ CACAOVM - Verein zur Foerderung der freien virtuellen Maschine CACAO
This file is part of CACAO.
int i;
s4 len;
#if 0
- stackptr src, src_old;
- stackptr dst;
+ stackelement_t* src, src_old;
+ stackelement_t* dst;
instruction *iptr;
#endif
basicblock *bptr;
/* 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.
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;
/* src/vm/jit/arm/md-abi.c - functions for arm 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.
*******************************************************************************/
-void md_return_alloc(jitdata *jd, stackptr stackslot)
+void md_return_alloc(jitdata *jd, stackelement_t *stackslot)
{
methodinfo *m;
codeinfo *code;
asm_vm_call_method_float:
asm_vm_call_method_double:
push bp
- mov sp,bp /* save stackptr */
+ mov sp,bp /* save stack pointer */
sub $(4*4),sp /* create stackframe */
and $0xfffffff0,sp /* align stack to 16-byte */
/* src/vm/jit/i386/md-abi.c - functions for i386 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.
*******************************************************************************/
-void md_return_alloc(jitdata *jd, stackptr stackslot)
+void md_return_alloc(jitdata *jd, stackelement_t *stackslot)
{
/* nothing */
}
/* src/vm/jit/jit.h - code generation header
- 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.
/* forward typedefs ***********************************************************/
typedef struct jitdata jitdata;
-typedef struct stackelement stackelement;
-typedef stackelement *stackptr;
typedef struct basicblock basicblock;
typedef struct instruction instruction;
typedef struct insinfo_inline insinfo_inline;
#include "vm/jit/codegen-common.h"
#include "vm/jit/reg.h"
#include "vm/jit/replace.h"
+#include "vm/jit/stack.h"
#include "vm/jit/stacktrace.h"
#if defined(ENABLE_INLINING)
#include "vm/jit/verify/typeinfo.h"
-#include "vmcore/descriptor.h"
#include "vmcore/method.h"
#include "vmcore/references.h"
instruction *instructions; /* ICMDs, valid between parse and stack */
basicblock *basicblocks; /* start of basic block list */
- stackelement *stack; /* XXX should become stack.c internal */
+ stackelement_t *stack; /* XXX should become stack.c internal */
s4 instructioncount;/* XXX remove this? */
s4 basicblockcount; /* number of basic blocks */
s4 stackcount; /* number of stackelements to allocate */
};
-/* stack element structure ****************************************************/
-
-/* flags */
-
-#define SAVEDVAR 1 /* variable has to survive method invocations */
-#define INMEMORY 2 /* variable stored in memory */
-#define SAVREG 4 /* allocated to a saved register */
-#define ARGREG 8 /* allocated to an arg register */
-#define PASSTHROUGH 32 /* stackslot was passed-through by an ICMD */
-#define PREALLOC 64 /* preallocated var like for ARGVARS. Used */
- /* with the new var system */
-#define INOUT 128 /* variable is an invar or/and an outvar */
-
-#define IS_SAVEDVAR(x) ((x) & SAVEDVAR)
-#define IS_INMEMORY(x) ((x) & INMEMORY)
-
-
-/* variable kinds */
-
-#define UNDEFVAR 0 /* stack slot will become temp during regalloc*/
-#define TEMPVAR 1 /* stack slot is temp register */
-#define STACKVAR 2 /* stack slot is numbered stack slot */
-#define LOCALVAR 3 /* stack slot is local variable */
-#define ARGVAR 4 /* stack slot is argument variable */
-
-
-struct stackelement {
- stackptr prev; /* pointer to next element towards bottom */
- instruction *creator; /* instruction that created this element */
- s4 type; /* slot type of stack element */
- s4 flags; /* flags (SAVED, INMEMORY) */
- s4 varkind; /* kind of variable or register */
- s4 varnum; /* number of variable */
-};
-
/* macros for accessing variables *********************************************
Use VAROP for s1, s2, s3 and dst operands (eg. VAROP(iptr->s1)),
if (
(icmd_table[iptr->opc].dataflow == DF_INVOKE) ||
(icmd_table[iptr->opc].dataflow == DF_BUILTIN)
- ) {
+ ) {
return instruction_call_site(iptr)->returntype.type != TYPE_VOID;
} else {
return icmd_table[iptr->opc].dataflow >= DF_DST_BASE;
/* src/vm/jit/loop/analyze.c - bound check removal functions
- Copyright (C) 1996-2005, 2006 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, 2008
+ CACAOVM - Verein zur Foerderung der freien virtuellen Maschine CACAO
This file is part of CACAO.
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
- Contact: cacao@cacaojvm.org
-
- Authors: Christopher Kruegel
-
- Changes: Christian Thalinger
-
- Contains the functions which perform the bound check removals. With
- the loops identified, these functions scan the code for array
- accesses that take place in loops and try to guarantee that their
- bounds are never violated. The function to call is
- optimize_loops().
-
*/
#include "mm/memory.h"
#include "toolbox/logging.h"
+
#include "vm/jit/jit.h"
+#include "vm/jit/stack.h"
+
#include "vm/jit/loop/analyze.h"
#include "vm/jit/loop/graph.h"
#include "vm/jit/loop/loop.h"
/* copy a stack and return the start pointer of the newly created one
*/
-stackptr copy_stack_from(stackptr source) {
- stackptr current, top;
+stackelement_t* copy_stack_from(stackelement_t* source) {
+ stackelement_t* current, top;
if (source == NULL)
return NULL;
inst: pointer to the new instruction
tos: stackpointer before this operation is executed
- newstack: temporary stackptr
+ newstack: temporary stackelement_t*
stackdepth: counts the current stackdepth
original start: blockpointer to the head of the new, optimized loop
*/
/* tos and newstack are needed by the macros, that insert instructions into */
/* the new loop head */
- stackptr newstack, tos;
+ stackelement_t* newstack, tos;
exceptiontable *ex;
/* prevent some compiler warnings */
/* src/vm/jit/m68k/linux/md-abi.c - linux specific abi functions
- 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.
%d0 for all word types %d0-%d1 for 2 word types. %f0-%f1 for floats/doubles
*******************************************************************************/
-void md_return_alloc(jitdata *jd, stackptr stackslot)
+void md_return_alloc(jitdata *jd, stackelement_t *stackslot)
{
/* The Problem: %a0, %a1, %d0 and %d1 are scratch registers by platform abi
/* src/vm/jit/mips/md-abi.c - functions for MIPS 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.
#include "config.h"
#include <stdarg.h>
+#include <stdint.h>
#include "vm/types.h"
#include "vm/global.h"
#include "vm/jit/abi.h"
+#include "vm/jit/stack.h"
#include "vmcore/descriptor.h"
#include "vmcore/method.h"
*******************************************************************************/
-void md_return_alloc(jitdata *jd, stackptr stackslot)
+void md_return_alloc(jitdata *jd, stackelement_t *stackslot)
{
methodinfo *m;
methoddesc *md;
-/* src/vm/jit/lsra/graph.h - lifetimes header
+/* src/vm/jit/optimizing/lifetimes.h - lifetimes header
- Copyright (C) 2005, 2006 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) 2005, 2006, 2008
+ CACAOVM - Verein zur Foerderung der freien virtuellen Maschine CACAO
This file is part of CACAO.
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA.
- Contact: cacao@complang.tuwien.ac.at
-
- Authors: Christian Ullrich
-
-
*/
typedef struct site *lt_iterator;
void lt_scanlifetimes(jitdata *, graphdata *, dominatordata *);
-void lt_add_ss(struct lifetime *, stackptr );
+void lt_add_ss(struct lifetime *, stackelement_t *);
void lt_remove_use_site(struct lifetime *lt, int block, int iindex);
void lt_move_use_sites(struct lifetime *from, struct lifetime *to);
void lt_lifeness_analysis(jitdata *, graphdata *);
void lsra_setup(jitdata *);
void lsra_main(jitdata *);
#ifdef LSRA_DEBUG_VERBOSE
-void lsra_dump_stack(stackptr );
+void lsra_dump_stack(stackelement_t*);
void print_lifetimes(jitdata *, int *, int);
void print_all_lifetimes(jitdata *);
#endif
#if defined(LSRA_DEBUG_CHECK)
#if 0
int b_index;
- stackptr in,out;
+ stackelement_t* in,out;
int ind, outd;
#endif
#endif
/* allocate stack table */
- jd->stack = DMNEW(stackelement, jd->stackcount);
+ jd->stack = DMNEW(stackelement_t, jd->stackcount);
/* everything's ok */
-/* src/vm/jit/powerpc/darwin/md-abi.c - functions for PowerPC Darwin ABI
+/* src/vm/jit/powerpc/darwin/md-abi.c - PowerPC Darwin 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.
#include "vm/global.h"
#include "vm/jit/abi.h"
+#include "vm/jit/stack.h"
#include "vmcore/descriptor.h"
*******************************************************************************/
-void md_return_alloc(jitdata *jd, stackptr stackslot)
+void md_return_alloc(jitdata *jd, stackelement_t* stackslot)
{
methodinfo *m;
codeinfo *code;
/* 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.
#include "vm/global.h"
#include "vm/jit/abi.h"
+#include "vm/jit/stack.h"
#include "vmcore/descriptor.h"
*******************************************************************************/
-void md_return_alloc(jitdata *jd, stackptr stackslot)
+void md_return_alloc(jitdata *jd, stackelement_t *stackslot)
{
methodinfo *m;
codeinfo *code;
-/* src/vm/jit/powerpc/netbsd/md-abi.c - functions for PowerPC NetBSD ABI
+/* src/vm/jit/powerpc/netbsd/md-abi.c - PowerPC NetBSD ABI
- Copyright (C) 1996-2005, 2006 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, 2008
+ CACAOVM - Verein zur Foerderung der freien virtuellen Maschine CACAO
This file is part of CACAO.
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
- Contact: cacao@cacaojvm.org
-
- Authors: Christian Thalinger
-
- Changes: Christian Ullrich
-
*/
#include "vm/descriptor.h"
#include "vm/global.h"
+
#include "vm/jit/abi.h"
+#include "vm/jit/stack.h"
#define _ALIGN(a) do { if ((a) & 1) (a)++; } while (0)
*******************************************************************************/
-void md_return_alloc(jitdata *jd, stackptr stackslot)
+void md_return_alloc(jitdata *jd, stackelement_t* stackslot)
{
methodinfo *m;
registerdata *rd;
/* src/vm/jit/powerpc64/linux/md-abi.c - functions for PowerPC64 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.
#include "vm/global.h"
#include "vm/jit/abi.h"
+#include "vm/jit/stack.h"
#include "vmcore/descriptor.h"
*******************************************************************************/
-void md_return_alloc(jitdata *jd, stackptr stackslot)
+void md_return_alloc(jitdata *jd, stackelement_t *stackslot)
{
methodinfo *m;
codeinfo *code;
-/* src/vm/jit/x86_64/md-abi.c - functions for x86_64 Linux ABI
+/* src/vm/jit/s390/md-abi.c - s390 Linux ABI
- Copyright (C) 1996-2005, 2006 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, 2008
+ CACAOVM - Verein zur Foerderung der freien virtuellen Maschine CACAO
This file is part of CACAO.
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
- Contact: cacao@cacaojvm.org
-
- Authors: Christian Thalinger
-
- Changes:
-
*/
+
#include "config.h"
#include "vm/global.h"
+#include "vm/types.h"
+
#include "vm/jit/jit.h"
+#include "vm/jit/stack.h"
+
#include "vm/jit/s390/md-abi.h"
-#include "vm/types.h"
#include "vmcore/descriptor.h"
#include <assert.h>
+
/* register descripton array **************************************************/
s4 nregdescint[] = {
*******************************************************************************/
-void md_return_alloc(jitdata *jd, stackptr stackslot)
+void md_return_alloc(jitdata *jd, stackelement_t* stackslot)
{
methodinfo *m;
codeinfo *code;
/* src/vm/jit/sparc64/md-abi.c - functions for Sparc ABI
- Copyright (C) 1996-2005, 2006 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, 2008
+ CACAOVM - Verein zur Foerderung der freien virtuellen Maschine CACAO
This file is part of CACAO.
#include "vm/global.h"
#include "vm/jit/abi.h"
+#include "vm/jit/stack.h"
#include "vmcore/descriptor.h"
#include "mm/memory.h"
#include <assert.h>
+
/* helper macros for allocation methods ***************************************/
#define MIN(a,b) (((a) <= (b)) ? (a) : (b))
*******************************************************************************/
-void md_return_alloc(jitdata *jd, stackptr stackslot)
+void md_return_alloc(jitdata *jd, stackelement_t* stackslot)
{
/* XXX */
}
/* src/vm/jit/stack.c - stack analysis
- 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.
struct stackdata_t {
basicblock *bptr; /* the current basic block being analysed */
- stackptr new; /* next free stackelement */
+ stackelement_t *new; /* next free stackelement */
s4 vartop; /* next free variable index */
s4 localcount; /* number of locals (at the start of var) */
s4 varcount; /* maximum number of variables expected */
bool repeat; /* if true, iterate the analysis again */
exception_entry **handlers; /* exception handlers for the current block */
exception_entry *extableend; /* points to the last exception entry */
- stackelement exstack; /* instack for exception handlers */
+ stackelement_t exstack; /* instack for exception handlers */
};
/* forward declarations *******************************************************/
static void stack_create_invars(stackdata_t *sd, basicblock *b,
- stackptr curstack, int stackdepth);
+ stackelement_t * curstack, int stackdepth);
static void stack_create_invars_from_outvars(stackdata_t *sd, basicblock *b);
#if defined(STACK_VERBOSE)
static void stack_verbose_block_enter(stackdata_t *sd, bool reanalyse);
static void stack_verbose_block_exit(stackdata_t *sd, bool superblockend);
static void stack_verbose_show_state(stackdata_t *sd, instruction *iptr,
- stackptr curstack);
+ stackelement_t * curstack);
#endif
*******************************************************************************/
static void stack_create_invars(stackdata_t *sd, basicblock *b,
- stackptr curstack, int stackdepth)
+ stackelement_t * curstack, int stackdepth)
{
- stackptr sp;
+ stackelement_t * sp;
int i;
int index;
varinfo *dv;
*******************************************************************************/
static basicblock * stack_check_invars(stackdata_t *sd, basicblock *b,
- stackptr curstack, int stackdepth)
+ stackelement_t * curstack, int stackdepth)
{
int i;
- stackptr sp;
+ stackelement_t * sp;
basicblock *orig;
bool separable;
varinfo *sv;
*******************************************************************************/
-static stackptr stack_create_instack(stackdata_t *sd)
+static stackelement_t * stack_create_instack(stackdata_t *sd)
{
- stackptr sp;
+ stackelement_t * sp;
int depth;
int index;
*******************************************************************************/
-static basicblock *stack_mark_reached(stackdata_t *sd, basicblock *b, stackptr curstack, int stackdepth)
+static basicblock *stack_mark_reached(stackdata_t *sd, basicblock *b, stackelement_t * curstack, int stackdepth)
{
assert(b != NULL);
*******************************************************************************/
-static void stack_change_to_tempvar(stackdata_t *sd, stackptr sp,
+static void stack_change_to_tempvar(stackdata_t *sd, stackelement_t * sp,
instruction *ilimit)
{
s4 newindex;
registerdata *rd;
stackdata_t sd;
int stackdepth;
- stackptr curstack; /* current stack top */
- stackptr copy;
+ stackelement_t *curstack; /* current stack top */
+ stackelement_t *copy;
int opcode; /* opcode of current instruction */
int i, varindex;
int javaindex;
basicblock *original;
exception_entry *ex;
- stackptr *last_store_boundary;
- stackptr coalescing_boundary;
+ stackelement_t **last_store_boundary;
+ stackelement_t *coalescing_boundary;
- stackptr src1, src2, src3, src4, dst1, dst2;
+ stackelement_t *src1, *src2, *src3, *src4, *dst1, *dst2;
branch_target_t *table;
lookup_target_t *lookup;
for (i = 0; i < m->maxstack * 5; i++)
jd->interface_map[i].flags = UNUSED;
- last_store_boundary = DMNEW(stackptr, m->maxlocals);
+ last_store_boundary = DMNEW(stackelement_t *, m->maxlocals);
/* initialize flags and invars (none) of first block */
printf("\n");
}
-static void stack_verbose_show_state(stackdata_t *sd, instruction *iptr, stackptr curstack)
+static void stack_verbose_show_state(stackdata_t *sd, instruction *iptr, stackelement_t *curstack)
{
- stackptr sp;
+ stackelement_t *sp;
s4 i;
s4 depth;
varinfo *v;
- stackptr *stack;
+ stackelement_t **stack;
printf(" javalocals ");
show_javalocals_array(sd->jd, sd->javalocals, sd->maxlocals, SHOW_STACK);
i++;
depth = i;
- stack = MNEW(stackptr, depth);
+ stack = MNEW(stackelement_t *, depth);
for(sp = curstack; sp; sp = sp->prev)
stack[--i] = sp;
-/* vm/jit/stack.h - stack analysis header
+/* src/vm/jit/stack.h - stack analysis header
- Copyright (C) 1996-2005, 2006 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, 2008
+ CACAOVM - Verein zur Foerderung der freien virtuellen Maschine CACAO
This file is part of CACAO.
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
- Contact: cacao@cacaojvm.org
-
- Authors: Christian Thalinger
-
- Changes: Christian Ullrich
- Edwin Steiner
-
*/
#ifndef _STACK_H
#define _STACK_H
+/* forward typedefs ***********************************************************/
+
+typedef struct stackelement_t stackelement_t;
+
+
#include "config.h"
+#include <stdint.h>
+
#include "vm/types.h"
#include "vm/exceptions.h"
#include "vm/global.h"
+
#include "vm/jit/jit.h"
#include "vm/jit/reg.h"
+/* stack element structure ****************************************************/
+
+/* flags */
+
+#define SAVEDVAR 1 /* variable has to survive method invocations */
+#define INMEMORY 2 /* variable stored in memory */
+#define SAVREG 4 /* allocated to a saved register */
+#define ARGREG 8 /* allocated to an arg register */
+#define PASSTHROUGH 32 /* stackslot was passed-through by an ICMD */
+#define PREALLOC 64 /* preallocated var like for ARGVARS. Used */
+ /* with the new var system */
+#define INOUT 128 /* variable is an invar or/and an outvar */
+
+#define IS_SAVEDVAR(x) ((x) & SAVEDVAR)
+#define IS_INMEMORY(x) ((x) & INMEMORY)
+
+
+/* variable kinds */
+
+#define UNDEFVAR 0 /* stack slot will become temp during regalloc*/
+#define TEMPVAR 1 /* stack slot is temp register */
+#define STACKVAR 2 /* stack slot is numbered stack slot */
+#define LOCALVAR 3 /* stack slot is local variable */
+#define ARGVAR 4 /* stack slot is argument variable */
+
+
+struct stackelement_t {
+ stackelement_t *prev; /* pointer to next element towards bottom */
+ instruction *creator; /* instruction that created this element */
+ s4 type; /* slot type of stack element */
+ s4 flags; /* flags (SAVED, INMEMORY) */
+ s4 varkind; /* kind of variable or register */
+ s4 varnum; /* number of variable */
+};
+
+
/* macros used internally by analyse_stack ************************************/
/*--------------------------------------------------*/
/* src/vm/jit/x86_64/md-abi.c - functions for x86_64 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.
#include "vm/jit/abi.h"
#include "vm/jit/jit.h" /* for REG_* (maybe can be removed) */
+#include "vm/jit/stack.h"
#include "vmcore/descriptor.h"
*******************************************************************************/
-void md_return_alloc(jitdata *jd, stackptr stackslot)
+void md_return_alloc(jitdata *jd, stackelement_t *stackslot)
{
methodinfo *m;
codeinfo *code;