CACAO
Data Structures | Macros | Functions
stack.cpp File Reference

Go to the source code of this file.

Data Structures

struct  stackdata_t
 

Macros

#define SBRSTART   typeinfo.elementclass.any
 
#define CHECK_BASIC_TYPE(expected, actual)
 
#define REQUIRE(num)
 
#define CHECKOVERFLOW
 
#define GET_NEW_INDEX(sd, new_varindex)
 
#define RELEASE_INDEX(sd, varindex)
 
#define GET_NEW_VAR(sd, newvarindex, newtype)
 
#define IS_INOUT(sp)   (sd.var[(sp)->varnum].flags & INOUT)
 
#define IS_PREALLOC(sp)   (sd.var[(sp)->varnum].flags & PREALLOC)
 
#define IS_TEMPVAR(sp)
 
#define IS_LOCALVAR_SD(sd, sp)   ((sp)->varnum < (sd).localcount)
 
#define IS_LOCALVAR(sp)   IS_LOCALVAR_SD(sd, (sp))
 
#define SET_TEMPVAR(sp)
 
#define SET_PREALLOC(sp)
 
#define CLR_S1   (iptr->s1.varindex = -1)
 
#define USE_S1(type1)
 
#define USE_S1_ANY
 
#define USE_S1_S2(type1, type2)
 
#define USE_S1_S2_ANY_ANY
 
#define USE_S1_S2_S3(type1, type2, type3)
 
#define POPANY
 
#define POP_S1(type1)
 
#define POP_S1_ANY
 
#define POP_S1_S2(type1, type2)
 
#define POP_S1_S2_ANY_ANY
 
#define POP_S1_S2_S3(type1, type2, type3)
 
#define CLR_SX   (iptr->sx.val.l = 0)
 
#define CLR_DST   (iptr->dst.varindex = -1)
 
#define DST(typed, index)
 
#define DST_LOCALVAR(typed, index)
 
#define COPY_VAL_AND_TYPE_VAR(sv, dv)
 
#define COPY_VAL_AND_TYPE(sd, sindex, dindex)   COPY_VAL_AND_TYPE_VAR((sd).var + (sindex), (sd).var + (dindex))
 
#define OP0_1(typed)
 
#define OP1_0_ANY
 
#define OP1_BRANCH(type1)
 
#define OP1_1(type1, typed)
 
#define OP2_1(type1, type2, typed)
 
#define OP0_0
 
#define OP0_BRANCH
 
#define OP1_0(type1)
 
#define OP2_0(type1, type2)
 
#define OP2_BRANCH(type1, type2)
 
#define OP2_0_ANY_ANY
 
#define OP3_0(type1, type2, type3)
 
#define LOAD(type1, index)
 
#define STORE(type1, index)
 
#define DUP_SLOT(sp)
 
#define MOVE_UP(sp)
 
#define COPY_UP(sp)
 
#define COPY_DOWN(s, d)
 
#define MOVE_TO_TEMP(sp)
 
#define BRANCH_TARGET(bt, tempbptr)
 
#define BRANCH(tempbptr)   BRANCH_TARGET(iptr->dst, tempbptr)
 
#define NEWSTACK(s, v, n)
 
#define NEWSTACKn(s, n)   NEWSTACK(s,UNDEFVAR,n)
 
#define NEWSTACK0(s)   NEWSTACK(s,UNDEFVAR,0)
 
#define RELOCATE(index)
 

Functions

static void stack_create_invars (stackdata_t *sd, basicblock *b, stackelement_t *curstack, int stackdepth)
 
static void stack_create_invars_from_outvars (stackdata_t *sd, basicblock *b)
 
bool stack_init (void)
 
static void stack_grow_variable_array (stackdata_t *sd, s4 num)
 
static void stack_append_block (stackdata_t *sd, basicblock *b)
 
static basicblockstack_clone_block (stackdata_t *sd, basicblock *b)
 
static void stack_create_locals (stackdata_t *sd, basicblock *b)
 
static void stack_merge_locals (stackdata_t *sd, basicblock *b)
 
static basicblockstack_check_invars (stackdata_t *sd, basicblock *b, stackelement_t *curstack, int stackdepth)
 
static basicblockstack_check_invars_from_outvars (stackdata_t *sd, basicblock *b)
 
static stackelement_tstack_create_instack (stackdata_t *sd)
 
static basicblockstack_mark_reached (stackdata_t *sd, basicblock *b, stackelement_t *curstack, int stackdepth)
 
static basicblockstack_mark_reached_from_outvars (stackdata_t *sd, basicblock *b)
 
static bool stack_reach_next_block (stackdata_t *sd)
 
static bool stack_reach_handlers (stackdata_t *sd)
 
bool stack_reanalyse_block (stackdata_t *sd)
 
static void stack_change_to_tempvar (stackdata_t *sd, stackelement_t *sp, instruction *ilimit)
 
static void stack_init_javalocals (stackdata_t *sd)
 
bool stack_analyse (jitdata *jd)
 
void stack_javalocals_store (instruction *iptr, s4 *javalocals)
 

Macro Definition Documentation

#define BRANCH (   tempbptr)    BRANCH_TARGET(iptr->dst, tempbptr)

Definition at line 615 of file stack.cpp.

#define BRANCH_TARGET (   bt,
  tempbptr 
)
Value:
do { \
tempbptr = (bt).block; \
tempbptr = stack_mark_reached(&sd, tempbptr, curstack, \
stackdepth); \
if (tempbptr == NULL) \
return false; \
(bt).block = tempbptr; \
} while (0)
static basicblock * stack_mark_reached(stackdata_t *sd, basicblock *b, stackelement_t *curstack, int stackdepth)
Definition: stack.cpp:1253
BeginInst *& block
#define return

Definition at line 605 of file stack.cpp.

#define CHECK_BASIC_TYPE (   expected,
  actual 
)
Value:
do { \
if ((actual) != (expected)) { \
return throw_stack_type_error((Type) (expected)); \
} \
} while (0)
Type
Types used internally by JITTED code.
Definition: global.hpp:117
#define return

Definition at line 203 of file stack.cpp.

#define CHECKOVERFLOW
Value:
do { \
if (stackdepth > m->maxstack) \
if ((iptr->opc != ICMD_ACONST) || INSTRUCTION_MUST_CHECK(iptr)) \
return throw_stack_overflow(); \
} while(0)
#define return
#define INSTRUCTION_MUST_CHECK(iptr)

Definition at line 238 of file stack.cpp.

#define CLR_DST   (iptr->dst.varindex = -1)

Definition at line 412 of file stack.cpp.

#define CLR_S1   (iptr->s1.varindex = -1)

Definition at line 307 of file stack.cpp.

#define CLR_SX   (iptr->sx.val.l = 0)

Definition at line 406 of file stack.cpp.

#define COPY_DOWN (   s,
 
)
Value:
do { \
SET_TEMPVAR((s)); \
iptr->opc = ICMD_COPY; \
iptr->s1.varindex = (s)->varnum; \
iptr->dst.varindex = (d)->varnum; \
(d)->creator = iptr; \
} while (0)
#define SET_TEMPVAR(sp)
Definition: stack.cpp:290

Definition at line 583 of file stack.cpp.

#define COPY_UP (   sp)
Value:
do { \
iptr->opc = ICMD_COPY; \
iptr->s1.varindex = (sp)->varnum; \
curstack->creator = iptr; \
iptr->dst.varindex = curstack->varnum; \
stackdepth++; \
} while (0)
#define SET_TEMPVAR(sp)
Definition: stack.cpp:290
#define DUP_SLOT(sp)
Definition: stack.cpp:553
#define sp
Definition: md-asm.hpp:81

Definition at line 572 of file stack.cpp.

#define COPY_VAL_AND_TYPE (   sd,
  sindex,
  dindex 
)    COPY_VAL_AND_TYPE_VAR((sd).var + (sindex), (sd).var + (dindex))

Definition at line 450 of file stack.cpp.

#define COPY_VAL_AND_TYPE_VAR (   sv,
  dv 
)
Value:
do { \
if (((dv)->type = (sv)->type) == TYPE_RET) { \
(dv)->vv = (sv)->vv; \
(dv)->SBRSTART = (sv)->SBRSTART; \
} \
} while (0)
#define SBRSTART
Definition: stack.cpp:92

Definition at line 433 of file stack.cpp.

#define DST (   typed,
  index 
)
Value:
do { \
NEWSTACKn((typed),(index)); \
curstack->creator = iptr; \
iptr->dst.varindex = (index); \
} while (0)
std::size_t index
#define NEWSTACKn(s, n)
Definition: stack.cpp:640

Definition at line 415 of file stack.cpp.

#define DST_LOCALVAR (   typed,
  index 
)
Value:
do { \
NEWSTACK((typed), LOCALVAR, (index)); \
curstack->creator = iptr; \
iptr->dst.varindex = (index); \
} while (0)
std::size_t index
#define NEWSTACK(s, v, n)
Definition: stack.cpp:623

Definition at line 422 of file stack.cpp.

#define DUP_SLOT (   sp)
Value:
do { \
GET_NEW_VAR(sd, new_index, (sp)->type); \
COPY_VAL_AND_TYPE(sd, (sp)->varnum, new_index); \
NEWSTACK((sp)->type, TEMPVAR, new_index); \
} while(0)
#define COPY_VAL_AND_TYPE(sd, sindex, dindex)
Definition: stack.cpp:450
#define GET_NEW_VAR(sd, newvarindex, newtype)
Definition: stack.cpp:261
#define sp
Definition: md-asm.hpp:81
#define NEWSTACK(s, v, n)
Definition: stack.cpp:623

Definition at line 553 of file stack.cpp.

#define GET_NEW_INDEX (   sd,
  new_varindex 
)
Value:
do { \
assert((sd).vartop < (sd).varcount); \
(new_varindex) = ((sd).vartop)++; \
} while (0)

Definition at line 251 of file stack.cpp.

#define GET_NEW_VAR (   sd,
  newvarindex,
  newtype 
)
Value:
do { \
GET_NEW_INDEX((sd), (newvarindex)); \
(sd).var[newvarindex].type = (newtype); \
} while (0)
#define GET_NEW_INDEX(sd, new_varindex)
Definition: stack.cpp:251

Definition at line 261 of file stack.cpp.

#define IS_INOUT (   sp)    (sd.var[(sp)->varnum].flags & INOUT)

Definition at line 270 of file stack.cpp.

#define IS_LOCALVAR (   sp)    IS_LOCALVAR_SD(sd, (sp))

Definition at line 284 of file stack.cpp.

#define IS_LOCALVAR_SD (   sd,
  sp 
)    ((sp)->varnum < (sd).localcount)

Definition at line 281 of file stack.cpp.

#define IS_PREALLOC (   sp)    (sd.var[(sp)->varnum].flags & PREALLOC)

Definition at line 273 of file stack.cpp.

#define IS_TEMPVAR (   sp)
Value:
( ((sp)->varnum >= sd.localcount) \
&& !(sd.var[(sp)->varnum].flags & (INOUT | PREALLOC)) )
Definition: stack.hpp:46
#define sp
Definition: md-asm.hpp:81

Definition at line 276 of file stack.cpp.

#define LOAD (   type1,
  index 
)
Value:
do { \
DST_LOCALVAR(type1, index); \
stackdepth++; \
} while (0)
std::size_t index
#define DST_LOCALVAR(typed, index)
Definition: stack.cpp:422

Definition at line 537 of file stack.cpp.

#define MOVE_TO_TEMP (   sp)
Value:
do { \
GET_NEW_INDEX(sd, new_index); \
iptr->opc = ICMD_MOVE; \
iptr->s1.varindex = (sp)->varnum; \
iptr->dst.varindex = new_index; \
COPY_VAL_AND_TYPE(sd, (sp)->varnum, new_index); \
(sp)->varnum = new_index; \
(sp)->varkind = TEMPVAR; \
} while (0)
#define COPY_VAL_AND_TYPE(sd, sindex, dindex)
Definition: stack.cpp:450
#define GET_NEW_INDEX(sd, new_varindex)
Definition: stack.cpp:251
#define sp
Definition: md-asm.hpp:81

Definition at line 592 of file stack.cpp.

#define MOVE_UP (   sp)
Value:
do { \
iptr->opc = ICMD_MOVE; \
iptr->s1.varindex = (sp)->varnum; \
curstack->creator = iptr; \
iptr->dst.varindex = curstack->varnum; \
stackdepth++; \
} while (0)
#define DUP_SLOT(sp)
Definition: stack.cpp:553
#define sp
Definition: md-asm.hpp:81

Definition at line 561 of file stack.cpp.

#define NEWSTACK (   s,
  v,
 
)
Value:
do { \
sd.new_elem->prev = curstack; \
sd.new_elem->type = (s); \
sd.new_elem->flags = 0; \
sd.new_elem->varkind = (v); \
sd.new_elem->varnum = (n); \
curstack = sd.new_elem; \
sd.var[(n)].type = (s); \
sd.var[(n)].flags = 0; \
sd.new_elem++; \
} while (0)

Definition at line 623 of file stack.cpp.

#define NEWSTACK0 (   s)    NEWSTACK(s,UNDEFVAR,0)

Definition at line 641 of file stack.cpp.

#define NEWSTACKn (   s,
 
)    NEWSTACK(s,UNDEFVAR,n)

Definition at line 640 of file stack.cpp.

#define OP0_0
Value:
do { \
} while (0)
#define CLR_DST
Definition: stack.cpp:412
#define CLR_S1
Definition: stack.cpp:307

Definition at line 492 of file stack.cpp.

#define OP0_1 (   typed)
Value:
do { \
GET_NEW_VAR(sd, new_index, (typed)); \
DST((typed), new_index); \
stackdepth++; \
} while (0)
#define DST(typed, index)
Definition: stack.cpp:415
#define GET_NEW_VAR(sd, newvarindex, newtype)
Definition: stack.cpp:261
#define CLR_S1
Definition: stack.cpp:307

Definition at line 456 of file stack.cpp.

#define OP0_BRANCH
Value:
do { \
} while (0)
#define CLR_S1
Definition: stack.cpp:307

Definition at line 498 of file stack.cpp.

#define OP1_0 (   type1)
Value:
do { \
POP_S1(type1); \
stackdepth--; \
} while (0)
#define POP_S1(type1)
Definition: stack.cpp:358
#define CLR_DST
Definition: stack.cpp:412

Definition at line 503 of file stack.cpp.

#define OP1_0_ANY
Value:
do { \
stackdepth--; \
} while (0)
#define POP_S1_ANY
Definition: stack.cpp:366
#define CLR_DST
Definition: stack.cpp:412

Definition at line 464 of file stack.cpp.

#define OP1_1 (   type1,
  typed 
)
Value:
do { \
POP_S1(type1); \
GET_NEW_VAR(sd, new_index, (typed)); \
DST(typed, new_index); \
} while (0)
#define POP_S1(type1)
Definition: stack.cpp:358
#define DST(typed, index)
Definition: stack.cpp:415
#define GET_NEW_VAR(sd, newvarindex, newtype)
Definition: stack.cpp:261

Definition at line 477 of file stack.cpp.

#define OP1_BRANCH (   type1)
Value:
do { \
POP_S1(type1); \
stackdepth--; \
} while (0)
#define POP_S1(type1)
Definition: stack.cpp:358

Definition at line 471 of file stack.cpp.

#define OP2_0 (   type1,
  type2 
)
Value:
do { \
POP_S1_S2(type1, type2); \
stackdepth -= 2; \
} while (0)
#define POP_S1_S2(type1, type2)
Definition: stack.cpp:374
#define CLR_DST
Definition: stack.cpp:412

Definition at line 510 of file stack.cpp.

#define OP2_0_ANY_ANY
Value:
do { \
stackdepth -= 2; \
} while (0)
#define POP_S1_S2_ANY_ANY
Definition: stack.cpp:384
#define CLR_DST
Definition: stack.cpp:412

Definition at line 523 of file stack.cpp.

#define OP2_1 (   type1,
  type2,
  typed 
)
Value:
do { \
POP_S1_S2(type1, type2); \
GET_NEW_VAR(sd, new_index, ((Type) (typed))); \
DST(((Type) (typed)), new_index); \
stackdepth--; \
} while (0)
#define POP_S1_S2(type1, type2)
Definition: stack.cpp:374
#define DST(typed, index)
Definition: stack.cpp:415
#define GET_NEW_VAR(sd, newvarindex, newtype)
Definition: stack.cpp:261
Type
Types used internally by JITTED code.
Definition: global.hpp:117

Definition at line 484 of file stack.cpp.

#define OP2_BRANCH (   type1,
  type2 
)
Value:
do { \
POP_S1_S2(type1, type2); \
stackdepth -= 2; \
} while (0)
#define POP_S1_S2(type1, type2)
Definition: stack.cpp:374

Definition at line 517 of file stack.cpp.

#define OP3_0 (   type1,
  type2,
  type3 
)
Value:
do { \
POP_S1_S2_S3(type1, type2, type3); \
stackdepth -= 3; \
} while (0)
#define POP_S1_S2_S3(type1, type2, type3)
Definition: stack.cpp:394
#define CLR_DST
Definition: stack.cpp:412

Definition at line 530 of file stack.cpp.

#define POP_S1 (   type1)
Value:
do { \
USE_S1(type1); \
if (curstack->varkind == UNDEFVAR) \
curstack->varkind = TEMPVAR; \
curstack = curstack->prev; \
} while (0)
#define USE_S1(type1)
Definition: stack.cpp:310

Definition at line 358 of file stack.cpp.

#define POP_S1_ANY
Value:
do { \
if (curstack->varkind == UNDEFVAR) \
curstack->varkind = TEMPVAR; \
curstack = curstack->prev; \
} while (0)
#define USE_S1_ANY
Definition: stack.cpp:317

Definition at line 366 of file stack.cpp.

#define POP_S1_S2 (   type1,
  type2 
)
Value:
do { \
USE_S1_S2(type1, type2); \
if (curstack->varkind == UNDEFVAR) \
curstack->varkind = TEMPVAR; \
if (curstack->prev->varkind == UNDEFVAR) \
curstack->prev->varkind = TEMPVAR; \
curstack = curstack->prev->prev; \
} while (0)
#define USE_S1_S2(type1, type2)
Definition: stack.cpp:323

Definition at line 374 of file stack.cpp.

#define POP_S1_S2_ANY_ANY
Value:
do { \
if (curstack->varkind == UNDEFVAR) \
curstack->varkind = TEMPVAR; \
if (curstack->prev->varkind == UNDEFVAR) \
curstack->prev->varkind = TEMPVAR; \
curstack = curstack->prev->prev; \
} while (0)
#define USE_S1_S2_ANY_ANY
Definition: stack.cpp:332

Definition at line 384 of file stack.cpp.

#define POP_S1_S2_S3 (   type1,
  type2,
  type3 
)
Value:
do { \
USE_S1_S2_S3(type1, type2, type3); \
if (curstack->varkind == UNDEFVAR) \
curstack->varkind = TEMPVAR; \
if (curstack->prev->varkind == UNDEFVAR) \
curstack->prev->varkind = TEMPVAR; \
if (curstack->prev->prev->varkind == UNDEFVAR) \
curstack->prev->prev->varkind = TEMPVAR; \
curstack = curstack->prev->prev->prev; \
} while (0)
#define USE_S1_S2_S3(type1, type2, type3)
Definition: stack.cpp:339

Definition at line 394 of file stack.cpp.

#define POPANY
Value:
do { \
if (curstack->varkind == UNDEFVAR) \
curstack->varkind = TEMPVAR; \
curstack = curstack->prev; \
} while (0)

Definition at line 351 of file stack.cpp.

#define RELEASE_INDEX (   sd,
  varindex 
)

Definition at line 259 of file stack.cpp.

#define RELOCATE (   index)
Value:
do { \
if ((index) >= blockvarstart) \
(index) += blockvarshift; \
else if ((index) >= invarstart) \
(index) += invarshift; \
} while (0)
std::size_t index

Definition at line 1443 of file stack.cpp.

#define REQUIRE (   num)
Value:
do { \
if (stackdepth < (num)) \
return throw_stack_underflow(); \
} while (0)
#define return

Definition at line 220 of file stack.cpp.

#define SBRSTART   typeinfo.elementclass.any

Definition at line 92 of file stack.cpp.

#define SET_PREALLOC (   sp)
Value:
do { \
assert(!IS_LOCALVAR((sp))); \
sd.var[(sp)->varnum].flags |= PREALLOC; \
} while (0);
#define IS_LOCALVAR(sp)
Definition: stack.cpp:284
#define sp
Definition: md-asm.hpp:81

Definition at line 298 of file stack.cpp.

#define SET_TEMPVAR (   sp)
Value:
do { \
if (IS_LOCALVAR((sp))) { \
stack_change_to_tempvar(&sd, (sp), iptr); \
} \
sd.var[(sp)->varnum].flags &= ~(INOUT | PREALLOC); \
} while (0);
#define IS_LOCALVAR(sp)
Definition: stack.cpp:284
Definition: stack.hpp:46
static void stack_change_to_tempvar(stackdata_t *sd, stackelement_t *sp, instruction *ilimit)
Definition: stack.cpp:2022
#define sp
Definition: md-asm.hpp:81

Definition at line 290 of file stack.cpp.

#define STORE (   type1,
  index 
)
Value:
do { \
POP_S1(type1); \
stackdepth--; \
} while (0)
#define POP_S1(type1)
Definition: stack.cpp:358

Definition at line 543 of file stack.cpp.

#define USE_S1 (   type1)
Value:
do { \
CHECK_BASIC_TYPE(type1, curstack->type); \
iptr->s1.varindex = curstack->varnum; \
} while (0)
#define CHECK_BASIC_TYPE(expected, actual)
Definition: stack.cpp:203
#define REQUIRE(num)
Definition: stack.cpp:220

Definition at line 310 of file stack.cpp.

#define USE_S1_ANY
Value:
do { \
REQUIRE(1); \
iptr->s1.varindex = curstack->varnum; \
} while (0)
#define REQUIRE(num)
Definition: stack.cpp:220

Definition at line 317 of file stack.cpp.

#define USE_S1_S2 (   type1,
  type2 
)
Value:
do { \
CHECK_BASIC_TYPE(type1, curstack->prev->type); \
CHECK_BASIC_TYPE(type2, curstack->type); \
iptr->sx.s23.s2.varindex = curstack->varnum; \
iptr->s1.varindex = curstack->prev->varnum; \
} while (0)
#define CHECK_BASIC_TYPE(expected, actual)
Definition: stack.cpp:203
#define REQUIRE(num)
Definition: stack.cpp:220

Definition at line 323 of file stack.cpp.

#define USE_S1_S2_ANY_ANY
Value:
do { \
REQUIRE(2); \
iptr->sx.s23.s2.varindex = curstack->varnum; \
iptr->s1.varindex = curstack->prev->varnum; \
} while (0)
#define REQUIRE(num)
Definition: stack.cpp:220

Definition at line 332 of file stack.cpp.

#define USE_S1_S2_S3 (   type1,
  type2,
  type3 
)
Value:
do { \
CHECK_BASIC_TYPE(type1, curstack->prev->prev->type); \
CHECK_BASIC_TYPE(type2, curstack->prev->type); \
CHECK_BASIC_TYPE(type3, curstack->type); \
iptr->sx.s23.s3.varindex = curstack->varnum; \
iptr->sx.s23.s2.varindex = curstack->prev->varnum; \
iptr->s1.varindex = curstack->prev->prev->varnum; \
} while (0)
#define CHECK_BASIC_TYPE(expected, actual)
Definition: stack.cpp:203
#define REQUIRE(num)
Definition: stack.cpp:220

Definition at line 339 of file stack.cpp.

Function Documentation

bool stack_analyse ( jitdata jd)

Definition at line 2144 of file stack.cpp.

static void stack_append_block ( stackdata_t sd,
basicblock b 
)
static

Definition at line 719 of file stack.cpp.

static void stack_change_to_tempvar ( stackdata_t sd,
stackelement_t sp,
instruction ilimit 
)
static

Definition at line 2022 of file stack.cpp.

static basicblock* stack_check_invars ( stackdata_t sd,
basicblock b,
stackelement_t curstack,
int  stackdepth 
)
static

Definition at line 969 of file stack.cpp.

static basicblock* stack_check_invars_from_outvars ( stackdata_t sd,
basicblock b 
)
static

Definition at line 1089 of file stack.cpp.

static basicblock* stack_clone_block ( stackdata_t sd,
basicblock b 
)
static

Definition at line 750 of file stack.cpp.

static stackelement_t* stack_create_instack ( stackdata_t sd)
static

Definition at line 1207 of file stack.cpp.

static void stack_create_invars ( stackdata_t sd,
basicblock b,
stackelement_t curstack,
int  stackdepth 
)
static

Definition at line 882 of file stack.cpp.

static void stack_create_invars_from_outvars ( stackdata_t sd,
basicblock b 
)
static

Definition at line 923 of file stack.cpp.

static void stack_create_locals ( stackdata_t sd,
basicblock b 
)
static

Definition at line 792 of file stack.cpp.

static void stack_grow_variable_array ( stackdata_t sd,
s4  num 
)
static

Definition at line 686 of file stack.cpp.

bool stack_init ( void  )

Definition at line 666 of file stack.cpp.

static void stack_init_javalocals ( stackdata_t sd)
static

Definition at line 2100 of file stack.cpp.

void stack_javalocals_store ( instruction iptr,
s4 javalocals 
)

Definition at line 4692 of file stack.cpp.

static basicblock* stack_mark_reached ( stackdata_t sd,
basicblock b,
stackelement_t curstack,
int  stackdepth 
)
static

Definition at line 1253 of file stack.cpp.

static basicblock* stack_mark_reached_from_outvars ( stackdata_t sd,
basicblock b 
)
static

Definition at line 1303 of file stack.cpp.

static void stack_merge_locals ( stackdata_t sd,
basicblock b 
)
static

Definition at line 824 of file stack.cpp.

static bool stack_reach_handlers ( stackdata_t sd)
static

Definition at line 1397 of file stack.cpp.

static bool stack_reach_next_block ( stackdata_t sd)
static

Definition at line 1353 of file stack.cpp.

bool stack_reanalyse_block ( stackdata_t sd)

Definition at line 1451 of file stack.cpp.