* src/vm/jit/arm/md-abi.c (md_param_alloc): Use EABI internally.
[cacao.git] / src / vm / jit / arm / codegen.c
index 596da12f188d9855c21a68b1afe828bc9c682dca..bcc6372b016ce5065387addce5f519e4956f0f34 100644 (file)
@@ -22,7 +22,7 @@
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA.
 
-   $Id: codegen.c 7929 2007-05-21 11:45:31Z michi $
+   $Id: codegen.c 7931 2007-05-21 14:42:28Z twisti $
 
 */
 
@@ -214,36 +214,20 @@ bool codegen_emit(jitdata *jd)
 
                /* ATTENTION: we use interger registers for all arguments (even float) */
 #if !defined(ENABLE_SOFTFLOAT)
-               if (IS_INT_LNG_TYPE(t)) {                    /* integer args          */
+               if (IS_INT_LNG_TYPE(t)) {
 #endif
-                       if (!md->params[i].inmemory) {           /* register arguments    */
-                               if (!(var->flags & INMEMORY)) {      /* reg arg -> register   */
-                                       if (GET_LOW_REG(var->vv.regoff) == REG_SPLIT || GET_HIGH_REG(var->vv.regoff) == REG_SPLIT) {
-                                               /* TODO: remove this!!! */
-                                               dolog("SPLIT in local var: %x>%x (%s.%s)", s1, var->vv.regoff, m->class->name->text, m->name->text);
-                                               assert(s1 == var->vv.regoff);
-                                       }
-                                       s3 = var->vv.regoff;
-                                       SPLIT_OPEN(t, s1, REG_ITMP1);
-                                       SPLIT_LOAD(t, s1, cd->stackframesize);
-                                       SPLIT_OPEN(t, s3, REG_ITMP1);
-
+                       if (!md->params[i].inmemory) {
+                               if (!(var->flags & INMEMORY)) {
                                        if (IS_2_WORD_TYPE(t))
-                                               M_LNGMOVE(s1, s3);
+                                               M_LNGMOVE(s1, var->vv.regoff);
                                        else
-                                               M_INTMOVE(s1, s3);
-
-                                       SPLIT_STORE_AND_CLOSE(t, s3, cd->stackframesize);
+                                               M_INTMOVE(s1, var->vv.regoff);
                                }
-                               else {                               /* reg arg -> spilled    */
-                                       SPLIT_OPEN(t, s1, REG_ITMP1);
-                                       SPLIT_LOAD(t, s1, cd->stackframesize);
-
+                               else {
                                        if (IS_2_WORD_TYPE(t))
                                                M_LST(s1, REG_SP, var->vv.regoff * 4);
                                        else
                                                M_IST(s1, REG_SP, var->vv.regoff * 4);
-                                       /* no SPLIT_CLOSE here because arg is fully spilled now */
                                }
                        }
                        else {                                   /* stack arguments       */
@@ -259,32 +243,27 @@ bool codegen_emit(jitdata *jd)
                                }
                        }
 #if !defined(ENABLE_SOFTFLOAT)
-               } else {                                     /* floating args         */
-                       if (!md->params[i].inmemory) {           /* register arguments    */
-                               if (!(var->flags & INMEMORY)) {      /* reg arg -> register   */
-                                       SPLIT_OPEN(t, s1, REG_ITMP1);
-                                       SPLIT_LOAD(t, s1, cd->stackframesize);
+               }
+               else {
+                       if (!md->params[i].inmemory) {
+                               if (!(var->flags & INMEMORY)) {
                                        M_CAST_INT_TO_FLT_TYPED(t, s1, var->vv.regoff);
                                }
-                               else {                               /* reg arg -> spilled    */
-                                       SPLIT_OPEN(t, s1, REG_ITMP1);
-                                       SPLIT_LOAD(t, s1, cd->stackframesize);
-
+                               else {
                                        if (IS_2_WORD_TYPE(t))
                                                M_LST(s1, REG_SP, var->vv.regoff * 4);
                                        else
                                                M_IST(s1, REG_SP, var->vv.regoff * 4);
-                                       /* no SPLIT_CLOSE here because arg is fully spilled now */
                                }
                        }
-                       else {                                   /* stack arguments       */
-                               if (!(var->flags & INMEMORY)) {      /* stack arg -> register */
+                       else {
+                               if (!(var->flags & INMEMORY)) {
                                        if (IS_2_WORD_TYPE(t))
                                                M_DLD(var->vv.regoff, REG_SP, (cd->stackframesize + s1) * 4);
                                        else
                                                M_FLD(var->vv.regoff, REG_SP, (cd->stackframesize + s1) * 4);
                                }
-                               else {                               /* stack arg -> spilled  */
+                               else {
                                        /* Reuse Memory Position on Caller Stack */
                                        var->vv.regoff = cd->stackframesize + s1;
                                }
@@ -2239,15 +2218,12 @@ bool codegen_emit(jitdata *jd)
                                if (IS_INT_LNG_TYPE(var->type)) {
 #endif /* !defined(ENABLE_SOFTFLOAT) */
                                        if (!md->params[s3].inmemory) {
-                                               SPLIT_OPEN(var->type, s1, REG_ITMP2);
                                                s1 = emit_load(jd, iptr, var, d);
 
                                                if (IS_2_WORD_TYPE(var->type))
                                                        M_LNGMOVE(s1, d);
                                                else
                                                        M_INTMOVE(s1, d);
-
-                                               SPLIT_STORE_AND_CLOSE(var->type, d, 0);
                                        }
                                        else {
                                                if (IS_2_WORD_TYPE(var->type)) {
@@ -2264,9 +2240,7 @@ bool codegen_emit(jitdata *jd)
                                else {
                                        if (!md->params[s3].inmemory) {
                                                s1 = emit_load(jd, iptr, var, REG_FTMP1);
-                                               SPLIT_OPEN(var->type, d, REG_ITMP1);
                                                M_CAST_FLT_TO_INT_TYPED(var->type, s1, d);
-                                               SPLIT_STORE_AND_CLOSE(var->type, d, 0);
                                        }
                                        else {
                                                s1 = emit_load(jd, iptr, var, REG_FTMP1);