* src/vm/jit/arm/md-abi.c (md_param_alloc): Use EABI internally.
authortwisti <none@none>
Mon, 21 May 2007 14:42:28 +0000 (14:42 +0000)
committertwisti <none@none>
Mon, 21 May 2007 14:42:28 +0000 (14:42 +0000)
(ALIGN_2): Removed.

* src/vm/jit/arm/codegen.c (codegen_emit): Removed SPLIT-stuff.
* src/vm/jit/arm/emit.c (emit_store): Likewise.

src/vm/jit/arm/codegen.c
src/vm/jit/arm/emit.c
src/vm/jit/arm/md-abi.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);
index e16bc2ccc2781b09cc2faa33b9f4e2c54501eb37..e7881b849553c8184c6deff2e26ff531ffd72671 100644 (file)
@@ -246,13 +246,6 @@ void emit_store(jitdata *jd, instruction *iptr, varinfo *dst, s4 d)
                default:
                        vm_abort("emit_store: unknown type %d", dst->type);
                }
-#endif
-       }
-       else if (IS_LNG_TYPE(dst->type)) {
-#if defined(__ARMEL__)
-               assert(GET_HIGH_REG(dst->vv.regoff) != REG_SPLIT);
-#else
-               assert(GET_LOW_REG(dst->vv.regoff) != REG_SPLIT);
 #endif
        }
 }
index 8d19890e12fc94b0888b9bd1315cc01eb53848f7..7e40d067248045e04b12c7381db0fe864ad9128f 100644 (file)
@@ -22,7 +22,7 @@
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA.
 
-   $Id: md-abi.c 7713 2007-04-15 21:49:48Z twisti $
+   $Id: md-abi.c 7931 2007-05-21 14:42:28Z twisti $
 
 */
 
@@ -135,10 +135,12 @@ void md_param_alloc(methoddesc *md)
        s4         stacksize;
 
        /* set default values */
-       reguse = 0;
+
+       reguse    = 0;
        stacksize = 0;
 
        /* get params field of methoddesc */
+
        pd = md->params;
 
        for (i = 0; i < md->paramcount; i++, pd++) {
@@ -160,7 +162,11 @@ void md_param_alloc(methoddesc *md)
 
                case TYPE_LNG:
                case TYPE_DBL:
-                       if (reguse+1 < INT_ARG_CNT) {
+                       /* interally we use the EABI */
+
+                       ALIGN_2(reguse);
+
+                       if (reguse < INT_ARG_CNT) {
                                pd->inmemory = false;
 #if defined(__ARMEL__)
                                pd->regoff   =
@@ -173,24 +179,10 @@ void md_param_alloc(methoddesc *md)
 #endif
                                reguse += 2;
                        }
-                       else if (reguse < INT_ARG_CNT) {
-                               pd->inmemory = false;
-#if defined(__ARMEL__)
-                               pd->regoff   =
-                                       PACK_REGS(abi_registers_integer_argument[reguse],
-                                                         abi_registers_integer_argument[INT_ARG_CNT]);
-#else
-                               pd->regoff   =
-                                       PACK_REGS(abi_registers_integer_argument[INT_ARG_CNT],
-                                                         abi_registers_integer_argument[reguse]);
-#endif
-                               reguse++;
-                               stacksize++;
-                       }
                        else {
-                               pd->inmemory = true;
-                               pd->regoff   = stacksize;
-                               stacksize += 2;
+                               pd->inmemory  = true;
+                               pd->regoff    = stacksize;
+                               stacksize    += 2;
                        }
                        break;
                }
@@ -224,8 +216,6 @@ void md_param_alloc(methoddesc *md)
 
 *******************************************************************************/
 
-#define ALIGN_2(a)    do { if ((a) & 0x1) (a)++; } while (0)
-
 void md_param_alloc_native(methoddesc *md)
 {
        paramdesc *pd;