* src/vm/jit/arm/emit.c (emit_exception_stubs): Renamed eref to er,
authortwisti <none@none>
Thu, 11 Jan 2007 14:22:55 +0000 (14:22 +0000)
committertwisti <none@none>
Thu, 11 Jan 2007 14:22:55 +0000 (14:22 +0000)
use md_codegen_patch_branch.

* src/vm/jit/arm/codegen.c (codegen): Use codegen_resolve_branchrefs,
use exceptions_throw_internalerror.

* src/vm/jit/arm/codegen.h (M_STACK_LOAD_FLT_TYPED): Removed.
(M_STACK_STORE_FLT_TYPED): Likewise.

src/vm/jit/arm/codegen.c
src/vm/jit/arm/codegen.h
src/vm/jit/arm/emit.c

index 3db469a8f57a2d67144d367e5459c2bba15bf1b4..9176115eb9cfb1094ebf3cb343de776ae3ff859a 100644 (file)
@@ -29,7 +29,7 @@
    Changes: Christian Thalinger
                        Edwin Steiner
 
-   $Id: codegen.c 6591 2007-01-02 19:14:25Z twisti $
+   $Id: codegen.c 6596 2007-01-11 14:22:55Z twisti $
 
 */
 
@@ -274,8 +274,12 @@ bool codegen(jitdata *jd)
                        }
                        else {                                   /* stack arguments       */
                                if (!(var->flags & INMEMORY)) {      /* stack arg -> register */
-                                       M_STACK_LOAD_FLT_TYPED(t, var->vv.regoff, cd->stackframesize + s1);
-                               } else {                             /* stack arg -> spilled  */
+                                       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  */
                                        /* Reuse Memory Position on Caller Stack */
                                        var->vv.regoff = cd->stackframesize + s1;
                                }
@@ -335,24 +339,22 @@ bool codegen(jitdata *jd)
 
        /* SECTION: ICMD Code Generation */
        /* for all basic blocks */
-       for (bptr = jd->basicblocks; bptr != NULL; bptr = bptr->next)
-       {
+
+       for (bptr = jd->basicblocks; bptr != NULL; bptr = bptr->next) {
+
                bptr->mpc = (s4) (cd->mcodeptr - cd->mcodebase);
 
                /* is this basic block reached? */
+
                if (bptr->flags < BBREACHED)
                        continue;
 
                /* branch resolving */
-               {
-               branchref *brefs;
-               for (brefs = bptr->branchrefs; brefs != NULL; brefs = brefs->next) {
-                       gen_resolvebranch(cd->mcodebase + brefs->branchpos, 
-                                         brefs->branchpos, bptr->mpc);
-               }
-               }
+
+               codegen_resolve_branchrefs(cd, bptr);
 
                /* copy interface registers to their destination */
+
                len = bptr->indepth;
 
                MCODECHECK(64+len);
@@ -2189,7 +2191,10 @@ bool codegen(jitdata *jd)
                                        }
                                        else {
                                                d = emit_load(jd, iptr, var, REG_FTMP1);
-                                               M_STACK_STORE_FLT_TYPED(var->type, d, md->params[s3].regoff);
+                                               if (IS_2_WORD_TYPE(var->type))
+                                                       M_DST(d, REG_SP, md->params[s3].regoff * 4);
+                                               else
+                                                       M_FST(d, REG_SP, md->params[s3].regoff * 4);
                                        }
                                }
 #endif /* !defined(ENABLE_SOFTFLOAT) */
@@ -2335,6 +2340,7 @@ bool codegen(jitdata *jd)
 
                case ICMD_CHECKCAST:  /* ..., objectref ==> ..., objectref            */
                                      /* val.a: (classinfo*) superclass               */
+
                        if (!(iptr->flags.bits & INS_FLAG_ARRAY)) {
                                /* object type cast-check */
 
@@ -2425,7 +2431,6 @@ bool codegen(jitdata *jd)
 
                        /* class checkcast code */
 
-
                        if ((super == NULL) || !(super->flags & ACC_INTERFACE)) {
                                if (super == NULL) {
                                        disp = dseg_add_unique_address(cd, NULL);
@@ -2746,7 +2751,8 @@ bool codegen(jitdata *jd)
                        break;
 
                default:
-                       *exceptionptr = new_internalerror("Unknown ICMD %d", iptr->opc);
+                       exceptions_throw_internalerror("Unknown ICMD %d during code generation",
+                                                                                  iptr->opc);
                        return false;
                } /* the big switch */
 
index 5cca08322e78a37d9986d371280aeeeadc8913f6..f1b1a779173d7eacb6e70a9c0899487b8d2cf262 100644 (file)
@@ -27,7 +27,7 @@
    Authors: Michael Starzinger
             Christian Thalinger
 
-   $Id: codegen.h 6591 2007-01-02 19:14:25Z twisti $
+   $Id: codegen.h 6596 2007-01-11 14:22:55Z twisti $
 
 */
 
@@ -1141,15 +1141,6 @@ do { \
 
 #if !defined(ENABLE_SOFTFLOAT)
 
-#define M_STACK_LOAD_FLT_TYPED(t, reg, offset) { \
-       CHECK_FLT_REG(reg); \
-       if (IS_2_WORD_TYPE(t)) { \
-               M_LDFD(reg, REG_SP, (offset) * 4); \
-       } else { \
-               M_LDFS(reg, REG_SP, (offset) * 4); \
-       } \
-}
-
 #define M_FLD(a,b,c)                    M_LDFS(a,b,c)
 #define M_DLD(a,b,c)                    M_LDFD(a,b,c)
 
@@ -1157,15 +1148,6 @@ do { \
 #define M_DLD_INTERN(a,b,c)             M_LDFD_INTERN(a,b,c)
 
 
-#define M_STACK_STORE_FLT_TYPED(t, reg, offset) { \
-       CHECK_FLT_REG(reg); \
-       if (IS_2_WORD_TYPE(t)) { \
-               M_STFD(reg, REG_SP, (offset) * 4); \
-       } else { \
-               M_STFS(reg, REG_SP, (offset) * 4); \
-       } \
-}
-
 #define M_FST(a,b,c)                    M_STFS(a,b,c)
 #define M_DST(a,b,c)                    M_STFD(a,b,c)
 
index ea2a185f98a2c2cd9138aeec68dcbe9344bcaf45..465d3c580ad131750288c65416ee1a752bc26aa8 100644 (file)
@@ -378,7 +378,9 @@ void emit_exception_stubs(jitdata *jd)
 {
        codegendata  *cd;
        registerdata *rd;
-       exceptionref *eref;
+       exceptionref *er;
+       s4            branchmpc;
+       s4            targetmpc;
        s4            targetdisp;
        s4            disp;
 
@@ -391,9 +393,13 @@ void emit_exception_stubs(jitdata *jd)
 
        targetdisp = 0;
 
-       for (eref = cd->exceptionrefs; eref != NULL; eref = eref->next) {
-               gen_resolvebranch(cd->mcodebase + eref->branchpos,
-                                                 eref->branchpos, cd->mcodeptr - cd->mcodebase);
+       for (er = cd->exceptionrefs; er != NULL; er = er->next) {
+               /* back-patch the branch to this exception code */
+
+               branchmpc = er->branchpos;
+               targetmpc = cd->mcodeptr - cd->mcodebase;
+
+               md_codegen_patch_branch(cd, branchmpc, targetmpc);
 
                MCODECHECK(100);
 
@@ -401,17 +407,17 @@ void emit_exception_stubs(jitdata *jd)
                   ArrayIndexOutOfBoundsException.  If so, move index register
                   into REG_ITMP1. */
 
-               if (eref->reg != -1)
-                       M_MOV(REG_ITMP1, eref->reg);
+               if (er->reg != -1)
+                       M_MOV(REG_ITMP1, er->reg);
 
                /* calcuate exception address */
 
-               assert((eref->branchpos - 4) % 4 == 0);
-               M_ADD_IMM_EXT_MUL4(REG_ITMP2_XPC, REG_IP, (eref->branchpos - 4) / 4);
+               assert((er->branchpos - 4) % 4 == 0);
+               M_ADD_IMM_EXT_MUL4(REG_ITMP2_XPC, REG_IP, (er->branchpos - 4) / 4);
 
                /* move function to call into REG_ITMP3 */
 
-               disp = dseg_add_functionptr(cd, eref->function);
+               disp = dseg_add_functionptr(cd, er->function);
                M_DSEG_LOAD(REG_ITMP3, disp);
 
                if (targetdisp == 0) {