/* 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.
{
varinfo* var;
builtintable_entry* bte;
+ methoddesc* md;
methodinfo* lm; // Local methodinfo for ICMD_INVOKE*.
unresolved_method* um;
fieldinfo* fi;
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);
case ICMD_BUILTIN:
bte = iptr->sx.s23.s3.bte;
+ md = bte->md;
if (bte->stub == NULL) {
disp = dseg_add_functionptr(cd, bte->fp);
} else {
M_MOV(REG_PC, REG_PV);
#if !defined(__SOFTFP__)
+ d = md->returntype.type;
+
/* TODO: this is only a hack, since we use R0/R1 for float
return! this depends on gcc; it is independent from
our ENABLE_SOFTFLOAT define */