arg reg bug fixed, array optimizations
authorcacao <none@none>
Mon, 30 Nov 1998 22:54:31 +0000 (22:54 +0000)
committercacao <none@none>
Mon, 30 Nov 1998 22:54:31 +0000 (22:54 +0000)
jit.c
jit/jitdef.h
jit/mcode.c
jit/reg.c
jit/stack.c
src/vm/jit/stack.c

diff --git a/jit.c b/jit.c
index 76501880e435eac7373b860298fb5109b6897886..a290bc0645b33ce619c80357762eb8a2ec3775f2 100644 (file)
--- a/jit.c
+++ b/jit.c
@@ -115,9 +115,9 @@ int *count_store_depth = count_store_depth_init;
 static classinfo  *class;       /* class the compiled method belongs to       */
 static methodinfo *method;      /* pointer to method info of compiled method  */
 static unicode    *descriptor;  /* type descriptor of compiled method         */
-static u2         mparamcount;  /* number of parameters (incl. this)          */
+static int         mparamcount; /* number of parameters (incl. this)          */
 static u1         *mparamtypes; /* types of all parameters (TYPE_INT, ...)    */
-static u2         mreturntype;  /* return type of method                      */
+static int         mreturntype; /* return type of method                      */
        
 static int maxstack;            /* maximal JavaVM stack size                  */
 static int maxlocals;           /* maximal number of local JavaVM variables   */
index 8867aad02ff5673160036bf2239a889776eb5144..0a69c868ea0ff6852990d81cc178d55e8dd679e0 100644 (file)
@@ -743,40 +743,8 @@ static int jcommandsize[256] = {
 #define JAVA_BREAKPOINT       202
         1,
 
-#define ICMD_OPT_IALOAD       203
-        1,
-#define ICMD_OPT_LALOAD       204
-        1,
-#define ICMD_OPT_FALOAD       205
-        1,
-#define ICMD_OPT_DALOAD       206
-        1,
-#define ICMD_OPT_AALOAD       207
-        1,
-#define ICMD_OPT_BALOAD       208
-        1,
-#define ICMD_OPT_CALOAD       209
-        1,
-#define ICMD_OPT_SALOAD       210
-        1,
-
-#define ICMD_OPT_IASTORE      211
-        1,
-#define ICMD_OPT_LASTORE      212
-        1,
-#define ICMD_OPT_FASTORE      213
-        1,
-#define ICMD_OPT_DASTORE      214
-        1,
-#define ICMD_OPT_AASTORE      215
-        1,
-#define ICMD_OPT_BASTORE      216
-        1,
-#define ICMD_OPT_CASTORE      217
-        1,
-#define ICMD_OPT_SASTORE      218
-        1,
-                        1,1,            /* unused */
+            1,1,1,1,1,1,1,1,            /* unused */
+        1,1,1,1,1,1,1,1,1,1,
         1,1,1,1,1,1,1,1,1,1,
         1,1,1,1,1,1,1,1,1,1,
         1,1,1,1,1,1,1,1,1,1,
@@ -1106,24 +1074,10 @@ static char *icmd_names[256] = {
        "UNDEF201     ", /* JSR_W       201 */
        "UNDEF202     ", /* BREAKPOINT  202 */
 
-       "OPT_IALOAD   ", /*             203 */
-       "OPT_LALOAD   ", /*             204 */
-       "OPT_FALOAD   ", /*             205 */
-       "OPT_DALOAD   ", /*             206 */
-       "OPT_AALOAD   ", /*             207 */
-       "OPT_BALOAD   ", /*             208 */
-       "OPT_CALOAD   ", /*             209 */
-       "OPT_SALOAD   ", /*             210 */
-       "OPT_IASTORE  ", /*             211 */
-       "OPT_LASTORE  ", /*             212 */
-       "OPT_FASTORE  ", /*             213 */
-       "OPT_DASTORE  ", /*             214 */
-       "OPT_AASTORE  ", /*             215 */
-       "OPT_BASTORE  ", /*             216 */
-       "OPT_CASTORE  ", /*             217 */
-       "OPT_SASTORE  ", /*             218 */
-
-                            "UNDEF219","UNDEF220",
+                             "UNDEF203","UNDEF204","UNDEF205",
+       "UNDEF206","UNDEF207","UNDEF208","UNDEF209","UNDEF210",
+       "UNDEF","UNDEF","UNDEF","UNDEF","UNDEF",
+       "UNDEF216","UNDEF217","UNDEF218","UNDEF219","UNDEF220",
        "UNDEF","UNDEF","UNDEF","UNDEF","UNDEF",
        "UNDEF226","UNDEF227","UNDEF228","UNDEF229","UNDEF230",
        "UNDEF","UNDEF","UNDEF","UNDEF","UNDEF",
@@ -1131,6 +1085,7 @@ static char *icmd_names[256] = {
        "UNDEF","UNDEF","UNDEF","UNDEF","UNDEF",
        "UNDEF246","UNDEF247","UNDEF248","UNDEF249","UNDEF250",
        "UNDEF251","UNDEF252",
+
        "BUILTIN3     ", /*             253 */
        "BUILTIN2     ", /*             254 */
        "BUILTIN1     "  /*             255 */
index ce460184bc360eb0002515d69f8bfe8a8071e453..19d43519c20014c09142608657f26800215d7e8c 100644 (file)
@@ -326,11 +326,6 @@ static void mcode_finish(int mcodelen)
                *((void**) (epoint + jr->tablepos)) = epoint + jr->target->mpc;
                jr = jr->next;
                }
-
-#ifdef CACHE_FLUSH_BLOCK
-       synchronize_caches(method->mcode, (mcodelen>>2));
-#endif
-       
 }
 
 
index ad187c7d35e1d664cfea7a44a2120b341c36ea03..1f9445b2d0c61b870251a3a49f8fa62f73a4233a 100644 (file)
--- a/jit/reg.c
+++ b/jit/reg.c
@@ -351,11 +351,14 @@ static void interface_regalloc ()
        
 static void local_regalloc ()
 {
-       int     s, t;
-       int     intalloc, fltalloc;
+       int      s, t;
+       int      intalloc, fltalloc;
        varinfo *v;
        
        if (isleafmethod) {
+               int arg, doublewordarg;
+               arg = 0;
+               doublewordarg = 0;
                for (s = 0; s < maxlocals; s++) {
                        intalloc = -1; fltalloc = -1;
                        for (t = TYPE_INT; t <= TYPE_ADR; t++) {
@@ -366,9 +369,10 @@ static void local_regalloc ()
                                                        v->flags = locals[s][fltalloc].flags;
                                                        v->regoff = locals[s][fltalloc].regoff;
                                                        }
-                                               else if (s < fltreg_argnum) {
+                                               else if (!doublewordarg && (arg < mparamcount)
+                                                                       && (arg < fltreg_argnum)) {
                                                        v->flags = 0;
-                                                       v->regoff = argfltregs[s];
+                                                       v->regoff = argfltregs[arg];
                                                        }
                                                else if (maxtmpfltreguse > 0) {
                                                        maxtmpfltreguse--;
@@ -391,9 +395,10 @@ static void local_regalloc ()
                                                        v->flags = locals[s][intalloc].flags;
                                                        v->regoff = locals[s][intalloc].regoff;
                                                        }
-                                               else if (s < intreg_argnum) {
+                                               else if (!doublewordarg && (arg < mparamcount)
+                                                                       && (arg < intreg_argnum)) {
                                                        v->flags = 0;
-                                                       v->regoff = argintregs[s];
+                                                       v->regoff = argintregs[arg];
                                                        }
                                                else if (maxtmpintreguse > 0) {
                                                        maxtmpintreguse--;
@@ -413,6 +418,16 @@ static void local_regalloc ()
                                                }
                                        }
                                }
+                       if (arg < mparamcount) {
+                               if (doublewordarg) {
+                                       doublewordarg = 0;
+                                       arg++;
+                                       }
+                               else if (IS_2_WORD_TYPE(mparamtypes[arg]))
+                                       doublewordarg = 1;
+                               else
+                                       arg++;
+                               }
                        }
                return;
                }
@@ -636,15 +651,6 @@ static void allocate_scratch_registers()
                                        case ICMD_CALOAD:
                                        case ICMD_SALOAD:
 
-                                       case ICMD_OPT_IALOAD:
-                                       case ICMD_OPT_LALOAD:
-                                       case ICMD_OPT_FALOAD:
-                                       case ICMD_OPT_DALOAD:
-                                       case ICMD_OPT_AALOAD:
-
-                                       case ICMD_OPT_BALOAD:
-                                       case ICMD_OPT_CALOAD:
-                                       case ICMD_OPT_SALOAD:
                                                reg_free_temp(src);
                                                reg_free_temp(src->prev);
                                                reg_new_temp(dst);
@@ -662,15 +668,6 @@ static void allocate_scratch_registers()
                                        case ICMD_CASTORE:
                                        case ICMD_SASTORE:
 
-                                       case ICMD_OPT_IASTORE:
-                                       case ICMD_OPT_LASTORE:
-                                       case ICMD_OPT_FASTORE:
-                                       case ICMD_OPT_DASTORE:
-                                       case ICMD_OPT_AASTORE:
-
-                                       case ICMD_OPT_BASTORE:
-                                       case ICMD_OPT_CASTORE:
-                                       case ICMD_OPT_SASTORE:
                                                reg_free_temp(src);
                                                reg_free_temp(src->prev);
                                                reg_free_temp(src->prev->prev);
index 6061f6eaac5d8f0f171a1f341ac89e02e34189ea..b51c230a4112c284342e77d8fdbe8d35a7eb1ab8 100644 (file)
@@ -516,67 +516,67 @@ icmd_lconst_tail:
                                                                                goto icmd_lconst_tail;
                                                                        case ICMD_LDIV:
                                                                                if (iptr[0].val.l == 0x00000002)
-                                                                                       iptr[0].val.l = 1;
+                                                                                       iptr[0].val.i = 1;
                                                                                else if (iptr[0].val.l == 0x00000004)
-                                                                                       iptr[0].val.l = 2;
+                                                                                       iptr[0].val.i = 2;
                                                                                else if (iptr[0].val.l == 0x00000008)
-                                                                                       iptr[0].val.l = 3;
+                                                                                       iptr[0].val.i = 3;
                                                                                else if (iptr[0].val.l == 0x00000010)
-                                                                                       iptr[0].val.l = 4;
+                                                                                       iptr[0].val.i = 4;
                                                                                else if (iptr[0].val.l == 0x00000020)
-                                                                                       iptr[0].val.l = 5;
+                                                                                       iptr[0].val.i = 5;
                                                                                else if (iptr[0].val.l == 0x00000040)
-                                                                                       iptr[0].val.l = 6;
+                                                                                       iptr[0].val.i = 6;
                                                                                else if (iptr[0].val.l == 0x00000080)
-                                                                                       iptr[0].val.l = 7;
+                                                                                       iptr[0].val.i = 7;
                                                                                else if (iptr[0].val.l == 0x00000100)
-                                                                                       iptr[0].val.l = 8;
+                                                                                       iptr[0].val.i = 8;
                                                                                else if (iptr[0].val.l == 0x00000200)
-                                                                                       iptr[0].val.l = 9;
+                                                                                       iptr[0].val.i = 9;
                                                                                else if (iptr[0].val.l == 0x00000400)
-                                                                                       iptr[0].val.l = 10;
+                                                                                       iptr[0].val.i = 10;
                                                                                else if (iptr[0].val.l == 0x00000800)
-                                                                                       iptr[0].val.l = 11;
+                                                                                       iptr[0].val.i = 11;
                                                                                else if (iptr[0].val.l == 0x00001000)
-                                                                                       iptr[0].val.l = 12;
+                                                                                       iptr[0].val.i = 12;
                                                                                else if (iptr[0].val.l == 0x00002000)
-                                                                                       iptr[0].val.l = 13;
+                                                                                       iptr[0].val.i = 13;
                                                                                else if (iptr[0].val.l == 0x00004000)
-                                                                                       iptr[0].val.l = 14;
+                                                                                       iptr[0].val.i = 14;
                                                                                else if (iptr[0].val.l == 0x00008000)
-                                                                                       iptr[0].val.l = 15;
+                                                                                       iptr[0].val.i = 15;
                                                                                else if (iptr[0].val.l == 0x00010000)
-                                                                                       iptr[0].val.l = 16;
+                                                                                       iptr[0].val.i = 16;
                                                                                else if (iptr[0].val.l == 0x00020000)
-                                                                                       iptr[0].val.l = 17;
+                                                                                       iptr[0].val.i = 17;
                                                                                else if (iptr[0].val.l == 0x00040000)
-                                                                                       iptr[0].val.l = 18;
+                                                                                       iptr[0].val.i = 18;
                                                                                else if (iptr[0].val.l == 0x00080000)
-                                                                                       iptr[0].val.l = 19;
+                                                                                       iptr[0].val.i = 19;
                                                                                else if (iptr[0].val.l == 0x00100000)
-                                                                                       iptr[0].val.l = 20;
+                                                                                       iptr[0].val.i = 20;
                                                                                else if (iptr[0].val.l == 0x00200000)
-                                                                                       iptr[0].val.l = 21;
+                                                                                       iptr[0].val.i = 21;
                                                                                else if (iptr[0].val.l == 0x00400000)
-                                                                                       iptr[0].val.l = 22;
+                                                                                       iptr[0].val.i = 22;
                                                                                else if (iptr[0].val.l == 0x00800000)
-                                                                                       iptr[0].val.l = 23;
+                                                                                       iptr[0].val.i = 23;
                                                                                else if (iptr[0].val.l == 0x01000000)
-                                                                                       iptr[0].val.l = 24;
+                                                                                       iptr[0].val.i = 24;
                                                                                else if (iptr[0].val.l == 0x02000000)
-                                                                                       iptr[0].val.l = 25;
+                                                                                       iptr[0].val.i = 25;
                                                                                else if (iptr[0].val.l == 0x04000000)
-                                                                                       iptr[0].val.l = 26;
+                                                                                       iptr[0].val.i = 26;
                                                                                else if (iptr[0].val.l == 0x08000000)
-                                                                                       iptr[0].val.l = 27;
+                                                                                       iptr[0].val.i = 27;
                                                                                else if (iptr[0].val.l == 0x10000000)
-                                                                                       iptr[0].val.l = 28;
+                                                                                       iptr[0].val.i = 28;
                                                                                else if (iptr[0].val.l == 0x20000000)
-                                                                                       iptr[0].val.l = 29;
+                                                                                       iptr[0].val.i = 29;
                                                                                else if (iptr[0].val.l == 0x40000000)
-                                                                                       iptr[0].val.l = 30;
+                                                                                       iptr[0].val.i = 30;
                                                                                else if (iptr[0].val.l == 0x80000000)
-                                                                                       iptr[0].val.l = 31;
+                                                                                       iptr[0].val.i = 31;
                                                                                else {
                                                                                        PUSHCONST(TYPE_LNG);
                                                                                        break;
@@ -724,11 +724,6 @@ icmd_lconst_lcmp_tail:
                                                case ICMD_AALOAD:
                                                        COUNT(count_check_null);
                                                        COUNT(count_check_bound);
-                                               case ICMD_OPT_IALOAD:
-                                               case ICMD_OPT_LALOAD:
-                                               case ICMD_OPT_FALOAD:
-                                               case ICMD_OPT_DALOAD:
-                                               case ICMD_OPT_AALOAD:
                                                        COUNT(count_pcmd_mem);
                                                        OP2IAT_1(opcode-ICMD_IALOAD);
                                                        break;
@@ -738,9 +733,6 @@ icmd_lconst_lcmp_tail:
                                                case ICMD_SALOAD:
                                                        COUNT(count_check_null);
                                                        COUNT(count_check_bound);
-                                               case ICMD_OPT_BALOAD:
-                                               case ICMD_OPT_CALOAD:
-                                               case ICMD_OPT_SALOAD:
                                                        COUNT(count_pcmd_mem);
                                                        OP2IAT_1(TYPE_INT);
                                                        break;
@@ -818,11 +810,6 @@ icmd_lconst_lcmp_tail:
                                                case ICMD_AASTORE:
                                                        COUNT(count_check_null);
                                                        COUNT(count_check_bound);
-                                               case ICMD_OPT_IASTORE:
-                                               case ICMD_OPT_LASTORE:
-                                               case ICMD_OPT_FASTORE:
-                                               case ICMD_OPT_DASTORE:
-                                               case ICMD_OPT_AASTORE:
                                                        COUNT(count_pcmd_mem);
                                                        OP3TIA_0(opcode-ICMD_IASTORE);
                                                        break;
@@ -832,9 +819,6 @@ icmd_lconst_lcmp_tail:
                                                        COUNT(count_check_null);
                                                        COUNT(count_check_bound);
                                                        COUNT(count_pcmd_mem);
-                                               case ICMD_OPT_BASTORE:
-                                               case ICMD_OPT_CASTORE:
-                                               case ICMD_OPT_SASTORE:
                                                        OP3TIA_0(TYPE_INT);
                                                        break;
 
index 6061f6eaac5d8f0f171a1f341ac89e02e34189ea..b51c230a4112c284342e77d8fdbe8d35a7eb1ab8 100644 (file)
@@ -516,67 +516,67 @@ icmd_lconst_tail:
                                                                                goto icmd_lconst_tail;
                                                                        case ICMD_LDIV:
                                                                                if (iptr[0].val.l == 0x00000002)
-                                                                                       iptr[0].val.l = 1;
+                                                                                       iptr[0].val.i = 1;
                                                                                else if (iptr[0].val.l == 0x00000004)
-                                                                                       iptr[0].val.l = 2;
+                                                                                       iptr[0].val.i = 2;
                                                                                else if (iptr[0].val.l == 0x00000008)
-                                                                                       iptr[0].val.l = 3;
+                                                                                       iptr[0].val.i = 3;
                                                                                else if (iptr[0].val.l == 0x00000010)
-                                                                                       iptr[0].val.l = 4;
+                                                                                       iptr[0].val.i = 4;
                                                                                else if (iptr[0].val.l == 0x00000020)
-                                                                                       iptr[0].val.l = 5;
+                                                                                       iptr[0].val.i = 5;
                                                                                else if (iptr[0].val.l == 0x00000040)
-                                                                                       iptr[0].val.l = 6;
+                                                                                       iptr[0].val.i = 6;
                                                                                else if (iptr[0].val.l == 0x00000080)
-                                                                                       iptr[0].val.l = 7;
+                                                                                       iptr[0].val.i = 7;
                                                                                else if (iptr[0].val.l == 0x00000100)
-                                                                                       iptr[0].val.l = 8;
+                                                                                       iptr[0].val.i = 8;
                                                                                else if (iptr[0].val.l == 0x00000200)
-                                                                                       iptr[0].val.l = 9;
+                                                                                       iptr[0].val.i = 9;
                                                                                else if (iptr[0].val.l == 0x00000400)
-                                                                                       iptr[0].val.l = 10;
+                                                                                       iptr[0].val.i = 10;
                                                                                else if (iptr[0].val.l == 0x00000800)
-                                                                                       iptr[0].val.l = 11;
+                                                                                       iptr[0].val.i = 11;
                                                                                else if (iptr[0].val.l == 0x00001000)
-                                                                                       iptr[0].val.l = 12;
+                                                                                       iptr[0].val.i = 12;
                                                                                else if (iptr[0].val.l == 0x00002000)
-                                                                                       iptr[0].val.l = 13;
+                                                                                       iptr[0].val.i = 13;
                                                                                else if (iptr[0].val.l == 0x00004000)
-                                                                                       iptr[0].val.l = 14;
+                                                                                       iptr[0].val.i = 14;
                                                                                else if (iptr[0].val.l == 0x00008000)
-                                                                                       iptr[0].val.l = 15;
+                                                                                       iptr[0].val.i = 15;
                                                                                else if (iptr[0].val.l == 0x00010000)
-                                                                                       iptr[0].val.l = 16;
+                                                                                       iptr[0].val.i = 16;
                                                                                else if (iptr[0].val.l == 0x00020000)
-                                                                                       iptr[0].val.l = 17;
+                                                                                       iptr[0].val.i = 17;
                                                                                else if (iptr[0].val.l == 0x00040000)
-                                                                                       iptr[0].val.l = 18;
+                                                                                       iptr[0].val.i = 18;
                                                                                else if (iptr[0].val.l == 0x00080000)
-                                                                                       iptr[0].val.l = 19;
+                                                                                       iptr[0].val.i = 19;
                                                                                else if (iptr[0].val.l == 0x00100000)
-                                                                                       iptr[0].val.l = 20;
+                                                                                       iptr[0].val.i = 20;
                                                                                else if (iptr[0].val.l == 0x00200000)
-                                                                                       iptr[0].val.l = 21;
+                                                                                       iptr[0].val.i = 21;
                                                                                else if (iptr[0].val.l == 0x00400000)
-                                                                                       iptr[0].val.l = 22;
+                                                                                       iptr[0].val.i = 22;
                                                                                else if (iptr[0].val.l == 0x00800000)
-                                                                                       iptr[0].val.l = 23;
+                                                                                       iptr[0].val.i = 23;
                                                                                else if (iptr[0].val.l == 0x01000000)
-                                                                                       iptr[0].val.l = 24;
+                                                                                       iptr[0].val.i = 24;
                                                                                else if (iptr[0].val.l == 0x02000000)
-                                                                                       iptr[0].val.l = 25;
+                                                                                       iptr[0].val.i = 25;
                                                                                else if (iptr[0].val.l == 0x04000000)
-                                                                                       iptr[0].val.l = 26;
+                                                                                       iptr[0].val.i = 26;
                                                                                else if (iptr[0].val.l == 0x08000000)
-                                                                                       iptr[0].val.l = 27;
+                                                                                       iptr[0].val.i = 27;
                                                                                else if (iptr[0].val.l == 0x10000000)
-                                                                                       iptr[0].val.l = 28;
+                                                                                       iptr[0].val.i = 28;
                                                                                else if (iptr[0].val.l == 0x20000000)
-                                                                                       iptr[0].val.l = 29;
+                                                                                       iptr[0].val.i = 29;
                                                                                else if (iptr[0].val.l == 0x40000000)
-                                                                                       iptr[0].val.l = 30;
+                                                                                       iptr[0].val.i = 30;
                                                                                else if (iptr[0].val.l == 0x80000000)
-                                                                                       iptr[0].val.l = 31;
+                                                                                       iptr[0].val.i = 31;
                                                                                else {
                                                                                        PUSHCONST(TYPE_LNG);
                                                                                        break;
@@ -724,11 +724,6 @@ icmd_lconst_lcmp_tail:
                                                case ICMD_AALOAD:
                                                        COUNT(count_check_null);
                                                        COUNT(count_check_bound);
-                                               case ICMD_OPT_IALOAD:
-                                               case ICMD_OPT_LALOAD:
-                                               case ICMD_OPT_FALOAD:
-                                               case ICMD_OPT_DALOAD:
-                                               case ICMD_OPT_AALOAD:
                                                        COUNT(count_pcmd_mem);
                                                        OP2IAT_1(opcode-ICMD_IALOAD);
                                                        break;
@@ -738,9 +733,6 @@ icmd_lconst_lcmp_tail:
                                                case ICMD_SALOAD:
                                                        COUNT(count_check_null);
                                                        COUNT(count_check_bound);
-                                               case ICMD_OPT_BALOAD:
-                                               case ICMD_OPT_CALOAD:
-                                               case ICMD_OPT_SALOAD:
                                                        COUNT(count_pcmd_mem);
                                                        OP2IAT_1(TYPE_INT);
                                                        break;
@@ -818,11 +810,6 @@ icmd_lconst_lcmp_tail:
                                                case ICMD_AASTORE:
                                                        COUNT(count_check_null);
                                                        COUNT(count_check_bound);
-                                               case ICMD_OPT_IASTORE:
-                                               case ICMD_OPT_LASTORE:
-                                               case ICMD_OPT_FASTORE:
-                                               case ICMD_OPT_DASTORE:
-                                               case ICMD_OPT_AASTORE:
                                                        COUNT(count_pcmd_mem);
                                                        OP3TIA_0(opcode-ICMD_IASTORE);
                                                        break;
@@ -832,9 +819,6 @@ icmd_lconst_lcmp_tail:
                                                        COUNT(count_check_null);
                                                        COUNT(count_check_bound);
                                                        COUNT(count_pcmd_mem);
-                                               case ICMD_OPT_BASTORE:
-                                               case ICMD_OPT_CASTORE:
-                                               case ICMD_OPT_SASTORE:
                                                        OP3TIA_0(TYPE_INT);
                                                        break;