From 20af4ca60874df516e31350697c9bf15b2af3ed0 Mon Sep 17 00:00:00 2001 From: cacao Date: Mon, 30 Nov 1998 22:54:31 +0000 Subject: [PATCH] arg reg bug fixed, array optimizations --- jit.c | 4 +-- jit/jitdef.h | 59 +++++------------------------------ jit/mcode.c | 5 --- jit/reg.c | 45 +++++++++++++------------- jit/stack.c | 78 ++++++++++++++++++---------------------------- src/vm/jit/stack.c | 78 ++++++++++++++++++---------------------------- 6 files changed, 92 insertions(+), 177 deletions(-) diff --git a/jit.c b/jit.c index 76501880e..a290bc064 100644 --- 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 */ diff --git a/jit/jitdef.h b/jit/jitdef.h index 8867aad02..0a69c868e 100644 --- a/jit/jitdef.h +++ b/jit/jitdef.h @@ -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 */ diff --git a/jit/mcode.c b/jit/mcode.c index ce460184b..19d43519c 100644 --- a/jit/mcode.c +++ b/jit/mcode.c @@ -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 - } diff --git a/jit/reg.c b/jit/reg.c index ad187c7d3..1f9445b2d 100644 --- 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); diff --git a/jit/stack.c b/jit/stack.c index 6061f6eaa..b51c230a4 100644 --- a/jit/stack.c +++ b/jit/stack.c @@ -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; diff --git a/src/vm/jit/stack.c b/src/vm/jit/stack.c index 6061f6eaa..b51c230a4 100644 --- a/src/vm/jit/stack.c +++ b/src/vm/jit/stack.c @@ -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; -- 2.25.1