/* src/vm/jit/arm/codegen.c - machine code generator for Arm
- Copyright (C) 1996-2005, 2006, 2007, 2008, 2009
+ Copyright (C) 1996-2011
CACAOVM - Verein zur Foerderung der freien virtuellen Maschine CACAO
This file is part of CACAO.
int32_t disp;
// Get required compiler data.
- codeinfo* code = jd->code;
codegendata* cd = jd->cd;
/* the big switch */
M_STR_INTERN(s3, REG_ITMP1, OFFSET(java_objectarray_t, data[0]));
break;
- case ICMD_GETSTATIC: /* ... ==> ..., value */
- switch (fieldtype) {
- case TYPE_INT:
-#if defined(ENABLE_SOFTFLOAT)
- case TYPE_FLT:
-#endif
- case TYPE_ADR:
- d = codegen_reg_of_dst(jd, iptr, REG_ITMP1);
- M_ILD_INTERN(d, REG_ITMP3, 0);
- break;
- case TYPE_LNG:
-#if defined(ENABLE_SOFTFLOAT)
- case TYPE_DBL:
-#endif
- d = codegen_reg_of_dst(jd, iptr, REG_ITMP12_PACKED);
- M_LLD_INTERN(d, REG_ITMP3, 0);
- break;
-#if !defined(ENABLE_SOFTFLOAT)
- case TYPE_FLT:
- d = codegen_reg_of_dst(jd, iptr, REG_FTMP1);
- M_FLD_INTERN(d, REG_ITMP3, 0);
- break;
- case TYPE_DBL:
- d = codegen_reg_of_dst(jd, iptr, REG_FTMP1);
- M_DLD_INTERN(d, REG_ITMP3, 0);
- break;
-#endif
- default:
- assert(0);
- }
- emit_store_dst(jd, iptr, d);
- break;
-
case ICMD_GETFIELD: /* ..., objectref, value ==> ... */
s1 = emit_load_s1(jd, iptr, REG_ITMP3);
/* calculate stackframe size */
cd->stackframesize =
- 4 + /* return address */
- sizeof(stackframeinfo_t) + /* stackframeinfo */
- sizeof(localref_table) + /* localref_table */
- nmd->memuse * 4; /* stack arguments */
+ 1 + /* return address */
+ sizeof(stackframeinfo_t) / SIZEOF_VOID_P + /* stackframeinfo */
+ sizeof(localref_table) / SIZEOF_VOID_P + /* localref_table */
+ nmd->memuse; /* stack arguments */
/* align stack to 8-byte */
- cd->stackframesize = (cd->stackframesize + 4) & ~4;
+ cd->stackframesize = (cd->stackframesize + 1) & ~1;
/* create method header */
/* generate stub code */
M_STMFD(1<<REG_LR, REG_SP);
- M_SUB_IMM_EXT_MUL4(REG_SP, REG_SP, cd->stackframesize / 4 - 1);
+ M_SUB_IMM_EXT_MUL4(REG_SP, REG_SP, cd->stackframesize * 2 - 1);
#if defined(ENABLE_GC_CACAO)
/* Save callee saved integer registers in stackframeinfo (GC may
}
}
else {
- s1 = md->params[i].regoff + cd->stackframesize;
+ s1 = md->params[i].regoff + cd->stackframesize * 8;
s2 = nmd->params[j].regoff;
if (IS_2_WORD_TYPE(t)) {
/* finish stub code, but do not yet return to caller */
- M_ADD_IMM_EXT_MUL4(REG_SP, REG_SP, cd->stackframesize / 4 - 1);
+ M_ADD_IMM_EXT_MUL4(REG_SP, REG_SP, cd->stackframesize * 2 - 1);
M_LDMFD(1<<REG_LR, REG_SP);
/* check for exception */