* src/vm/jit/verify/typecheck.c (verify_basic_block): Use generated
authoredwin <none@none>
Fri, 13 Oct 2006 14:34:19 +0000 (14:34 +0000)
committeredwin <none@none>
Fri, 13 Oct 2006 14:34:19 +0000 (14:34 +0000)
code.

* src/vm/jit/verify/typecheck-stackbased-gen.inc: New file, GENERATED!
* src/vm/jit/verify/typecheck-variablesbased-gen.inc: Likewise.

* src/vm/jit/verify/typecheck.h (typecheck_stackbased): Added.

* src/vm/jit/verify/Makefile.am: Added source files for both generated
verifiers.

* src/vm/jit/jit.c (jit_compile_intern): Call the stack-based verifier
for the interpreter.

* src/vm/vm.c (vm_create): Re-enable verification fot the interpreter.

src/vm/jit/jit.c
src/vm/jit/verify/Makefile.am
src/vm/jit/verify/typecheck-stackbased-gen.inc [new file with mode: 0644]
src/vm/jit/verify/typecheck-variablesbased-gen.inc [new file with mode: 0644]
src/vm/jit/verify/typecheck.c
src/vm/jit/verify/typecheck.h
src/vm/vm.c

index 9ee94d399f8c93f2873f055f5b96b98f214c6aec..4a76ff9005b73d4fcbb13d7becb519b8bfa0613a 100644 (file)
@@ -31,7 +31,7 @@
             Christian Thalinger
             Christian Ullrich
 
-   $Id: jit.c 5770 2006-10-13 13:11:09Z edwin $
+   $Id: jit.c 5773 2006-10-13 14:34:19Z edwin $
 
 */
 
@@ -1422,6 +1422,16 @@ static u1 *jit_compile_intern(jitdata *jd)
 #if defined(ENABLE_JIT)
 # if defined(ENABLE_INTRP)
        if (opt_intrp) {
+#if defined(ENABLE_VERIFIER)
+               if (opt_verify) {
+                       DEBUG_JIT_COMPILEVERBOSE("Typechecking (stackbased): ");
+
+                       if (!typecheck_stackbased(jd)) {
+                               DEBUG_JIT_COMPILEVERBOSE("Exception while typechecking (stackbased): ");
+                               return NULL;
+                       }
+               }
+#endif
                if (!intrp_codegen(jd)) {
                        DEBUG_JIT_COMPILEVERBOSE("Exception while generating code: ");
 
index d8082876bb95de9b7a8ab6cb60df95e0328d7a9d..ca7661f3b18bdd7fedf25441095a5491ddfe76cd 100644 (file)
@@ -26,9 +26,9 @@
 ##
 ## Authors: Christian Thalinger
 ##
-## Changes:
+## Changes: Edwin Steiner
 ##
-## $Id: Makefile.am 5746 2006-10-12 10:10:06Z edwin $
+## $Id: Makefile.am 5773 2006-10-13 14:34:19Z edwin $
 
 ## Process this file with automake to produce Makefile.in
 
@@ -46,6 +46,9 @@ libverify_la_SOURCES = \
        typecheck-builtins.inc \
        typecheck-fields.inc \
        typecheck-invoke.inc \
+       typecheck-stackbased.c \
+       typecheck-stackbased-gen.inc \
+       typecheck-variablesbased-gen.inc \
        typeinfo.c \
        typeinfo.h
 
diff --git a/src/vm/jit/verify/typecheck-stackbased-gen.inc b/src/vm/jit/verify/typecheck-stackbased-gen.inc
new file mode 100644 (file)
index 0000000..a46fdb7
--- /dev/null
@@ -0,0 +1,1958 @@
+#define GENERATED
+
+  GENERATED  case ICMD_NOP:
+  GENERATED    /* (--) */
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_ACONST:
+  GENERATED    /* (--A) */
+  GENERATED    maythrow = true;
+  GENERATED    CHECK_STACK_SPACE(1);
+  GENERATED  
+#              define DST  (&(stack[1]))
+  GENERATED    /* may use stack[1] ... stack[1] */
+  GENERATED  
+  GENERATED  
+#              line 308 "src/vm/jit/verify/icmds.c"
+  GENERATED    if (IPTR->flags.bits & INS_FLAG_CLASS) {
+  GENERATED            /* a java.lang.Class reference */
+  GENERATED            TYPEINFO_INIT_JAVA_LANG_CLASS(DST->typeinfo,IPTR->sx.val.c);
+  GENERATED    }
+  GENERATED    else {
+  GENERATED            if (IPTR->sx.val.anyptr == NULL)
+  GENERATED                    TYPEINFO_INIT_NULLTYPE(DST->typeinfo);
+  GENERATED            else {
+  GENERATED                    /* string constant (or constant for builtin function) */
+  GENERATED                    typeinfo_init_classinfo(&(DST->typeinfo),class_java_lang_String);
+  GENERATED            }
+  GENERATED    }
+  GENERATED  
+#              line 32 "src/vm/jit/verify/typecheck-stackbased-gen.inc"
+  GENERATED  
+  GENERATED    stack += 1;
+  GENERATED    stack[0].type = TYPE_ADR;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+#              undef DST
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_CHECKNULL:
+  GENERATED    /* (A--A) */
+  GENERATED    maythrow = true;
+  GENERATED    CHECK_STACK_DEPTH(1);
+  GENERATED    CHECK_STACK_TYPE(stack[0], TYPE_ADR);
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_ICONST:
+  GENERATED    /* (--I) */
+  GENERATED    CHECK_STACK_SPACE(1);
+  GENERATED    stack += 1;
+  GENERATED    stack[0].type = TYPE_INT;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_CHECKNULL_POP:
+  GENERATED    /* (A--) */
+  GENERATED    maythrow = true;
+  GENERATED    CHECK_STACK_DEPTH(1);
+  GENERATED    CHECK_STACK_TYPE(stack[0], TYPE_ADR);
+  GENERATED    stack += -1;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_LCONST:
+  GENERATED    /* (--L) */
+  GENERATED    CHECK_STACK_SPACE(2);
+  GENERATED    stack += 2;
+  GENERATED    stack[0].type = TYPE_VOID;
+  GENERATED    stack[-1].type = TYPE_LNG;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_FCONST:
+  GENERATED    /* (--F) */
+  GENERATED    CHECK_STACK_SPACE(1);
+  GENERATED    stack += 1;
+  GENERATED    stack[0].type = TYPE_FLT;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_DCONST:
+  GENERATED    /* (--D) */
+  GENERATED    CHECK_STACK_SPACE(2);
+  GENERATED    stack += 2;
+  GENERATED    stack[0].type = TYPE_VOID;
+  GENERATED    stack[-1].type = TYPE_DBL;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_ILOAD:
+  GENERATED    /* (--I) */
+  GENERATED    CHECK_STACK_SPACE(1);
+  GENERATED    CHECK_LOCAL_TYPE(IPTR->s1.varindex, TYPE_INT);
+  GENERATED    stack += 1;
+  GENERATED    stack[0].type = TYPE_INT;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_LLOAD:
+  GENERATED    /* (--L) */
+  GENERATED    CHECK_STACK_SPACE(2);
+  GENERATED    CHECK_LOCAL_TYPE(IPTR->s1.varindex, TYPE_LNG);
+  GENERATED    stack += 2;
+  GENERATED    stack[0].type = TYPE_VOID;
+  GENERATED    stack[-1].type = TYPE_LNG;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_FLOAD:
+  GENERATED    /* (--F) */
+  GENERATED    CHECK_STACK_SPACE(1);
+  GENERATED    CHECK_LOCAL_TYPE(IPTR->s1.varindex, TYPE_FLT);
+  GENERATED    stack += 1;
+  GENERATED    stack[0].type = TYPE_FLT;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_DLOAD:
+  GENERATED    /* (--D) */
+  GENERATED    CHECK_STACK_SPACE(2);
+  GENERATED    CHECK_LOCAL_TYPE(IPTR->s1.varindex, TYPE_DBL);
+  GENERATED    stack += 2;
+  GENERATED    stack[0].type = TYPE_VOID;
+  GENERATED    stack[-1].type = TYPE_DBL;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_ALOAD:
+  GENERATED    /* (--A) */
+  GENERATED    CHECK_STACK_SPACE(1);
+  GENERATED    CHECK_LOCAL_TYPE(IPTR->s1.varindex, TYPE_ADR);
+  GENERATED  
+#              define OP1 LOCAL_SLOT(IPTR->s1.varindex)
+  GENERATED  
+#              define DST  (&(stack[1]))
+  GENERATED    /* may use stack[1] ... stack[1] */
+  GENERATED  
+  GENERATED  
+#              line 57 "src/vm/jit/verify/icmds.c"
+  GENERATED    TYPECHECK_COUNT(stat_ins_aload);
+  GENERATED  
+  GENERATED    /* loading a returnAddress is not allowed */
+  GENERATED    if (!TYPEDESC_IS_REFERENCE(*OP1)) {
+  GENERATED            VERIFY_ERROR("illegal instruction: ALOAD loading non-reference");
+  GENERATED    }
+  GENERATED    TYPEINFO_COPY(OP1->typeinfo,DST->typeinfo);
+  GENERATED  
+#              line 151 "src/vm/jit/verify/typecheck-stackbased-gen.inc"
+  GENERATED  
+  GENERATED    stack += 1;
+  GENERATED    stack[0].type = TYPE_ADR;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+#              undef OP1
+  GENERATED  
+#              undef DST
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_IALOAD:
+  GENERATED    /* (AI--I) */
+  GENERATED    maythrow = true;
+  GENERATED    CHECK_STACK_DEPTH(2);
+  GENERATED    CHECK_STACK_TYPE(stack[-1], TYPE_ADR);
+  GENERATED    CHECK_STACK_TYPE(stack[0], TYPE_INT);
+  GENERATED  
+#              define OP1 (&(stack[-1]))
+  GENERATED  
+#              define OP2 (&(stack[0]))
+  GENERATED  
+#              define DST  (&(stack[-1]))
+  GENERATED    /* may use stack[-1] ... stack[0] */
+  GENERATED  
+  GENERATED  
+#              line 219 "src/vm/jit/verify/icmds.c"
+  GENERATED    if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_INT))
+  GENERATED            VERIFY_ERROR("Array type mismatch");
+  GENERATED  
+#              line 182 "src/vm/jit/verify/typecheck-stackbased-gen.inc"
+  GENERATED  
+  GENERATED    stack += -1;
+  GENERATED    stack[0].type = TYPE_INT;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+#              undef OP1
+  GENERATED  
+#              undef OP2
+  GENERATED  
+#              undef DST
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_LALOAD:
+  GENERATED    /* (AI--L) */
+  GENERATED    maythrow = true;
+  GENERATED    CHECK_STACK_DEPTH(2);
+  GENERATED    CHECK_STACK_TYPE(stack[-1], TYPE_ADR);
+  GENERATED    CHECK_STACK_TYPE(stack[0], TYPE_INT);
+  GENERATED  
+#              define OP1 (&(stack[-1]))
+  GENERATED  
+#              define OP2 (&(stack[0]))
+  GENERATED  
+#              define DST  (&(stack[-1]))
+  GENERATED    /* may use stack[-1] ... stack[0] */
+  GENERATED  
+  GENERATED  
+#              line 229 "src/vm/jit/verify/icmds.c"
+  GENERATED    if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_LONG))
+  GENERATED            VERIFY_ERROR("Array type mismatch");
+  GENERATED  
+#              line 215 "src/vm/jit/verify/typecheck-stackbased-gen.inc"
+  GENERATED  
+  GENERATED    stack[0].type = TYPE_VOID;
+  GENERATED    stack[-1].type = TYPE_LNG;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+#              undef OP1
+  GENERATED  
+#              undef OP2
+  GENERATED  
+#              undef DST
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_FALOAD:
+  GENERATED    /* (AI--F) */
+  GENERATED    maythrow = true;
+  GENERATED    CHECK_STACK_DEPTH(2);
+  GENERATED    CHECK_STACK_TYPE(stack[-1], TYPE_ADR);
+  GENERATED    CHECK_STACK_TYPE(stack[0], TYPE_INT);
+  GENERATED  
+#              define OP1 (&(stack[-1]))
+  GENERATED  
+#              define OP2 (&(stack[0]))
+  GENERATED  
+#              define DST  (&(stack[-1]))
+  GENERATED    /* may use stack[-1] ... stack[0] */
+  GENERATED  
+  GENERATED  
+#              line 214 "src/vm/jit/verify/icmds.c"
+  GENERATED    if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_FLOAT))
+  GENERATED            VERIFY_ERROR("Array type mismatch");
+  GENERATED  
+#              line 248 "src/vm/jit/verify/typecheck-stackbased-gen.inc"
+  GENERATED  
+  GENERATED    stack += -1;
+  GENERATED    stack[0].type = TYPE_FLT;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+#              undef OP1
+  GENERATED  
+#              undef OP2
+  GENERATED  
+#              undef DST
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_DALOAD:
+  GENERATED    /* (AI--D) */
+  GENERATED    maythrow = true;
+  GENERATED    CHECK_STACK_DEPTH(2);
+  GENERATED    CHECK_STACK_TYPE(stack[-1], TYPE_ADR);
+  GENERATED    CHECK_STACK_TYPE(stack[0], TYPE_INT);
+  GENERATED  
+#              define OP1 (&(stack[-1]))
+  GENERATED  
+#              define OP2 (&(stack[0]))
+  GENERATED  
+#              define DST  (&(stack[-1]))
+  GENERATED    /* may use stack[-1] ... stack[0] */
+  GENERATED  
+  GENERATED  
+#              line 209 "src/vm/jit/verify/icmds.c"
+  GENERATED    if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_DOUBLE))
+  GENERATED            VERIFY_ERROR("Array type mismatch");
+  GENERATED  
+#              line 281 "src/vm/jit/verify/typecheck-stackbased-gen.inc"
+  GENERATED  
+  GENERATED    stack[0].type = TYPE_VOID;
+  GENERATED    stack[-1].type = TYPE_DBL;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+#              undef OP1
+  GENERATED  
+#              undef OP2
+  GENERATED  
+#              undef DST
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_AALOAD:
+  GENERATED    /* (AI--A) */
+  GENERATED    maythrow = true;
+  GENERATED    CHECK_STACK_DEPTH(2);
+  GENERATED    CHECK_STACK_TYPE(stack[-1], TYPE_ADR);
+  GENERATED    CHECK_STACK_TYPE(stack[0], TYPE_INT);
+  GENERATED  
+#              define OP1 (&(stack[-1]))
+  GENERATED  
+#              define OP2 (&(stack[0]))
+  GENERATED  
+#              define DST  (&(stack[-1]))
+  GENERATED    /* may use stack[-1] ... stack[0] */
+  GENERATED  
+  GENERATED  
+#              line 77 "src/vm/jit/verify/icmds.c"
+  GENERATED    if (!TYPEINFO_MAYBE_ARRAY_OF_REFS(OP1->typeinfo))
+  GENERATED            VERIFY_ERROR("illegal instruction: AALOAD on non-reference array");
+  GENERATED  
+  GENERATED    if (!typeinfo_init_component(&OP1->typeinfo,&DST->typeinfo))
+  GENERATED            EXCEPTION;
+  GENERATED  
+#              line 317 "src/vm/jit/verify/typecheck-stackbased-gen.inc"
+  GENERATED  
+  GENERATED    stack += -1;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+#              undef OP1
+  GENERATED  
+#              undef OP2
+  GENERATED  
+#              undef DST
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_BALOAD:
+  GENERATED    /* (AI--I) */
+  GENERATED    maythrow = true;
+  GENERATED    CHECK_STACK_DEPTH(2);
+  GENERATED    CHECK_STACK_TYPE(stack[-1], TYPE_ADR);
+  GENERATED    CHECK_STACK_TYPE(stack[0], TYPE_INT);
+  GENERATED  
+#              define OP1 (&(stack[-1]))
+  GENERATED  
+#              define OP2 (&(stack[0]))
+  GENERATED  
+#              define DST  (&(stack[-1]))
+  GENERATED    /* may use stack[-1] ... stack[0] */
+  GENERATED  
+  GENERATED  
+#              line 198 "src/vm/jit/verify/icmds.c"
+  GENERATED    if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_BOOLEAN)
+  GENERATED                    && !TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_BYTE))
+  GENERATED            VERIFY_ERROR("Array type mismatch");
+  GENERATED  
+#              line 350 "src/vm/jit/verify/typecheck-stackbased-gen.inc"
+  GENERATED  
+  GENERATED    stack += -1;
+  GENERATED    stack[0].type = TYPE_INT;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+#              undef OP1
+  GENERATED  
+#              undef OP2
+  GENERATED  
+#              undef DST
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_CALOAD:
+  GENERATED    /* (AI--I) */
+  GENERATED    maythrow = true;
+  GENERATED    CHECK_STACK_DEPTH(2);
+  GENERATED    CHECK_STACK_TYPE(stack[-1], TYPE_ADR);
+  GENERATED    CHECK_STACK_TYPE(stack[0], TYPE_INT);
+  GENERATED  
+#              define OP1 (&(stack[-1]))
+  GENERATED  
+#              define OP2 (&(stack[0]))
+  GENERATED  
+#              define DST  (&(stack[-1]))
+  GENERATED    /* may use stack[-1] ... stack[0] */
+  GENERATED  
+  GENERATED  
+#              line 204 "src/vm/jit/verify/icmds.c"
+  GENERATED    if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_CHAR))
+  GENERATED            VERIFY_ERROR("Array type mismatch");
+  GENERATED  
+#              line 383 "src/vm/jit/verify/typecheck-stackbased-gen.inc"
+  GENERATED  
+  GENERATED    stack += -1;
+  GENERATED    stack[0].type = TYPE_INT;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+#              undef OP1
+  GENERATED  
+#              undef OP2
+  GENERATED  
+#              undef DST
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_SALOAD:
+  GENERATED    /* (AI--I) */
+  GENERATED    maythrow = true;
+  GENERATED    CHECK_STACK_DEPTH(2);
+  GENERATED    CHECK_STACK_TYPE(stack[-1], TYPE_ADR);
+  GENERATED    CHECK_STACK_TYPE(stack[0], TYPE_INT);
+  GENERATED  
+#              define OP1 (&(stack[-1]))
+  GENERATED  
+#              define OP2 (&(stack[0]))
+  GENERATED  
+#              define DST  (&(stack[-1]))
+  GENERATED    /* may use stack[-1] ... stack[0] */
+  GENERATED  
+  GENERATED  
+#              line 224 "src/vm/jit/verify/icmds.c"
+  GENERATED    if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_SHORT))
+  GENERATED            VERIFY_ERROR("Array type mismatch");
+  GENERATED  
+#              line 416 "src/vm/jit/verify/typecheck-stackbased-gen.inc"
+  GENERATED  
+  GENERATED    stack += -1;
+  GENERATED    stack[0].type = TYPE_INT;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+#              undef OP1
+  GENERATED  
+#              undef OP2
+  GENERATED  
+#              undef DST
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_ISTORE:
+  GENERATED    /* (I--) */
+  GENERATED    CHECK_STACK_DEPTH(1);
+  GENERATED    CHECK_STACK_TYPE(stack[0], TYPE_INT);
+  GENERATED    STORE_LOCAL(TYPE_INT, IPTR->dst.varindex);
+  GENERATED    stack += -1;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_LSTORE:
+  GENERATED    /* (L--) */
+  GENERATED    CHECK_STACK_DEPTH(2);
+  GENERATED    CHECK_STACK_TYPE(stack[-1], TYPE_LNG);
+  GENERATED    STORE_LOCAL_2_WORD(TYPE_LNG, IPTR->dst.varindex);
+  GENERATED    stack += -2;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_FSTORE:
+  GENERATED    /* (F--) */
+  GENERATED    CHECK_STACK_DEPTH(1);
+  GENERATED    CHECK_STACK_TYPE(stack[0], TYPE_FLT);
+  GENERATED    STORE_LOCAL(TYPE_FLT, IPTR->dst.varindex);
+  GENERATED    stack += -1;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_DSTORE:
+  GENERATED    /* (D--) */
+  GENERATED    CHECK_STACK_DEPTH(2);
+  GENERATED    CHECK_STACK_TYPE(stack[-1], TYPE_DBL);
+  GENERATED    STORE_LOCAL_2_WORD(TYPE_DBL, IPTR->dst.varindex);
+  GENERATED    stack += -2;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_ASTORE:
+  GENERATED    /* (A--) */
+  GENERATED    CHECK_STACK_DEPTH(1);
+  GENERATED    CHECK_STACK_TYPE(stack[0], TYPE_ADR);
+  GENERATED    STORE_LOCAL(TYPE_ADR, IPTR->dst.varindex);
+  GENERATED  
+#              define DST LOCAL_SLOT(IPTR->dst.varindex)
+  GENERATED  
+#              define OP1 (&(stack[0]))
+  GENERATED    /* may use stack[0] ... stack[0] */
+  GENERATED  
+  GENERATED  
+#              line 70 "src/vm/jit/verify/icmds.c"
+  GENERATED    TYPEINFO_COPY(OP1->typeinfo, DST->typeinfo);
+  GENERATED  
+#              line 481 "src/vm/jit/verify/typecheck-stackbased-gen.inc"
+  GENERATED  
+  GENERATED    stack += -1;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+#              undef DST
+  GENERATED  
+#              undef OP1
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_IASTORE:
+  GENERATED    /* (AII--) */
+  GENERATED    maythrow = true;
+  GENERATED    CHECK_STACK_DEPTH(3);
+  GENERATED    CHECK_STACK_TYPE(stack[-2], TYPE_ADR);
+  GENERATED    CHECK_STACK_TYPE(stack[-1], TYPE_INT);
+  GENERATED    CHECK_STACK_TYPE(stack[0], TYPE_INT);
+  GENERATED  
+#              define OP1 (&(stack[-2]))
+  GENERATED  
+#              define OP2 (&(stack[-1]))
+  GENERATED  
+#              define OP3 (&(stack[0]))
+  GENERATED    /* may use stack[-2] ... stack[0] */
+  GENERATED  
+  GENERATED  
+#              line 255 "src/vm/jit/verify/icmds.c"
+  GENERATED    if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_INT))
+  GENERATED            VERIFY_ERROR("Array type mismatch");
+  GENERATED  
+#              line 512 "src/vm/jit/verify/typecheck-stackbased-gen.inc"
+  GENERATED  
+  GENERATED    stack += -3;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+#              undef OP1
+  GENERATED  
+#              undef OP2
+  GENERATED  
+#              undef OP3
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_LASTORE:
+  GENERATED    /* (AIL--) */
+  GENERATED    maythrow = true;
+  GENERATED    CHECK_STACK_DEPTH(4);
+  GENERATED    CHECK_STACK_TYPE(stack[-3], TYPE_ADR);
+  GENERATED    CHECK_STACK_TYPE(stack[-2], TYPE_INT);
+  GENERATED    CHECK_STACK_TYPE(stack[-1], TYPE_LNG);
+  GENERATED  
+#              define OP1 (&(stack[-3]))
+  GENERATED  
+#              define OP2 (&(stack[-2]))
+  GENERATED  
+#              define OP3 (&(stack[-1]))
+  GENERATED    /* may use stack[-3] ... stack[0] */
+  GENERATED  
+  GENERATED  
+#              line 265 "src/vm/jit/verify/icmds.c"
+  GENERATED    if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_LONG))
+  GENERATED            VERIFY_ERROR("Array type mismatch");
+  GENERATED  
+#              line 545 "src/vm/jit/verify/typecheck-stackbased-gen.inc"
+  GENERATED  
+  GENERATED    stack += -4;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+#              undef OP1
+  GENERATED  
+#              undef OP2
+  GENERATED  
+#              undef OP3
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_FASTORE:
+  GENERATED    /* (AIF--) */
+  GENERATED    maythrow = true;
+  GENERATED    CHECK_STACK_DEPTH(3);
+  GENERATED    CHECK_STACK_TYPE(stack[-2], TYPE_ADR);
+  GENERATED    CHECK_STACK_TYPE(stack[-1], TYPE_INT);
+  GENERATED    CHECK_STACK_TYPE(stack[0], TYPE_FLT);
+  GENERATED  
+#              define OP1 (&(stack[-2]))
+  GENERATED  
+#              define OP2 (&(stack[-1]))
+  GENERATED  
+#              define OP3 (&(stack[0]))
+  GENERATED    /* may use stack[-2] ... stack[0] */
+  GENERATED  
+  GENERATED  
+#              line 250 "src/vm/jit/verify/icmds.c"
+  GENERATED    if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_FLOAT))
+  GENERATED            VERIFY_ERROR("Array type mismatch");
+  GENERATED  
+#              line 578 "src/vm/jit/verify/typecheck-stackbased-gen.inc"
+  GENERATED  
+  GENERATED    stack += -3;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+#              undef OP1
+  GENERATED  
+#              undef OP2
+  GENERATED  
+#              undef OP3
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_DASTORE:
+  GENERATED    /* (AID--) */
+  GENERATED    maythrow = true;
+  GENERATED    CHECK_STACK_DEPTH(4);
+  GENERATED    CHECK_STACK_TYPE(stack[-3], TYPE_ADR);
+  GENERATED    CHECK_STACK_TYPE(stack[-2], TYPE_INT);
+  GENERATED    CHECK_STACK_TYPE(stack[-1], TYPE_DBL);
+  GENERATED  
+#              define OP1 (&(stack[-3]))
+  GENERATED  
+#              define OP2 (&(stack[-2]))
+  GENERATED  
+#              define OP3 (&(stack[-1]))
+  GENERATED    /* may use stack[-3] ... stack[0] */
+  GENERATED  
+  GENERATED  
+#              line 245 "src/vm/jit/verify/icmds.c"
+  GENERATED    if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_DOUBLE))
+  GENERATED            VERIFY_ERROR("Array type mismatch");
+  GENERATED  
+#              line 611 "src/vm/jit/verify/typecheck-stackbased-gen.inc"
+  GENERATED  
+  GENERATED    stack += -4;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+#              undef OP1
+  GENERATED  
+#              undef OP2
+  GENERATED  
+#              undef OP3
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_AASTORE:
+  GENERATED    /* (AIA--) */
+  GENERATED    maythrow = true;
+  GENERATED    CHECK_STACK_DEPTH(3);
+  GENERATED    CHECK_STACK_TYPE(stack[-2], TYPE_ADR);
+  GENERATED    CHECK_STACK_TYPE(stack[-1], TYPE_INT);
+  GENERATED    CHECK_STACK_TYPE(stack[0], TYPE_ADR);
+  GENERATED  
+#              define OP1 (&(stack[-2]))
+  GENERATED  
+#              define OP2 (&(stack[-1]))
+  GENERATED  
+#              define OP3 (&(stack[0]))
+  GENERATED    /* may use stack[-2] ... stack[0] */
+  GENERATED  
+  GENERATED  
+#              line 270 "src/vm/jit/verify/icmds.c"
+  GENERATED    /* we just check the basic input types and that the           */
+  GENERATED    /* destination is an array of references. Assignability to    */
+  GENERATED    /* the actual array must be checked at runtime, each time the */
+  GENERATED    /* instruction is performed. (See builtin_canstore.)          */
+  GENERATED    if (!TYPEINFO_MAYBE_ARRAY_OF_REFS(OP1->typeinfo))
+  GENERATED            VERIFY_ERROR("illegal instruction: AASTORE to non-reference array");
+  GENERATED  
+#              line 648 "src/vm/jit/verify/typecheck-stackbased-gen.inc"
+  GENERATED  
+  GENERATED    stack += -3;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+#              undef OP1
+  GENERATED  
+#              undef OP2
+  GENERATED  
+#              undef OP3
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_BASTORE:
+  GENERATED    /* (AII--) */
+  GENERATED    maythrow = true;
+  GENERATED    CHECK_STACK_DEPTH(3);
+  GENERATED    CHECK_STACK_TYPE(stack[-2], TYPE_ADR);
+  GENERATED    CHECK_STACK_TYPE(stack[-1], TYPE_INT);
+  GENERATED    CHECK_STACK_TYPE(stack[0], TYPE_INT);
+  GENERATED  
+#              define OP1 (&(stack[-2]))
+  GENERATED  
+#              define OP2 (&(stack[-1]))
+  GENERATED  
+#              define OP3 (&(stack[0]))
+  GENERATED    /* may use stack[-2] ... stack[0] */
+  GENERATED  
+  GENERATED  
+#              line 234 "src/vm/jit/verify/icmds.c"
+  GENERATED    if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_BOOLEAN)
+  GENERATED                    && !TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_BYTE))
+  GENERATED            VERIFY_ERROR("Array type mismatch");
+  GENERATED  
+#              line 682 "src/vm/jit/verify/typecheck-stackbased-gen.inc"
+  GENERATED  
+  GENERATED    stack += -3;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+#              undef OP1
+  GENERATED  
+#              undef OP2
+  GENERATED  
+#              undef OP3
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_CASTORE:
+  GENERATED    /* (AII--) */
+  GENERATED    maythrow = true;
+  GENERATED    CHECK_STACK_DEPTH(3);
+  GENERATED    CHECK_STACK_TYPE(stack[-2], TYPE_ADR);
+  GENERATED    CHECK_STACK_TYPE(stack[-1], TYPE_INT);
+  GENERATED    CHECK_STACK_TYPE(stack[0], TYPE_INT);
+  GENERATED  
+#              define OP1 (&(stack[-2]))
+  GENERATED  
+#              define OP2 (&(stack[-1]))
+  GENERATED  
+#              define OP3 (&(stack[0]))
+  GENERATED    /* may use stack[-2] ... stack[0] */
+  GENERATED  
+  GENERATED  
+#              line 240 "src/vm/jit/verify/icmds.c"
+  GENERATED    if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_CHAR))
+  GENERATED            VERIFY_ERROR("Array type mismatch");
+  GENERATED  
+#              line 715 "src/vm/jit/verify/typecheck-stackbased-gen.inc"
+  GENERATED  
+  GENERATED    stack += -3;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+#              undef OP1
+  GENERATED  
+#              undef OP2
+  GENERATED  
+#              undef OP3
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_SASTORE:
+  GENERATED    /* (AII--) */
+  GENERATED    maythrow = true;
+  GENERATED    CHECK_STACK_DEPTH(3);
+  GENERATED    CHECK_STACK_TYPE(stack[-2], TYPE_ADR);
+  GENERATED    CHECK_STACK_TYPE(stack[-1], TYPE_INT);
+  GENERATED    CHECK_STACK_TYPE(stack[0], TYPE_INT);
+  GENERATED  
+#              define OP1 (&(stack[-2]))
+  GENERATED  
+#              define OP2 (&(stack[-1]))
+  GENERATED  
+#              define OP3 (&(stack[0]))
+  GENERATED    /* may use stack[-2] ... stack[0] */
+  GENERATED  
+  GENERATED  
+#              line 260 "src/vm/jit/verify/icmds.c"
+  GENERATED    if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_SHORT))
+  GENERATED            VERIFY_ERROR("Array type mismatch");
+  GENERATED  
+#              line 748 "src/vm/jit/verify/typecheck-stackbased-gen.inc"
+  GENERATED  
+  GENERATED    stack += -3;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+#              undef OP1
+  GENERATED  
+#              undef OP2
+  GENERATED  
+#              undef OP3
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_POP:
+  GENERATED    /* (1--) */
+  GENERATED    CHECK_STACK_DEPTH(1);
+  GENERATED    /* may use stack[0] ... stack[0] */
+  GENERATED  
+  GENERATED  
+#              line 656 "src/vm/jit/verify/icmds.c"
+  GENERATED    /* we pop 1 */
+  GENERATED    CHECK_CAT1(stack[0]);
+  GENERATED  
+#              line 771 "src/vm/jit/verify/typecheck-stackbased-gen.inc"
+  GENERATED  
+  GENERATED    stack += -1;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_POP2:
+  GENERATED    /* (11--|2--) */
+  GENERATED    CHECK_STACK_DEPTH(2);
+  GENERATED    /* may use stack[-1] ... stack[0] */
+  GENERATED  
+  GENERATED  
+#              line 661 "src/vm/jit/verify/icmds.c"
+  GENERATED    /* we pop either 11 or 2 */
+  GENERATED    if (IS_CAT1(stack[0]))
+  GENERATED            CHECK_CAT1(stack[-1]);
+  GENERATED  
+#              line 788 "src/vm/jit/verify/typecheck-stackbased-gen.inc"
+  GENERATED  
+  GENERATED    stack += -2;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_DUP:
+  GENERATED    /* (1--11) */
+  GENERATED    CHECK_STACK_DEPTH(1);
+  GENERATED    CHECK_STACK_SPACE(1);
+  GENERATED  
+#              define DST  (&(stack[0]))
+  GENERATED    /* may use stack[0] ... stack[1] */
+  GENERATED  
+  GENERATED  
+#              line 676 "src/vm/jit/verify/icmds.c"
+  GENERATED    /* we dup 1 */
+  GENERATED    CHECK_CAT1(stack[0]);
+  GENERATED  
+  GENERATED    COPY_SLOT(stack[ 0], stack[ 1]);
+  GENERATED  
+#              line 809 "src/vm/jit/verify/typecheck-stackbased-gen.inc"
+  GENERATED  
+  GENERATED    stack += 1;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+#              undef DST
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_DUP_X1:
+  GENERATED    /* (11--111) */
+  GENERATED    CHECK_STACK_DEPTH(2);
+  GENERATED    CHECK_STACK_SPACE(1);
+  GENERATED  
+#              define DST  (&(stack[-1]))
+  GENERATED    /* may use stack[-1] ... stack[1] */
+  GENERATED  
+  GENERATED  
+#              line 683 "src/vm/jit/verify/icmds.c"
+  GENERATED    /* we dup 1 */
+  GENERATED    CHECK_CAT1(stack[0]);
+  GENERATED    /* we skip 1 */
+  GENERATED    CHECK_CAT1(stack[-1]);
+  GENERATED  
+  GENERATED    COPY_SLOT(stack[ 0], stack[ 1]);
+  GENERATED    COPY_SLOT(stack[-1], stack[ 0]);
+  GENERATED    COPY_SLOT(stack[ 1], stack[-1]);
+  GENERATED  
+#              line 837 "src/vm/jit/verify/typecheck-stackbased-gen.inc"
+  GENERATED  
+  GENERATED    stack += 1;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+#              undef DST
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_DUP_X2:
+  GENERATED    /* (111--1111|21--121) */
+  GENERATED    CHECK_STACK_DEPTH(3);
+  GENERATED    CHECK_STACK_SPACE(1);
+  GENERATED    /* may use stack[-2] ... stack[1] */
+  GENERATED  
+  GENERATED  
+#              line 694 "src/vm/jit/verify/icmds.c"
+  GENERATED    /* we dup 1 */
+  GENERATED    CHECK_CAT1(stack[0]);
+  GENERATED    /* we skip either 11 or 2 */
+  GENERATED    if (IS_CAT1(stack[-1]))
+  GENERATED            CHECK_CAT1(stack[-2]);
+  GENERATED  
+  GENERATED    COPY_SLOT(stack[ 0], stack[ 1]);
+  GENERATED    COPY_SLOT(stack[-1], stack[ 0]);
+  GENERATED    COPY_SLOT(stack[-2], stack[-1]);
+  GENERATED    COPY_SLOT(stack[ 1], stack[-2]);
+  GENERATED  
+#              line 865 "src/vm/jit/verify/typecheck-stackbased-gen.inc"
+  GENERATED  
+  GENERATED    stack += 1;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_DUP2:
+  GENERATED    /* (11--1111|2--22) */
+  GENERATED    CHECK_STACK_DEPTH(2);
+  GENERATED    CHECK_STACK_SPACE(2);
+  GENERATED    /* may use stack[-1] ... stack[2] */
+  GENERATED  
+  GENERATED  
+#              line 707 "src/vm/jit/verify/icmds.c"
+  GENERATED    /* we dup either 11 or 2 */
+  GENERATED    if (IS_CAT1(stack[0]))
+  GENERATED            CHECK_CAT1(stack[-1]);
+  GENERATED  
+  GENERATED    COPY_SLOT(stack[ 0], stack[ 2]);
+  GENERATED    COPY_SLOT(stack[-1], stack[ 1]);
+  GENERATED  
+#              line 886 "src/vm/jit/verify/typecheck-stackbased-gen.inc"
+  GENERATED  
+  GENERATED    stack += 2;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_DUP2_X1:
+  GENERATED    /* (111--11111|12--212) */
+  GENERATED    CHECK_STACK_DEPTH(3);
+  GENERATED    CHECK_STACK_SPACE(2);
+  GENERATED    /* may use stack[-2] ... stack[2] */
+  GENERATED  
+  GENERATED  
+#              line 716 "src/vm/jit/verify/icmds.c"
+  GENERATED    /* we dup either 11 or 2 */
+  GENERATED    if (IS_CAT1(stack[0]))
+  GENERATED            CHECK_CAT1(stack[-1]);
+  GENERATED    /* we skip 1 */
+  GENERATED    CHECK_CAT1(stack[-2]);
+  GENERATED  
+  GENERATED    COPY_SLOT(stack[ 0], stack[ 2]);
+  GENERATED    COPY_SLOT(stack[-1], stack[ 1]);
+  GENERATED    COPY_SLOT(stack[-2], stack[ 0]);
+  GENERATED    COPY_SLOT(stack[ 2], stack[-1]);
+  GENERATED    COPY_SLOT(stack[ 1], stack[-2]);
+  GENERATED  
+#              line 912 "src/vm/jit/verify/typecheck-stackbased-gen.inc"
+  GENERATED  
+  GENERATED    stack += 2;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_DUP2_X2:
+  GENERATED    /* (1111--111111|112--2112|22--222|211--11211) */
+  GENERATED    CHECK_STACK_DEPTH(4);
+  GENERATED    CHECK_STACK_SPACE(2);
+  GENERATED    /* may use stack[-3] ... stack[2] */
+  GENERATED  
+  GENERATED  
+#              line 730 "src/vm/jit/verify/icmds.c"
+  GENERATED    /* we dup either 11 or 2 */
+  GENERATED    if (IS_CAT1(stack[0]))
+  GENERATED            CHECK_CAT1(stack[-1]);
+  GENERATED    /* we skip either 11 or 2 */
+  GENERATED    if (IS_CAT1(stack[-2]))
+  GENERATED            CHECK_CAT1(stack[-3]);
+  GENERATED  
+  GENERATED    COPY_SLOT(stack[ 0], stack[ 2]);
+  GENERATED    COPY_SLOT(stack[-1], stack[ 1]);
+  GENERATED    COPY_SLOT(stack[-2], stack[ 0]);
+  GENERATED    COPY_SLOT(stack[-3], stack[-1]);
+  GENERATED    COPY_SLOT(stack[ 2], stack[-2]);
+  GENERATED    COPY_SLOT(stack[ 1], stack[-3]);
+  GENERATED  
+#              line 940 "src/vm/jit/verify/typecheck-stackbased-gen.inc"
+  GENERATED  
+  GENERATED    stack += 2;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_SWAP:
+  GENERATED    /* (11--11) */
+  GENERATED    CHECK_STACK_DEPTH(2);
+  GENERATED  
+#              define DST  (&(stack[-1]))
+  GENERATED    /* may use stack[-1] ... stack[0] */
+  GENERATED  
+  GENERATED  
+#              line 667 "src/vm/jit/verify/icmds.c"
+  GENERATED    CHECK_CAT1(stack[0]);
+  GENERATED    CHECK_CAT1(stack[-1]);
+  GENERATED  
+  GENERATED    COPY_SLOT(stack[ 0], temp     );
+  GENERATED    COPY_SLOT(stack[-1], stack[ 0]);
+  GENERATED    COPY_SLOT(temp     , stack[-1]);
+  GENERATED  
+#              line 962 "src/vm/jit/verify/typecheck-stackbased-gen.inc"
+  GENERATED  
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+#              undef DST
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_IADD:
+  GENERATED  case ICMD_ISUB:
+  GENERATED  case ICMD_IMUL:
+  GENERATED  case ICMD_ISHL:
+  GENERATED  case ICMD_ISHR:
+  GENERATED  case ICMD_IUSHR:
+  GENERATED  case ICMD_IAND:
+  GENERATED  case ICMD_IOR:
+  GENERATED  case ICMD_IXOR:
+  GENERATED    /* (II--I) */
+  GENERATED    CHECK_STACK_DEPTH(2);
+  GENERATED    CHECK_STACK_TYPE(stack[-1], TYPE_INT);
+  GENERATED    CHECK_STACK_TYPE(stack[0], TYPE_INT);
+  GENERATED    stack += -1;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_LADD:
+  GENERATED  case ICMD_LSUB:
+  GENERATED  case ICMD_LMUL:
+  GENERATED  case ICMD_LAND:
+  GENERATED  case ICMD_LOR:
+  GENERATED  case ICMD_LXOR:
+  GENERATED    /* (LL--L) */
+  GENERATED    CHECK_STACK_DEPTH(4);
+  GENERATED    CHECK_STACK_TYPE(stack[-3], TYPE_LNG);
+  GENERATED    CHECK_STACK_TYPE(stack[-1], TYPE_LNG);
+  GENERATED    stack += -2;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_FADD:
+  GENERATED  case ICMD_FSUB:
+  GENERATED  case ICMD_FMUL:
+  GENERATED  case ICMD_FDIV:
+  GENERATED  case ICMD_FREM:
+  GENERATED    /* (FF--F) */
+  GENERATED    CHECK_STACK_DEPTH(2);
+  GENERATED    CHECK_STACK_TYPE(stack[-1], TYPE_FLT);
+  GENERATED    CHECK_STACK_TYPE(stack[0], TYPE_FLT);
+  GENERATED    stack += -1;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_DADD:
+  GENERATED  case ICMD_DSUB:
+  GENERATED  case ICMD_DMUL:
+  GENERATED  case ICMD_DDIV:
+  GENERATED  case ICMD_DREM:
+  GENERATED    /* (DD--D) */
+  GENERATED    CHECK_STACK_DEPTH(4);
+  GENERATED    CHECK_STACK_TYPE(stack[-3], TYPE_DBL);
+  GENERATED    CHECK_STACK_TYPE(stack[-1], TYPE_DBL);
+  GENERATED    stack += -2;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_IDIV:
+  GENERATED  case ICMD_IREM:
+  GENERATED    /* (II--I) */
+  GENERATED    maythrow = true;
+  GENERATED    CHECK_STACK_DEPTH(2);
+  GENERATED    CHECK_STACK_TYPE(stack[-1], TYPE_INT);
+  GENERATED    CHECK_STACK_TYPE(stack[0], TYPE_INT);
+  GENERATED    stack += -1;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_LDIV:
+  GENERATED  case ICMD_LREM:
+  GENERATED    /* (LL--L) */
+  GENERATED    maythrow = true;
+  GENERATED    CHECK_STACK_DEPTH(4);
+  GENERATED    CHECK_STACK_TYPE(stack[-3], TYPE_LNG);
+  GENERATED    CHECK_STACK_TYPE(stack[-1], TYPE_LNG);
+  GENERATED    stack += -2;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_INEG:
+  GENERATED  case ICMD_INT2BYTE:
+  GENERATED  case ICMD_INT2CHAR:
+  GENERATED  case ICMD_INT2SHORT:
+  GENERATED    /* (I--I) */
+  GENERATED    CHECK_STACK_DEPTH(1);
+  GENERATED    CHECK_STACK_TYPE(stack[0], TYPE_INT);
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_LNEG:
+  GENERATED    /* (L--L) */
+  GENERATED    CHECK_STACK_DEPTH(2);
+  GENERATED    CHECK_STACK_TYPE(stack[-1], TYPE_LNG);
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_FNEG:
+  GENERATED    /* (F--F) */
+  GENERATED    CHECK_STACK_DEPTH(1);
+  GENERATED    CHECK_STACK_TYPE(stack[0], TYPE_FLT);
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_DNEG:
+  GENERATED    /* (D--D) */
+  GENERATED    CHECK_STACK_DEPTH(2);
+  GENERATED    CHECK_STACK_TYPE(stack[-1], TYPE_DBL);
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_LSHL:
+  GENERATED  case ICMD_LSHR:
+  GENERATED  case ICMD_LUSHR:
+  GENERATED    /* (LI--L) */
+  GENERATED    CHECK_STACK_DEPTH(3);
+  GENERATED    CHECK_STACK_TYPE(stack[-2], TYPE_LNG);
+  GENERATED    CHECK_STACK_TYPE(stack[0], TYPE_INT);
+  GENERATED    stack += -1;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_IINC:
+  GENERATED    /* (--) */
+  GENERATED    CHECK_LOCAL_TYPE(IPTR->s1.varindex, TYPE_INT);
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_I2L:
+  GENERATED    /* (I--L) */
+  GENERATED    CHECK_STACK_DEPTH(1);
+  GENERATED    CHECK_STACK_SPACE(1);
+  GENERATED    CHECK_STACK_TYPE(stack[0], TYPE_INT);
+  GENERATED    stack += 1;
+  GENERATED    stack[0].type = TYPE_VOID;
+  GENERATED    stack[-1].type = TYPE_LNG;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_I2F:
+  GENERATED    /* (I--F) */
+  GENERATED    CHECK_STACK_DEPTH(1);
+  GENERATED    CHECK_STACK_TYPE(stack[0], TYPE_INT);
+  GENERATED    stack[0].type = TYPE_FLT;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_I2D:
+  GENERATED    /* (I--D) */
+  GENERATED    CHECK_STACK_DEPTH(1);
+  GENERATED    CHECK_STACK_SPACE(1);
+  GENERATED    CHECK_STACK_TYPE(stack[0], TYPE_INT);
+  GENERATED    stack += 1;
+  GENERATED    stack[0].type = TYPE_VOID;
+  GENERATED    stack[-1].type = TYPE_DBL;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_L2I:
+  GENERATED    /* (L--I) */
+  GENERATED    CHECK_STACK_DEPTH(2);
+  GENERATED    CHECK_STACK_TYPE(stack[-1], TYPE_LNG);
+  GENERATED    stack += -1;
+  GENERATED    stack[0].type = TYPE_INT;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_L2F:
+  GENERATED    /* (L--F) */
+  GENERATED    CHECK_STACK_DEPTH(2);
+  GENERATED    CHECK_STACK_TYPE(stack[-1], TYPE_LNG);
+  GENERATED    stack += -1;
+  GENERATED    stack[0].type = TYPE_FLT;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_L2D:
+  GENERATED    /* (L--D) */
+  GENERATED    CHECK_STACK_DEPTH(2);
+  GENERATED    CHECK_STACK_TYPE(stack[-1], TYPE_LNG);
+  GENERATED    stack[0].type = TYPE_VOID;
+  GENERATED    stack[-1].type = TYPE_DBL;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_F2I:
+  GENERATED    /* (F--I) */
+  GENERATED    CHECK_STACK_DEPTH(1);
+  GENERATED    CHECK_STACK_TYPE(stack[0], TYPE_FLT);
+  GENERATED    stack[0].type = TYPE_INT;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_F2L:
+  GENERATED    /* (F--L) */
+  GENERATED    CHECK_STACK_DEPTH(1);
+  GENERATED    CHECK_STACK_SPACE(1);
+  GENERATED    CHECK_STACK_TYPE(stack[0], TYPE_FLT);
+  GENERATED    stack += 1;
+  GENERATED    stack[0].type = TYPE_VOID;
+  GENERATED    stack[-1].type = TYPE_LNG;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_F2D:
+  GENERATED    /* (F--D) */
+  GENERATED    CHECK_STACK_DEPTH(1);
+  GENERATED    CHECK_STACK_SPACE(1);
+  GENERATED    CHECK_STACK_TYPE(stack[0], TYPE_FLT);
+  GENERATED    stack += 1;
+  GENERATED    stack[0].type = TYPE_VOID;
+  GENERATED    stack[-1].type = TYPE_DBL;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_D2I:
+  GENERATED    /* (D--I) */
+  GENERATED    CHECK_STACK_DEPTH(2);
+  GENERATED    CHECK_STACK_TYPE(stack[-1], TYPE_DBL);
+  GENERATED    stack += -1;
+  GENERATED    stack[0].type = TYPE_INT;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_D2L:
+  GENERATED    /* (D--L) */
+  GENERATED    CHECK_STACK_DEPTH(2);
+  GENERATED    CHECK_STACK_TYPE(stack[-1], TYPE_DBL);
+  GENERATED    stack[0].type = TYPE_VOID;
+  GENERATED    stack[-1].type = TYPE_LNG;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_D2F:
+  GENERATED    /* (D--F) */
+  GENERATED    CHECK_STACK_DEPTH(2);
+  GENERATED    CHECK_STACK_TYPE(stack[-1], TYPE_DBL);
+  GENERATED    stack += -1;
+  GENERATED    stack[0].type = TYPE_FLT;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_LCMP:
+  GENERATED    /* (LL--I) */
+  GENERATED    CHECK_STACK_DEPTH(4);
+  GENERATED    CHECK_STACK_TYPE(stack[-3], TYPE_LNG);
+  GENERATED    CHECK_STACK_TYPE(stack[-1], TYPE_LNG);
+  GENERATED    stack += -3;
+  GENERATED    stack[0].type = TYPE_INT;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_FCMPL:
+  GENERATED  case ICMD_FCMPG:
+  GENERATED    /* (FF--I) */
+  GENERATED    CHECK_STACK_DEPTH(2);
+  GENERATED    CHECK_STACK_TYPE(stack[-1], TYPE_FLT);
+  GENERATED    CHECK_STACK_TYPE(stack[0], TYPE_FLT);
+  GENERATED    stack += -1;
+  GENERATED    stack[0].type = TYPE_INT;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_DCMPL:
+  GENERATED  case ICMD_DCMPG:
+  GENERATED    /* (DD--I) */
+  GENERATED    CHECK_STACK_DEPTH(4);
+  GENERATED    CHECK_STACK_TYPE(stack[-3], TYPE_DBL);
+  GENERATED    CHECK_STACK_TYPE(stack[-1], TYPE_DBL);
+  GENERATED    stack += -3;
+  GENERATED    stack[0].type = TYPE_INT;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_IFEQ:
+  GENERATED  case ICMD_IFNE:
+  GENERATED  case ICMD_IFLT:
+  GENERATED  case ICMD_IFGE:
+  GENERATED  case ICMD_IFGT:
+  GENERATED  case ICMD_IFLE:
+  GENERATED    /* (I--) */
+  GENERATED    CHECK_STACK_DEPTH(1);
+  GENERATED    CHECK_STACK_TYPE(stack[0], TYPE_INT);
+  GENERATED    stack += -1;
+  GENERATED    /* CAUTION: stack pointer changed before custom code! */
+  GENERATED  
+#              define OP1 (&(stack[1]))
+  GENERATED    /* may use stack[1] ... stack[1] */
+  GENERATED  
+  GENERATED  
+#              line 347 "src/vm/jit/verify/icmds.c"
+  GENERATED    /* {RESULTNOW} */
+  GENERATED    TYPECHECK_COUNT(stat_ins_branch);
+  GENERATED  
+  GENERATED    /* propagate stack and variables to the target block */
+  GENERATED    REACH(IPTR->dst);
+  GENERATED  
+#              line 1266 "src/vm/jit/verify/typecheck-stackbased-gen.inc"
+  GENERATED  
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+#              undef OP1
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_IF_ICMPEQ:
+  GENERATED  case ICMD_IF_ICMPNE:
+  GENERATED  case ICMD_IF_ICMPLT:
+  GENERATED  case ICMD_IF_ICMPGE:
+  GENERATED  case ICMD_IF_ICMPGT:
+  GENERATED  case ICMD_IF_ICMPLE:
+  GENERATED    /* (II--) */
+  GENERATED    CHECK_STACK_DEPTH(2);
+  GENERATED    CHECK_STACK_TYPE(stack[-1], TYPE_INT);
+  GENERATED    CHECK_STACK_TYPE(stack[0], TYPE_INT);
+  GENERATED    stack += -2;
+  GENERATED    /* CAUTION: stack pointer changed before custom code! */
+  GENERATED  
+#              define OP1 (&(stack[1]))
+  GENERATED  
+#              define OP2 (&(stack[2]))
+  GENERATED    /* may use stack[1] ... stack[2] */
+  GENERATED  
+  GENERATED  
+#              line 353 "src/vm/jit/verify/icmds.c"
+  GENERATED    /* {RESULTNOW} */
+  GENERATED    TYPECHECK_COUNT(stat_ins_branch);
+  GENERATED  
+  GENERATED    /* propagate stack and variables to the target block */
+  GENERATED    REACH(IPTR->dst);
+  GENERATED  
+#              line 1300 "src/vm/jit/verify/typecheck-stackbased-gen.inc"
+  GENERATED  
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+#              undef OP1
+  GENERATED  
+#              undef OP2
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_IF_ACMPEQ:
+  GENERATED  case ICMD_IF_ACMPNE:
+  GENERATED    /* (AA--) */
+  GENERATED    CHECK_STACK_DEPTH(2);
+  GENERATED    CHECK_STACK_TYPE(stack[-1], TYPE_ADR);
+  GENERATED    CHECK_STACK_TYPE(stack[0], TYPE_ADR);
+  GENERATED    stack += -2;
+  GENERATED    /* CAUTION: stack pointer changed before custom code! */
+  GENERATED  
+#              define OP1 (&(stack[1]))
+  GENERATED  
+#              define OP2 (&(stack[2]))
+  GENERATED    /* may use stack[1] ... stack[2] */
+  GENERATED  
+  GENERATED  
+#              line 359 "src/vm/jit/verify/icmds.c"
+  GENERATED    /* {RESULTNOW} */
+  GENERATED    TYPECHECK_COUNT(stat_ins_branch);
+  GENERATED  
+  GENERATED    /* propagate stack and variables to the target block */
+  GENERATED    REACH(IPTR->dst);
+  GENERATED  
+#              line 1332 "src/vm/jit/verify/typecheck-stackbased-gen.inc"
+  GENERATED  
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+#              undef OP1
+  GENERATED  
+#              undef OP2
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_GOTO:
+  GENERATED    /* (--) */
+  GENERATED    superblockend = true;
+  GENERATED  
+  GENERATED  
+#              line 344 "src/vm/jit/verify/icmds.c"
+  GENERATED    /* {RESULTNOW} */
+  GENERATED    TYPECHECK_COUNT(stat_ins_branch);
+  GENERATED  
+  GENERATED    /* propagate stack and variables to the target block */
+  GENERATED    REACH(IPTR->dst);
+  GENERATED  
+#              line 1354 "src/vm/jit/verify/typecheck-stackbased-gen.inc"
+  GENERATED  
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_JSR:
+  GENERATED    /* (--A) */
+  GENERATED    superblockend = true;
+  GENERATED    CHECK_STACK_SPACE(1);
+  GENERATED    stack += 1;
+  GENERATED    stack[0].type = TYPE_ADR;
+  GENERATED    /* CAUTION: stack types changed before custom code! */
+  GENERATED    /* CAUTION: stack pointer changed before custom code! */
+  GENERATED  
+#              define DST  (&(stack[0]))
+  GENERATED    /* may use stack[0] ... stack[0] */
+  GENERATED  
+  GENERATED  
+#              line 540 "src/vm/jit/verify/icmds.c"
+  GENERATED    /* {RESULTNOW} */
+  GENERATED    tbptr = BLOCK_OF(IPTR->sx.s23.s3.jsrtarget.insindex);
+  GENERATED  
+  GENERATED    TYPEINFO_INIT_RETURNADDRESS(stack[0].typeinfo, tbptr);
+  GENERATED    REACH_BLOCK(tbptr);
+  GENERATED  
+  GENERATED    stack = typecheck_stackbased_jsr(STATE, stack, stackfloor);
+  GENERATED    if (stack == NULL)
+  GENERATED            EXCEPTION;
+  GENERATED  
+#              line 1383 "src/vm/jit/verify/typecheck-stackbased-gen.inc"
+  GENERATED  
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+#              undef DST
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_RET:
+  GENERATED    /* (--) */
+  GENERATED    superblockend = true;
+  GENERATED  
+  GENERATED  
+#              line 559 "src/vm/jit/verify/icmds.c"
+  GENERATED    /* {RESULTNOW} */
+  GENERATED    CHECK_LOCAL_TYPE(IPTR->s1.varindex, TYPE_ADR);
+  GENERATED    if (!TYPEINFO_IS_PRIMITIVE(STATE->locals[IPTR->s1.varindex].typeinfo))
+  GENERATED            VERIFY_ERROR("illegal instruction: RET using non-returnAddress variable");
+  GENERATED  
+  GENERATED    if (!typecheck_stackbased_ret(STATE, stack, stackfloor))
+  GENERATED            EXCEPTION;
+  GENERATED  
+#              line 1405 "src/vm/jit/verify/typecheck-stackbased-gen.inc"
+  GENERATED  
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_TABLESWITCH:
+  GENERATED    /* (I--) */
+  GENERATED    superblockend = true;
+  GENERATED    CHECK_STACK_DEPTH(1);
+  GENERATED    CHECK_STACK_TYPE(stack[0], TYPE_INT);
+  GENERATED    stack += -1;
+  GENERATED    /* CAUTION: stack pointer changed before custom code! */
+  GENERATED  
+#              define OP1 (&(stack[1]))
+  GENERATED    /* may use stack[1] ... stack[1] */
+  GENERATED  
+  GENERATED  
+#              line 411 "src/vm/jit/verify/icmds.c"
+  GENERATED    /* {RESULTNOW} */
+  GENERATED    TYPECHECK_COUNT(stat_ins_switch);
+  GENERATED  
+  GENERATED    table = IPTR->dst.table;
+  GENERATED    i = IPTR->sx.s23.s3.tablehigh
+  GENERATED    - IPTR->sx.s23.s2.tablelow + 1 + 1; /* plus default */
+  GENERATED  
+  GENERATED    while (--i >= 0) {
+  GENERATED            REACH(*table);
+  GENERATED            table++;
+  GENERATED    }
+  GENERATED  
+  GENERATED    LOG("switch done");
+  GENERATED  
+#              line 1437 "src/vm/jit/verify/typecheck-stackbased-gen.inc"
+  GENERATED  
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+#              undef OP1
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_LOOKUPSWITCH:
+  GENERATED    /* (I--) */
+  GENERATED    superblockend = true;
+  GENERATED    CHECK_STACK_DEPTH(1);
+  GENERATED    CHECK_STACK_TYPE(stack[0], TYPE_INT);
+  GENERATED    stack += -1;
+  GENERATED    /* CAUTION: stack pointer changed before custom code! */
+  GENERATED  
+#              define OP1 (&(stack[1]))
+  GENERATED    /* may use stack[1] ... stack[1] */
+  GENERATED  
+  GENERATED  
+#              line 427 "src/vm/jit/verify/icmds.c"
+  GENERATED    /* {RESULTNOW} */
+  GENERATED    TYPECHECK_COUNT(stat_ins_switch);
+  GENERATED  
+  GENERATED    lookup = IPTR->dst.lookup;
+  GENERATED    i = IPTR->sx.s23.s2.lookupcount;
+  GENERATED    REACH(IPTR->sx.s23.s3.lookupdefault);
+  GENERATED  
+  GENERATED    while (--i >= 0) {
+  GENERATED            REACH(lookup->target);
+  GENERATED            lookup++;
+  GENERATED    }
+  GENERATED  
+  GENERATED    LOG("switch done");
+  GENERATED  
+#              line 1472 "src/vm/jit/verify/typecheck-stackbased-gen.inc"
+  GENERATED  
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+#              undef OP1
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_IRETURN:
+  GENERATED    /* (I--) */
+  GENERATED    superblockend = true;
+  GENERATED    CHECK_STACK_DEPTH(1);
+  GENERATED    CHECK_STACK_TYPE(stack[0], TYPE_INT);
+  GENERATED  
+#              define OP1 (&(stack[0]))
+  GENERATED    /* may use stack[0] ... stack[0] */
+  GENERATED  
+  GENERATED  
+#              line 493 "src/vm/jit/verify/icmds.c"
+  GENERATED    if (STATE->returntype.type != TYPE_INT)
+  GENERATED            VERIFY_ERROR("Return type mismatch");
+  GENERATED  
+#              line 1494 "src/vm/jit/verify/typecheck-stackbased-gen.inc"
+  GENERATED  
+  GENERATED    goto return_tail;
+  GENERATED  
+  GENERATED  
+#              undef OP1
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_LRETURN:
+  GENERATED    /* (L--) */
+  GENERATED    superblockend = true;
+  GENERATED    CHECK_STACK_DEPTH(2);
+  GENERATED    CHECK_STACK_TYPE(stack[-1], TYPE_LNG);
+  GENERATED  
+#              define OP1 (&(stack[-1]))
+  GENERATED    /* may use stack[-1] ... stack[0] */
+  GENERATED  
+  GENERATED  
+#              line 498 "src/vm/jit/verify/icmds.c"
+  GENERATED    if (STATE->returntype.type != TYPE_LNG)
+  GENERATED            VERIFY_ERROR("Return type mismatch");
+  GENERATED  
+#              line 1516 "src/vm/jit/verify/typecheck-stackbased-gen.inc"
+  GENERATED  
+  GENERATED    goto return_tail;
+  GENERATED  
+  GENERATED  
+#              undef OP1
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_FRETURN:
+  GENERATED    /* (F--) */
+  GENERATED    superblockend = true;
+  GENERATED    CHECK_STACK_DEPTH(1);
+  GENERATED    CHECK_STACK_TYPE(stack[0], TYPE_FLT);
+  GENERATED  
+#              define OP1 (&(stack[0]))
+  GENERATED    /* may use stack[0] ... stack[0] */
+  GENERATED  
+  GENERATED  
+#              line 503 "src/vm/jit/verify/icmds.c"
+  GENERATED    if (STATE->returntype.type != TYPE_FLT)
+  GENERATED            VERIFY_ERROR("Return type mismatch");
+  GENERATED  
+#              line 1538 "src/vm/jit/verify/typecheck-stackbased-gen.inc"
+  GENERATED  
+  GENERATED    goto return_tail;
+  GENERATED  
+  GENERATED  
+#              undef OP1
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_DRETURN:
+  GENERATED    /* (D--) */
+  GENERATED    superblockend = true;
+  GENERATED    CHECK_STACK_DEPTH(2);
+  GENERATED    CHECK_STACK_TYPE(stack[-1], TYPE_DBL);
+  GENERATED  
+#              define OP1 (&(stack[-1]))
+  GENERATED    /* may use stack[-1] ... stack[0] */
+  GENERATED  
+  GENERATED  
+#              line 508 "src/vm/jit/verify/icmds.c"
+  GENERATED    if (STATE->returntype.type != TYPE_DBL)
+  GENERATED            VERIFY_ERROR("Return type mismatch");
+  GENERATED  
+#              line 1560 "src/vm/jit/verify/typecheck-stackbased-gen.inc"
+  GENERATED  
+  GENERATED    goto return_tail;
+  GENERATED  
+  GENERATED  
+#              undef OP1
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_ARETURN:
+  GENERATED    /* (A--) */
+  GENERATED    maythrow = true;
+  GENERATED    superblockend = true;
+  GENERATED    CHECK_STACK_DEPTH(1);
+  GENERATED    CHECK_STACK_TYPE(stack[0], TYPE_ADR);
+  GENERATED  
+#              define OP1 (&(stack[0]))
+  GENERATED    /* may use stack[0] ... stack[0] */
+  GENERATED  
+  GENERATED  
+#              line 468 "src/vm/jit/verify/icmds.c"
+  GENERATED    TYPECHECK_COUNT(stat_ins_areturn);
+  GENERATED    if (!TYPEINFO_IS_REFERENCE(OP1->typeinfo))
+  GENERATED            VERIFY_ERROR("illegal instruction: ARETURN on non-reference");
+  GENERATED  
+  GENERATED    if (STATE->returntype.type != TYPE_ADR
+  GENERATED                    || (r = typeinfo_is_assignable(&OP1->typeinfo,&(STATE->returntype.typeinfo)))
+  GENERATED                    == typecheck_FALSE)
+  GENERATED            VERIFY_ERROR("Return type mismatch");
+  GENERATED    if (r == typecheck_FAIL)
+  GENERATED            EXCEPTION;
+  GENERATED    if (r == typecheck_MAYBE) {
+  GENERATED            /* the check has to be postponed, we need a patcher */
+  GENERATED            TYPECHECK_COUNT(stat_ins_areturn_unresolved);
+  GENERATED            IPTR->sx.s23.s2.uc = create_unresolved_class(
+  GENERATED                            METHOD,
+  GENERATED                            METHOD->parseddesc->returntype.classref,
+  GENERATED                            &OP1->typeinfo);
+  GENERATED            IPTR->flags.bits |= INS_FLAG_UNRESOLVED;
+  GENERATED    }
+  GENERATED  
+#              line 1600 "src/vm/jit/verify/typecheck-stackbased-gen.inc"
+  GENERATED  
+  GENERATED    goto return_tail;
+  GENERATED  
+  GENERATED  
+#              undef OP1
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_RETURN:
+  GENERATED    /* (--) */
+  GENERATED    superblockend = true;
+  GENERATED  
+  GENERATED  
+#              line 513 "src/vm/jit/verify/icmds.c"
+  GENERATED    if (STATE->returntype.type != TYPE_VOID)
+  GENERATED            VERIFY_ERROR("Return type mismatch");
+  GENERATED  
+  GENERATED  return_tail:
+  GENERATED    TYPECHECK_COUNT(stat_ins_primitive_return);
+  GENERATED  
+  GENERATED    if (STATE->initmethod && METHOD->class != class_java_lang_Object) {
+  GENERATED            /* Check if the 'this' instance has been initialized. */
+  GENERATED            LOG("Checking <init> marker");
+  GENERATED  
+#            if defined(TYPECHECK_VARIABLESBASED)
+  GENERATED            if (!typevector_checktype(jd->var,STATE->numlocals-1,TYPE_INT))
+  GENERATED  
+#            else
+  GENERATED            if (STATE->locals[STATE->numlocals-1].type != TYPE_INT)
+  GENERATED  
+#            endif
+  GENERATED                    VERIFY_ERROR("<init> method does not initialize 'this'");
+  GENERATED    }
+  GENERATED  
+#              line 1634 "src/vm/jit/verify/typecheck-stackbased-gen.inc"
+  GENERATED  
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_GETSTATIC:
+  GENERATED    /* (--1|--2) */
+  GENERATED    maythrow = true;
+  GENERATED    /* variable number of outslots! */
+  GENERATED  
+  GENERATED  
+#              line 119 "src/vm/jit/verify/icmds.c"
+  GENERATED    stack = typecheck_stackbased_verify_fieldaccess(STATE, NULL, NULL, stack);
+  GENERATED    if (stack == NULL)
+  GENERATED            EXCEPTION;
+  GENERATED  
+#              line 1650 "src/vm/jit/verify/typecheck-stackbased-gen.inc"
+  GENERATED  
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_PUTSTATIC:
+  GENERATED    /* (1--|2--) */
+  GENERATED    maythrow = true;
+  GENERATED    /* variable number of inslots! */
+  GENERATED  
+  GENERATED  
+#              line 100 "src/vm/jit/verify/icmds.c"
+  GENERATED    CHECK_STACK_DEPTH(1);
+  GENERATED    if (IS_CAT1(stack[0]))
+  GENERATED            stack -= 1;
+  GENERATED    else {
+  GENERATED            stack -= 2;
+  GENERATED    }
+  GENERATED    stack = typecheck_stackbased_verify_fieldaccess(STATE, NULL, stack+1, stack);
+  GENERATED    if (stack == NULL)
+  GENERATED            EXCEPTION;
+  GENERATED  
+#              line 1672 "src/vm/jit/verify/typecheck-stackbased-gen.inc"
+  GENERATED  
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_GETFIELD:
+  GENERATED    /* (A--1|A--2) */
+  GENERATED    maythrow = true;
+  GENERATED    CHECK_STACK_DEPTH(1);
+  GENERATED    /* variable number of outslots! */
+  GENERATED  
+  GENERATED  
+#              line 112 "src/vm/jit/verify/icmds.c"
+  GENERATED    stack -= 1;
+  GENERATED    stack = typecheck_stackbased_verify_fieldaccess(STATE, stack+1, NULL, stack);
+  GENERATED    if (stack == NULL)
+  GENERATED            EXCEPTION;
+  GENERATED  
+#              line 1690 "src/vm/jit/verify/typecheck-stackbased-gen.inc"
+  GENERATED  
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_PUTFIELD:
+  GENERATED    /* (A1--|A2--) */
+  GENERATED    maythrow = true;
+  GENERATED    /* variable number of inslots! */
+  GENERATED  
+  GENERATED  
+#              line 88 "src/vm/jit/verify/icmds.c"
+  GENERATED    CHECK_STACK_DEPTH(2);
+  GENERATED    if (IS_CAT1(stack[0]))
+  GENERATED            stack -= 2;
+  GENERATED    else {
+  GENERATED            stack -= 3;
+  GENERATED    }
+  GENERATED    stack = typecheck_stackbased_verify_fieldaccess(STATE, stack+1, stack+2, stack);
+  GENERATED    if (stack == NULL)
+  GENERATED            EXCEPTION;
+  GENERATED  
+#              line 1712 "src/vm/jit/verify/typecheck-stackbased-gen.inc"
+  GENERATED  
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_INVOKEVIRTUAL:
+  GENERATED  case ICMD_INVOKESPECIAL:
+  GENERATED  case ICMD_INVOKESTATIC:
+  GENERATED  case ICMD_INVOKEINTERFACE:
+  GENERATED    /* (.--1|.--2|.--) */
+  GENERATED    maythrow = true;
+  GENERATED    /* variable number of inslots! */
+  GENERATED    /* variable number of outslots! */
+  GENERATED  
+  GENERATED  
+#              line 582 "src/vm/jit/verify/icmds.c"
+  GENERATED    TYPECHECK_COUNT(stat_ins_invoke);
+  GENERATED  
+  GENERATED    INSTRUCTION_GET_METHODDESC(IPTR, md);
+  GENERATED    CHECK_STACK_DEPTH(md->paramslots);
+  GENERATED  
+  GENERATED    if (!typecheck_stackbased_verify_invocation(STATE, stack, stackfloor))
+  GENERATED            EXCEPTION;
+  GENERATED  
+  GENERATED    stack -= md->paramslots;
+  GENERATED  
+  GENERATED    if (md->returntype.type != TYPE_VOID) {
+  GENERATED            if (IS_2_WORD_TYPE(md->returntype.type)) {
+  GENERATED                    CHECK_STACK_SPACE(2);
+  GENERATED                    stack += 2;
+  GENERATED                    stack[0].type = TYPE_VOID;
+  GENERATED                    stack[-1].type = md->returntype.type;
+  GENERATED            }
+  GENERATED            else {
+  GENERATED                    CHECK_STACK_SPACE(1);
+  GENERATED                    stack += 1;
+  GENERATED                    stack[0].type = md->returntype.type;
+  GENERATED            }
+  GENERATED    }
+  GENERATED    TYPECHECK_COUNTIF(INSTRUCTION_IS_UNRESOLVED(IPTR), stat_ins_invoke_unresolved);
+  GENERATED  
+#              line 1753 "src/vm/jit/verify/typecheck-stackbased-gen.inc"
+  GENERATED  
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_ARRAYLENGTH:
+  GENERATED    /* (A--I) */
+  GENERATED    maythrow = true;
+  GENERATED    CHECK_STACK_DEPTH(1);
+  GENERATED    CHECK_STACK_TYPE(stack[0], TYPE_ADR);
+  GENERATED  
+#              define OP1 (&(stack[0]))
+  GENERATED  
+#              define DST  (&(stack[0]))
+  GENERATED    /* may use stack[0] ... stack[0] */
+  GENERATED  
+  GENERATED  
+#              line 192 "src/vm/jit/verify/icmds.c"
+  GENERATED    if (!TYPEINFO_MAYBE_ARRAY(OP1->typeinfo)
+  GENERATED                    && OP1->typeinfo.typeclass.cls != pseudo_class_Arraystub)
+  GENERATED            VERIFY_ERROR("illegal instruction: ARRAYLENGTH on non-array");
+  GENERATED  
+#              line 1775 "src/vm/jit/verify/typecheck-stackbased-gen.inc"
+  GENERATED  
+  GENERATED    stack[0].type = TYPE_INT;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+#              undef OP1
+  GENERATED  
+#              undef DST
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_ATHROW:
+  GENERATED    /* (A--) */
+  GENERATED    maythrow = true;
+  GENERATED    superblockend = true;
+  GENERATED    CHECK_STACK_DEPTH(1);
+  GENERATED    CHECK_STACK_TYPE(stack[0], TYPE_ADR);
+  GENERATED  
+#              define OP1 (&(stack[0]))
+  GENERATED    /* may use stack[0] ... stack[0] */
+  GENERATED  
+  GENERATED  
+#              line 447 "src/vm/jit/verify/icmds.c"
+  GENERATED    TYPECHECK_COUNT(stat_ins_athrow);
+  GENERATED    r = typeinfo_is_assignable_to_class(&OP1->typeinfo,
+  GENERATED                    CLASSREF_OR_CLASSINFO(class_java_lang_Throwable));
+  GENERATED    if (r == typecheck_FALSE)
+  GENERATED            VERIFY_ERROR("illegal instruction: ATHROW on non-Throwable");
+  GENERATED    if (r == typecheck_FAIL)
+  GENERATED            EXCEPTION;
+  GENERATED    if (r == typecheck_MAYBE) {
+  GENERATED            /* the check has to be postponed. we need a patcher */
+  GENERATED            TYPECHECK_COUNT(stat_ins_athrow_unresolved);
+  GENERATED            IPTR->sx.s23.s2.uc = create_unresolved_class(
+  GENERATED                            METHOD,
+  GENERATED                            /* XXX make this more efficient, use class_java_lang_Throwable
+  GENERATED                             * directly */
+  GENERATED                            class_get_classref(METHOD->class,utf_java_lang_Throwable),
+  GENERATED                            &OP1->typeinfo);
+  GENERATED            IPTR->flags.bits |= INS_FLAG_UNRESOLVED;
+  GENERATED    }
+  GENERATED  
+#              line 1817 "src/vm/jit/verify/typecheck-stackbased-gen.inc"
+  GENERATED  
+  GENERATED    stack += -1;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+#              undef OP1
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_CHECKCAST:
+  GENERATED    /* (A--A) */
+  GENERATED    maythrow = true;
+  GENERATED    CHECK_STACK_DEPTH(1);
+  GENERATED    CHECK_STACK_TYPE(stack[0], TYPE_ADR);
+  GENERATED  
+#              define OP1 (&(stack[0]))
+  GENERATED  
+#              define DST  (&(stack[0]))
+  GENERATED    /* may use stack[0] ... stack[0] */
+  GENERATED  
+  GENERATED  
+#              line 326 "src/vm/jit/verify/icmds.c"
+  GENERATED    /* returnAddress is not allowed */
+  GENERATED    if (!TYPEINFO_IS_REFERENCE(OP1->typeinfo))
+  GENERATED            VERIFY_ERROR("Illegal instruction: CHECKCAST on non-reference");
+  GENERATED  
+  GENERATED    if (!typeinfo_init_class(&(DST->typeinfo),IPTR->sx.s23.s3.c))
+  GENERATED            EXCEPTION;
+  GENERATED  
+#              line 1846 "src/vm/jit/verify/typecheck-stackbased-gen.inc"
+  GENERATED  
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+#              undef OP1
+  GENERATED  
+#              undef DST
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_INSTANCEOF:
+  GENERATED    /* (A--I) */
+  GENERATED    maythrow = true;
+  GENERATED    CHECK_STACK_DEPTH(1);
+  GENERATED    CHECK_STACK_TYPE(stack[0], TYPE_ADR);
+  GENERATED  
+#              define OP1 (&(stack[0]))
+  GENERATED  
+#              define DST  (&(stack[0]))
+  GENERATED    /* may use stack[0] ... stack[0] */
+  GENERATED  
+  GENERATED  
+#              line 335 "src/vm/jit/verify/icmds.c"
+  GENERATED    /* returnAddress is not allowed */
+  GENERATED    if (!TYPEINFO_IS_REFERENCE(OP1->typeinfo))
+  GENERATED            VERIFY_ERROR("Illegal instruction: INSTANCEOF on non-reference");
+  GENERATED  
+#              line 1873 "src/vm/jit/verify/typecheck-stackbased-gen.inc"
+  GENERATED  
+  GENERATED    stack[0].type = TYPE_INT;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+#              undef OP1
+  GENERATED  
+#              undef DST
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_MULTIANEWARRAY:
+  GENERATED    /* (.--A) */
+  GENERATED    maythrow = true;
+  GENERATED    /* variable number of inslots! */
+  GENERATED  
+  GENERATED  
+#              line 620 "src/vm/jit/verify/icmds.c"
+  GENERATED    if (!typecheck_stackbased_multianewarray(STATE, stack, stackfloor))
+  GENERATED            EXCEPTION;
+  GENERATED    stack -= (IPTR->s1.argcount - 1);
+  GENERATED    stack[0].type = TYPE_ADR;
+  GENERATED  
+#              line 1896 "src/vm/jit/verify/typecheck-stackbased-gen.inc"
+  GENERATED  
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_IFNULL:
+  GENERATED  case ICMD_IFNONNULL:
+  GENERATED    /* (A--) */
+  GENERATED    CHECK_STACK_DEPTH(1);
+  GENERATED    CHECK_STACK_TYPE(stack[0], TYPE_ADR);
+  GENERATED    stack += -1;
+  GENERATED    /* CAUTION: stack pointer changed before custom code! */
+  GENERATED  
+#              define OP1 (&(stack[1]))
+  GENERATED    /* may use stack[1] ... stack[1] */
+  GENERATED  
+  GENERATED  
+#              line 345 "src/vm/jit/verify/icmds.c"
+  GENERATED    /* {RESULTNOW} */
+  GENERATED    TYPECHECK_COUNT(stat_ins_branch);
+  GENERATED  
+  GENERATED    /* propagate stack and variables to the target block */
+  GENERATED    REACH(IPTR->dst);
+  GENERATED  
+#              line 1920 "src/vm/jit/verify/typecheck-stackbased-gen.inc"
+  GENERATED  
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+#              undef OP1
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_BUILTIN:
+  GENERATED    /* (.--1|.--2|.--) */
+  GENERATED    maythrow = true;
+  GENERATED    /* variable number of inslots! */
+  GENERATED    /* variable number of outslots! */
+  GENERATED  
+  GENERATED  
+#              line 636 "src/vm/jit/verify/icmds.c"
+  GENERATED    TYPECHECK_COUNT(stat_ins_builtin);
+  GENERATED    if (!typecheck_stackbased_verify_builtin(STATE, stack, stackfloor))
+  GENERATED            EXCEPTION;
+  GENERATED  
+  GENERATED    /* pop operands and push return value */
+  GENERATED    {
+  GENERATED            u1 rtype = IPTR->sx.s23.s3.bte->md->returntype.type;
+  GENERATED            stack -=  IPTR->sx.s23.s3.bte->md->paramslots;
+  GENERATED            if (rtype != TYPE_VOID) {
+  GENERATED                    if (IS_2_WORD_TYPE(rtype))
+  GENERATED                            stack += 2;
+  GENERATED                    else
+  GENERATED                            stack += 1;
+  GENERATED            }
+  GENERATED    }
+  GENERATED  
+#              line 1952 "src/vm/jit/verify/typecheck-stackbased-gen.inc"
+  GENERATED  
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+#undef GENERATED
+/* vim:filetype=c:
+ */
diff --git a/src/vm/jit/verify/typecheck-variablesbased-gen.inc b/src/vm/jit/verify/typecheck-variablesbased-gen.inc
new file mode 100644 (file)
index 0000000..b31b714
--- /dev/null
@@ -0,0 +1,1421 @@
+#define GENERATED
+
+  GENERATED  case ICMD_NOP:
+  GENERATED    /* (--) */
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_ACONST:
+  GENERATED    /* (--A) */
+  GENERATED    maythrow = true;
+  GENERATED  
+#              define DST  VAROP(iptr->dst)
+  GENERATED  
+  GENERATED  
+#              line 308 "src/vm/jit/verify/icmds.c"
+  GENERATED    if (IPTR->flags.bits & INS_FLAG_CLASS) {
+  GENERATED            /* a java.lang.Class reference */
+  GENERATED            TYPEINFO_INIT_JAVA_LANG_CLASS(DST->typeinfo,IPTR->sx.val.c);
+  GENERATED    }
+  GENERATED    else {
+  GENERATED            if (IPTR->sx.val.anyptr == NULL)
+  GENERATED                    TYPEINFO_INIT_NULLTYPE(DST->typeinfo);
+  GENERATED            else {
+  GENERATED                    /* string constant (or constant for builtin function) */
+  GENERATED                    typeinfo_init_classinfo(&(DST->typeinfo),class_java_lang_String);
+  GENERATED            }
+  GENERATED    }
+  GENERATED  
+#              line 30 "src/vm/jit/verify/typecheck-variablesbased-gen.inc"
+  GENERATED  
+  GENERATED    VAROP(iptr->dst)->type = TYPE_ADR;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+#              undef DST
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_CHECKNULL:
+  GENERATED    /* (A--A) */
+  GENERATED    maythrow = true;
+  GENERATED    VAROP(iptr->dst)->type = TYPE_ADR;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_ICONST:
+  GENERATED  case ICMD_IDIVPOW2:
+  GENERATED  case ICMD_LCMPCONST:
+  GENERATED  case ICMD_IADDCONST:
+  GENERATED  case ICMD_ISUBCONST:
+  GENERATED  case ICMD_IMULCONST:
+  GENERATED  case ICMD_IANDCONST:
+  GENERATED  case ICMD_IORCONST:
+  GENERATED  case ICMD_IXORCONST:
+  GENERATED  case ICMD_ISHLCONST:
+  GENERATED  case ICMD_ISHRCONST:
+  GENERATED  case ICMD_IUSHRCONST:
+  GENERATED  case ICMD_IREMPOW2:
+  GENERATED  case ICMD_IADD:
+  GENERATED  case ICMD_ISUB:
+  GENERATED  case ICMD_IMUL:
+  GENERATED  case ICMD_INEG:
+  GENERATED  case ICMD_ISHL:
+  GENERATED  case ICMD_ISHR:
+  GENERATED  case ICMD_IUSHR:
+  GENERATED  case ICMD_IAND:
+  GENERATED  case ICMD_IOR:
+  GENERATED  case ICMD_IXOR:
+  GENERATED  case ICMD_L2I:
+  GENERATED  case ICMD_F2I:
+  GENERATED  case ICMD_D2I:
+  GENERATED  case ICMD_INT2BYTE:
+  GENERATED  case ICMD_INT2CHAR:
+  GENERATED  case ICMD_INT2SHORT:
+  GENERATED  case ICMD_LCMP:
+  GENERATED  case ICMD_FCMPL:
+  GENERATED  case ICMD_FCMPG:
+  GENERATED  case ICMD_DCMPL:
+  GENERATED  case ICMD_DCMPG:
+  GENERATED  case ICMD_IMULPOW2:
+  GENERATED    /* (--I), (I--I), (L--I), (II--I), (F--I), (D--I), (LL--I), (FF--I), (DD--I) */
+  GENERATED    VAROP(iptr->dst)->type = TYPE_INT;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_CHECKNULL_POP:
+  GENERATED  case ICMD_FASTORECONST:
+  GENERATED  case ICMD_DASTORECONST:
+  GENERATED  case ICMD_AASTORECONST:
+  GENERATED    /* (A--), (AI--) */
+  GENERATED    maythrow = true;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_LDIVPOW2:
+  GENERATED  case ICMD_LCONST:
+  GENERATED  case ICMD_LADDCONST:
+  GENERATED  case ICMD_LSUBCONST:
+  GENERATED  case ICMD_LMULCONST:
+  GENERATED  case ICMD_LANDCONST:
+  GENERATED  case ICMD_LORCONST:
+  GENERATED  case ICMD_LXORCONST:
+  GENERATED  case ICMD_LSHLCONST:
+  GENERATED  case ICMD_LSHRCONST:
+  GENERATED  case ICMD_LUSHRCONST:
+  GENERATED  case ICMD_LREMPOW2:
+  GENERATED  case ICMD_LADD:
+  GENERATED  case ICMD_LSUB:
+  GENERATED  case ICMD_LMUL:
+  GENERATED  case ICMD_LNEG:
+  GENERATED  case ICMD_LSHL:
+  GENERATED  case ICMD_LSHR:
+  GENERATED  case ICMD_LUSHR:
+  GENERATED  case ICMD_LAND:
+  GENERATED  case ICMD_LOR:
+  GENERATED  case ICMD_LXOR:
+  GENERATED  case ICMD_I2L:
+  GENERATED  case ICMD_F2L:
+  GENERATED  case ICMD_D2L:
+  GENERATED  case ICMD_LMULPOW2:
+  GENERATED    /* (L--L), (--L), (LL--L), (LI--L), (I--L), (F--L), (D--L) */
+  GENERATED    VAROP(iptr->dst)->type = TYPE_LNG;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_FCONST:
+  GENERATED  case ICMD_FADD:
+  GENERATED  case ICMD_FSUB:
+  GENERATED  case ICMD_FMUL:
+  GENERATED  case ICMD_FDIV:
+  GENERATED  case ICMD_FREM:
+  GENERATED  case ICMD_FNEG:
+  GENERATED  case ICMD_I2F:
+  GENERATED  case ICMD_L2F:
+  GENERATED  case ICMD_D2F:
+  GENERATED    /* (--F), (FF--F), (F--F), (I--F), (L--F), (D--F) */
+  GENERATED    VAROP(iptr->dst)->type = TYPE_FLT;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_DCONST:
+  GENERATED  case ICMD_DADD:
+  GENERATED  case ICMD_DSUB:
+  GENERATED  case ICMD_DMUL:
+  GENERATED  case ICMD_DDIV:
+  GENERATED  case ICMD_DREM:
+  GENERATED  case ICMD_DNEG:
+  GENERATED  case ICMD_I2D:
+  GENERATED  case ICMD_L2D:
+  GENERATED  case ICMD_F2D:
+  GENERATED    /* (--D), (DD--D), (D--D), (I--D), (L--D), (F--D) */
+  GENERATED    VAROP(iptr->dst)->type = TYPE_DBL;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_COPY:
+  GENERATED    /* (1--1) */
+  GENERATED  
+#              define OP1  VAROP(iptr->s1)
+  GENERATED  
+#              define DST  VAROP(iptr->dst)
+  GENERATED  
+  GENERATED  
+#              line 48 "src/vm/jit/verify/icmds.c"
+  GENERATED    TYPECHECK_COUNT(stat_ins_stack);
+  GENERATED    COPYTYPE(IPTR->s1, IPTR->dst);
+  GENERATED    DST->type = OP1->type;
+  GENERATED  
+#              line 169 "src/vm/jit/verify/typecheck-variablesbased-gen.inc"
+  GENERATED  
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+#              undef OP1
+  GENERATED  
+#              undef DST
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_MOVE:
+  GENERATED    /* (1--1) */
+  GENERATED  
+#              define OP1  VAROP(iptr->s1)
+  GENERATED  
+#              define DST  VAROP(iptr->dst)
+  GENERATED  
+  GENERATED  
+#              line 47 "src/vm/jit/verify/icmds.c"
+  GENERATED    TYPECHECK_COUNT(stat_ins_stack);
+  GENERATED    COPYTYPE(IPTR->s1, IPTR->dst);
+  GENERATED    DST->type = OP1->type;
+  GENERATED  
+#              line 192 "src/vm/jit/verify/typecheck-variablesbased-gen.inc"
+  GENERATED  
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+#              undef OP1
+  GENERATED  
+#              undef DST
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_ILOAD:
+  GENERATED    /* (--I) */
+  GENERATED    CHECK_LOCAL_TYPE(IPTR->s1.varindex, TYPE_INT);
+  GENERATED    VAROP(iptr->dst)->type = TYPE_INT;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_LLOAD:
+  GENERATED    /* (--L) */
+  GENERATED    CHECK_LOCAL_TYPE(IPTR->s1.varindex, TYPE_LNG);
+  GENERATED    VAROP(iptr->dst)->type = TYPE_LNG;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_FLOAD:
+  GENERATED    /* (--F) */
+  GENERATED    CHECK_LOCAL_TYPE(IPTR->s1.varindex, TYPE_FLT);
+  GENERATED    VAROP(iptr->dst)->type = TYPE_FLT;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_DLOAD:
+  GENERATED    /* (--D) */
+  GENERATED    CHECK_LOCAL_TYPE(IPTR->s1.varindex, TYPE_DBL);
+  GENERATED    VAROP(iptr->dst)->type = TYPE_DBL;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_ALOAD:
+  GENERATED    /* (--A) */
+  GENERATED    CHECK_LOCAL_TYPE(IPTR->s1.varindex, TYPE_ADR);
+  GENERATED  
+#              define OP1  VAROP(IPTR->s1)
+  GENERATED  
+#              define DST  VAROP(iptr->dst)
+  GENERATED  
+  GENERATED  
+#              line 57 "src/vm/jit/verify/icmds.c"
+  GENERATED    TYPECHECK_COUNT(stat_ins_aload);
+  GENERATED  
+  GENERATED    /* loading a returnAddress is not allowed */
+  GENERATED    if (!TYPEDESC_IS_REFERENCE(*OP1)) {
+  GENERATED            VERIFY_ERROR("illegal instruction: ALOAD loading non-reference");
+  GENERATED    }
+  GENERATED    TYPEINFO_COPY(OP1->typeinfo,DST->typeinfo);
+  GENERATED  
+#              line 248 "src/vm/jit/verify/typecheck-variablesbased-gen.inc"
+  GENERATED  
+  GENERATED    VAROP(iptr->dst)->type = TYPE_ADR;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+#              undef OP1
+  GENERATED  
+#              undef DST
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_IALOAD:
+  GENERATED    /* (AI--I) */
+  GENERATED    maythrow = true;
+  GENERATED  
+#              define OP1  VAROP(iptr->s1)
+  GENERATED  
+#              define DST  VAROP(iptr->dst)
+  GENERATED  
+  GENERATED  
+#              line 219 "src/vm/jit/verify/icmds.c"
+  GENERATED    if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_INT))
+  GENERATED            VERIFY_ERROR("Array type mismatch");
+  GENERATED  
+#              line 272 "src/vm/jit/verify/typecheck-variablesbased-gen.inc"
+  GENERATED  
+  GENERATED    VAROP(iptr->dst)->type = TYPE_INT;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+#              undef OP1
+  GENERATED  
+#              undef DST
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_LALOAD:
+  GENERATED    /* (AI--L) */
+  GENERATED    maythrow = true;
+  GENERATED  
+#              define OP1  VAROP(iptr->s1)
+  GENERATED  
+#              define DST  VAROP(iptr->dst)
+  GENERATED  
+  GENERATED  
+#              line 229 "src/vm/jit/verify/icmds.c"
+  GENERATED    if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_LONG))
+  GENERATED            VERIFY_ERROR("Array type mismatch");
+  GENERATED  
+#              line 296 "src/vm/jit/verify/typecheck-variablesbased-gen.inc"
+  GENERATED  
+  GENERATED    VAROP(iptr->dst)->type = TYPE_LNG;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+#              undef OP1
+  GENERATED  
+#              undef DST
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_FALOAD:
+  GENERATED    /* (AI--F) */
+  GENERATED    maythrow = true;
+  GENERATED  
+#              define OP1  VAROP(iptr->s1)
+  GENERATED  
+#              define DST  VAROP(iptr->dst)
+  GENERATED  
+  GENERATED  
+#              line 214 "src/vm/jit/verify/icmds.c"
+  GENERATED    if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_FLOAT))
+  GENERATED            VERIFY_ERROR("Array type mismatch");
+  GENERATED  
+#              line 320 "src/vm/jit/verify/typecheck-variablesbased-gen.inc"
+  GENERATED  
+  GENERATED    VAROP(iptr->dst)->type = TYPE_FLT;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+#              undef OP1
+  GENERATED  
+#              undef DST
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_DALOAD:
+  GENERATED    /* (AI--D) */
+  GENERATED    maythrow = true;
+  GENERATED  
+#              define OP1  VAROP(iptr->s1)
+  GENERATED  
+#              define DST  VAROP(iptr->dst)
+  GENERATED  
+  GENERATED  
+#              line 209 "src/vm/jit/verify/icmds.c"
+  GENERATED    if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_DOUBLE))
+  GENERATED            VERIFY_ERROR("Array type mismatch");
+  GENERATED  
+#              line 344 "src/vm/jit/verify/typecheck-variablesbased-gen.inc"
+  GENERATED  
+  GENERATED    VAROP(iptr->dst)->type = TYPE_DBL;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+#              undef OP1
+  GENERATED  
+#              undef DST
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_AALOAD:
+  GENERATED    /* (AI--A) */
+  GENERATED    maythrow = true;
+  GENERATED  
+#              define OP1  VAROP(iptr->s1)
+  GENERATED  
+#              define DST  VAROP(iptr->dst)
+  GENERATED  
+  GENERATED  
+#              line 77 "src/vm/jit/verify/icmds.c"
+  GENERATED    if (!TYPEINFO_MAYBE_ARRAY_OF_REFS(OP1->typeinfo))
+  GENERATED            VERIFY_ERROR("illegal instruction: AALOAD on non-reference array");
+  GENERATED  
+  GENERATED    if (!typeinfo_init_component(&OP1->typeinfo,&DST->typeinfo))
+  GENERATED            EXCEPTION;
+  GENERATED  
+#              line 371 "src/vm/jit/verify/typecheck-variablesbased-gen.inc"
+  GENERATED  
+  GENERATED    VAROP(iptr->dst)->type = TYPE_ADR;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+#              undef OP1
+  GENERATED  
+#              undef DST
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_BALOAD:
+  GENERATED    /* (AI--I) */
+  GENERATED    maythrow = true;
+  GENERATED  
+#              define OP1  VAROP(iptr->s1)
+  GENERATED  
+#              define DST  VAROP(iptr->dst)
+  GENERATED  
+  GENERATED  
+#              line 198 "src/vm/jit/verify/icmds.c"
+  GENERATED    if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_BOOLEAN)
+  GENERATED                    && !TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_BYTE))
+  GENERATED            VERIFY_ERROR("Array type mismatch");
+  GENERATED  
+#              line 396 "src/vm/jit/verify/typecheck-variablesbased-gen.inc"
+  GENERATED  
+  GENERATED    VAROP(iptr->dst)->type = TYPE_INT;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+#              undef OP1
+  GENERATED  
+#              undef DST
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_CALOAD:
+  GENERATED    /* (AI--I) */
+  GENERATED    maythrow = true;
+  GENERATED  
+#              define OP1  VAROP(iptr->s1)
+  GENERATED  
+#              define DST  VAROP(iptr->dst)
+  GENERATED  
+  GENERATED  
+#              line 204 "src/vm/jit/verify/icmds.c"
+  GENERATED    if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_CHAR))
+  GENERATED            VERIFY_ERROR("Array type mismatch");
+  GENERATED  
+#              line 420 "src/vm/jit/verify/typecheck-variablesbased-gen.inc"
+  GENERATED  
+  GENERATED    VAROP(iptr->dst)->type = TYPE_INT;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+#              undef OP1
+  GENERATED  
+#              undef DST
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_SALOAD:
+  GENERATED    /* (AI--I) */
+  GENERATED    maythrow = true;
+  GENERATED  
+#              define OP1  VAROP(iptr->s1)
+  GENERATED  
+#              define DST  VAROP(iptr->dst)
+  GENERATED  
+  GENERATED  
+#              line 224 "src/vm/jit/verify/icmds.c"
+  GENERATED    if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_SHORT))
+  GENERATED            VERIFY_ERROR("Array type mismatch");
+  GENERATED  
+#              line 444 "src/vm/jit/verify/typecheck-variablesbased-gen.inc"
+  GENERATED  
+  GENERATED    VAROP(iptr->dst)->type = TYPE_INT;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+#              undef OP1
+  GENERATED  
+#              undef DST
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_ISTORE:
+  GENERATED    /* (I--) */
+  GENERATED    STORE_LOCAL(TYPE_INT, IPTR->dst.varindex);
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_LSTORE:
+  GENERATED    /* (L--) */
+  GENERATED    STORE_LOCAL_2_WORD(TYPE_LNG, IPTR->dst.varindex);
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_FSTORE:
+  GENERATED    /* (F--) */
+  GENERATED    STORE_LOCAL(TYPE_FLT, IPTR->dst.varindex);
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_DSTORE:
+  GENERATED    /* (D--) */
+  GENERATED    STORE_LOCAL_2_WORD(TYPE_DBL, IPTR->dst.varindex);
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_ASTORE:
+  GENERATED    /* (A--) */
+  GENERATED    STORE_LOCAL(TYPE_ADR, IPTR->dst.varindex);
+  GENERATED  
+#              define DST  VAROP(IPTR->dst)
+  GENERATED  
+#              define OP1  VAROP(iptr->s1)
+  GENERATED  
+  GENERATED  
+#              line 70 "src/vm/jit/verify/icmds.c"
+  GENERATED    TYPEINFO_COPY(OP1->typeinfo, DST->typeinfo);
+  GENERATED  
+#              line 491 "src/vm/jit/verify/typecheck-variablesbased-gen.inc"
+  GENERATED  
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+#              undef DST
+  GENERATED  
+#              undef OP1
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_IF_LEQ:
+  GENERATED  case ICMD_IF_LNE:
+  GENERATED  case ICMD_IF_LLT:
+  GENERATED  case ICMD_IF_LGE:
+  GENERATED  case ICMD_IF_LGT:
+  GENERATED  case ICMD_IF_LLE:
+  GENERATED  case ICMD_IF_LCMPEQ:
+  GENERATED  case ICMD_IF_LCMPNE:
+  GENERATED  case ICMD_IF_LCMPLT:
+  GENERATED  case ICMD_IF_LCMPGE:
+  GENERATED  case ICMD_IF_LCMPGT:
+  GENERATED  case ICMD_IF_LCMPLE:
+  GENERATED  case ICMD_IFEQ:
+  GENERATED  case ICMD_IFNE:
+  GENERATED  case ICMD_IFLT:
+  GENERATED  case ICMD_IFGE:
+  GENERATED  case ICMD_IFGT:
+  GENERATED  case ICMD_IFLE:
+  GENERATED  case ICMD_IF_ICMPEQ:
+  GENERATED  case ICMD_IF_ICMPNE:
+  GENERATED  case ICMD_IF_ICMPLT:
+  GENERATED  case ICMD_IF_ICMPGE:
+  GENERATED  case ICMD_IF_ICMPGT:
+  GENERATED  case ICMD_IF_ICMPLE:
+  GENERATED  case ICMD_IF_ACMPEQ:
+  GENERATED  case ICMD_IF_ACMPNE:
+  GENERATED  case ICMD_IFNULL:
+  GENERATED  case ICMD_IFNONNULL:
+  GENERATED    /* (L--), (LL--), (I--), (II--), (AA--), (A--) */
+  GENERATED  
+#              define OP1  VAROP(iptr->s1)
+  GENERATED  
+  GENERATED  
+#              line 362 "src/vm/jit/verify/icmds.c"
+  GENERATED    /* {RESULTNOW} */
+  GENERATED    TYPECHECK_COUNT(stat_ins_branch);
+  GENERATED  
+  GENERATED    /* propagate stack and variables to the target block */
+  GENERATED    REACH(IPTR->dst);
+  GENERATED  
+#              line 541 "src/vm/jit/verify/typecheck-variablesbased-gen.inc"
+  GENERATED  
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+#              undef OP1
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_IASTORE:
+  GENERATED    /* (AII--) */
+  GENERATED    maythrow = true;
+  GENERATED  
+#              define OP1  VAROP(iptr->s1)
+  GENERATED  
+  GENERATED  
+#              line 255 "src/vm/jit/verify/icmds.c"
+  GENERATED    if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_INT))
+  GENERATED            VERIFY_ERROR("Array type mismatch");
+  GENERATED  
+#              line 560 "src/vm/jit/verify/typecheck-variablesbased-gen.inc"
+  GENERATED  
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+#              undef OP1
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_LASTORE:
+  GENERATED    /* (AIL--) */
+  GENERATED    maythrow = true;
+  GENERATED  
+#              define OP1  VAROP(iptr->s1)
+  GENERATED  
+  GENERATED  
+#              line 265 "src/vm/jit/verify/icmds.c"
+  GENERATED    if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_LONG))
+  GENERATED            VERIFY_ERROR("Array type mismatch");
+  GENERATED  
+#              line 579 "src/vm/jit/verify/typecheck-variablesbased-gen.inc"
+  GENERATED  
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+#              undef OP1
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_FASTORE:
+  GENERATED    /* (AIF--) */
+  GENERATED    maythrow = true;
+  GENERATED  
+#              define OP1  VAROP(iptr->s1)
+  GENERATED  
+  GENERATED  
+#              line 250 "src/vm/jit/verify/icmds.c"
+  GENERATED    if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_FLOAT))
+  GENERATED            VERIFY_ERROR("Array type mismatch");
+  GENERATED  
+#              line 598 "src/vm/jit/verify/typecheck-variablesbased-gen.inc"
+  GENERATED  
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+#              undef OP1
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_DASTORE:
+  GENERATED    /* (AID--) */
+  GENERATED    maythrow = true;
+  GENERATED  
+#              define OP1  VAROP(iptr->s1)
+  GENERATED  
+  GENERATED  
+#              line 245 "src/vm/jit/verify/icmds.c"
+  GENERATED    if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_DOUBLE))
+  GENERATED            VERIFY_ERROR("Array type mismatch");
+  GENERATED  
+#              line 617 "src/vm/jit/verify/typecheck-variablesbased-gen.inc"
+  GENERATED  
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+#              undef OP1
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_AASTORE:
+  GENERATED    /* (AIA--) */
+  GENERATED    maythrow = true;
+  GENERATED  
+#              define OP1  VAROP(iptr->s1)
+  GENERATED  
+  GENERATED  
+#              line 270 "src/vm/jit/verify/icmds.c"
+  GENERATED    /* we just check the basic input types and that the           */
+  GENERATED    /* destination is an array of references. Assignability to    */
+  GENERATED    /* the actual array must be checked at runtime, each time the */
+  GENERATED    /* instruction is performed. (See builtin_canstore.)          */
+  GENERATED    if (!TYPEINFO_MAYBE_ARRAY_OF_REFS(OP1->typeinfo))
+  GENERATED            VERIFY_ERROR("illegal instruction: AASTORE to non-reference array");
+  GENERATED  
+#              line 640 "src/vm/jit/verify/typecheck-variablesbased-gen.inc"
+  GENERATED  
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+#              undef OP1
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_BASTORE:
+  GENERATED    /* (AII--) */
+  GENERATED    maythrow = true;
+  GENERATED  
+#              define OP1  VAROP(iptr->s1)
+  GENERATED  
+  GENERATED  
+#              line 234 "src/vm/jit/verify/icmds.c"
+  GENERATED    if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_BOOLEAN)
+  GENERATED                    && !TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_BYTE))
+  GENERATED            VERIFY_ERROR("Array type mismatch");
+  GENERATED  
+#              line 660 "src/vm/jit/verify/typecheck-variablesbased-gen.inc"
+  GENERATED  
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+#              undef OP1
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_CASTORE:
+  GENERATED    /* (AII--) */
+  GENERATED    maythrow = true;
+  GENERATED  
+#              define OP1  VAROP(iptr->s1)
+  GENERATED  
+  GENERATED  
+#              line 240 "src/vm/jit/verify/icmds.c"
+  GENERATED    if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_CHAR))
+  GENERATED            VERIFY_ERROR("Array type mismatch");
+  GENERATED  
+#              line 679 "src/vm/jit/verify/typecheck-variablesbased-gen.inc"
+  GENERATED  
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+#              undef OP1
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_SASTORE:
+  GENERATED    /* (AII--) */
+  GENERATED    maythrow = true;
+  GENERATED  
+#              define OP1  VAROP(iptr->s1)
+  GENERATED  
+  GENERATED  
+#              line 260 "src/vm/jit/verify/icmds.c"
+  GENERATED    if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_SHORT))
+  GENERATED            VERIFY_ERROR("Array type mismatch");
+  GENERATED  
+#              line 698 "src/vm/jit/verify/typecheck-variablesbased-gen.inc"
+  GENERATED  
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+#              undef OP1
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_POP:
+  GENERATED    /* (1--) */
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_POP2:
+  GENERATED    /* (11--|2--) */
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_IDIV:
+  GENERATED  case ICMD_IREM:
+  GENERATED    /* (II--I) */
+  GENERATED    maythrow = true;
+  GENERATED    VAROP(iptr->dst)->type = TYPE_INT;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_LDIV:
+  GENERATED  case ICMD_LREM:
+  GENERATED    /* (LL--L) */
+  GENERATED    maythrow = true;
+  GENERATED    VAROP(iptr->dst)->type = TYPE_LNG;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_IINC:
+  GENERATED    /* (--) */
+  GENERATED    CHECK_LOCAL_TYPE(IPTR->s1.varindex, TYPE_INT);
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_GOTO:
+  GENERATED    /* (--) */
+  GENERATED    superblockend = true;
+  GENERATED  
+  GENERATED  
+#              line 344 "src/vm/jit/verify/icmds.c"
+  GENERATED    /* {RESULTNOW} */
+  GENERATED    TYPECHECK_COUNT(stat_ins_branch);
+  GENERATED  
+  GENERATED    /* propagate stack and variables to the target block */
+  GENERATED    REACH(IPTR->dst);
+  GENERATED  
+#              line 750 "src/vm/jit/verify/typecheck-variablesbased-gen.inc"
+  GENERATED  
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_JSR:
+  GENERATED    /* (--A) */
+  GENERATED    superblockend = true;
+  GENERATED  
+#              define DST  VAROP(iptr->dst)
+  GENERATED  
+  GENERATED  
+#              line 535 "src/vm/jit/verify/icmds.c"
+  GENERATED    TYPEINFO_INIT_RETURNADDRESS(DST->typeinfo, BPTR->next);
+  GENERATED    REACH(IPTR->sx.s23.s3.jsrtarget);
+  GENERATED  
+#              line 766 "src/vm/jit/verify/typecheck-variablesbased-gen.inc"
+  GENERATED  
+  GENERATED    VAROP(iptr->dst)->type = TYPE_ADR;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+#              undef DST
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_RET:
+  GENERATED    /* (--) */
+  GENERATED    superblockend = true;
+  GENERATED  
+  GENERATED  
+#              line 552 "src/vm/jit/verify/icmds.c"
+  GENERATED    /* check returnAddress variable */
+  GENERATED    if (!typevector_checkretaddr(jd->var,IPTR->s1.varindex))
+  GENERATED            VERIFY_ERROR("illegal instruction: RET using non-returnAddress variable");
+  GENERATED    REACH(IPTR->dst);
+  GENERATED  
+#              line 786 "src/vm/jit/verify/typecheck-variablesbased-gen.inc"
+  GENERATED  
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_TABLESWITCH:
+  GENERATED    /* (I--) */
+  GENERATED    superblockend = true;
+  GENERATED  
+#              define OP1  VAROP(iptr->s1)
+  GENERATED  
+  GENERATED  
+#              line 411 "src/vm/jit/verify/icmds.c"
+  GENERATED    /* {RESULTNOW} */
+  GENERATED    TYPECHECK_COUNT(stat_ins_switch);
+  GENERATED  
+  GENERATED    table = IPTR->dst.table;
+  GENERATED    i = IPTR->sx.s23.s3.tablehigh
+  GENERATED    - IPTR->sx.s23.s2.tablelow + 1 + 1; /* plus default */
+  GENERATED  
+  GENERATED    while (--i >= 0) {
+  GENERATED            REACH(*table);
+  GENERATED            table++;
+  GENERATED    }
+  GENERATED  
+  GENERATED    LOG("switch done");
+  GENERATED  
+#              line 813 "src/vm/jit/verify/typecheck-variablesbased-gen.inc"
+  GENERATED  
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+#              undef OP1
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_LOOKUPSWITCH:
+  GENERATED    /* (I--) */
+  GENERATED    superblockend = true;
+  GENERATED  
+#              define OP1  VAROP(iptr->s1)
+  GENERATED  
+  GENERATED  
+#              line 427 "src/vm/jit/verify/icmds.c"
+  GENERATED    /* {RESULTNOW} */
+  GENERATED    TYPECHECK_COUNT(stat_ins_switch);
+  GENERATED  
+  GENERATED    lookup = IPTR->dst.lookup;
+  GENERATED    i = IPTR->sx.s23.s2.lookupcount;
+  GENERATED    REACH(IPTR->sx.s23.s3.lookupdefault);
+  GENERATED  
+  GENERATED    while (--i >= 0) {
+  GENERATED            REACH(lookup->target);
+  GENERATED            lookup++;
+  GENERATED    }
+  GENERATED  
+  GENERATED    LOG("switch done");
+  GENERATED  
+#              line 843 "src/vm/jit/verify/typecheck-variablesbased-gen.inc"
+  GENERATED  
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+#              undef OP1
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_IRETURN:
+  GENERATED    /* (I--) */
+  GENERATED    superblockend = true;
+  GENERATED  
+#              define OP1  VAROP(iptr->s1)
+  GENERATED  
+  GENERATED  
+#              line 493 "src/vm/jit/verify/icmds.c"
+  GENERATED    if (STATE->returntype.type != TYPE_INT)
+  GENERATED            VERIFY_ERROR("Return type mismatch");
+  GENERATED  
+#              line 862 "src/vm/jit/verify/typecheck-variablesbased-gen.inc"
+  GENERATED  
+  GENERATED    goto return_tail;
+  GENERATED  
+  GENERATED  
+#              undef OP1
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_LRETURN:
+  GENERATED    /* (L--) */
+  GENERATED    superblockend = true;
+  GENERATED  
+#              define OP1  VAROP(iptr->s1)
+  GENERATED  
+  GENERATED  
+#              line 498 "src/vm/jit/verify/icmds.c"
+  GENERATED    if (STATE->returntype.type != TYPE_LNG)
+  GENERATED            VERIFY_ERROR("Return type mismatch");
+  GENERATED  
+#              line 881 "src/vm/jit/verify/typecheck-variablesbased-gen.inc"
+  GENERATED  
+  GENERATED    goto return_tail;
+  GENERATED  
+  GENERATED  
+#              undef OP1
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_FRETURN:
+  GENERATED    /* (F--) */
+  GENERATED    superblockend = true;
+  GENERATED  
+#              define OP1  VAROP(iptr->s1)
+  GENERATED  
+  GENERATED  
+#              line 503 "src/vm/jit/verify/icmds.c"
+  GENERATED    if (STATE->returntype.type != TYPE_FLT)
+  GENERATED            VERIFY_ERROR("Return type mismatch");
+  GENERATED  
+#              line 900 "src/vm/jit/verify/typecheck-variablesbased-gen.inc"
+  GENERATED  
+  GENERATED    goto return_tail;
+  GENERATED  
+  GENERATED  
+#              undef OP1
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_DRETURN:
+  GENERATED    /* (D--) */
+  GENERATED    superblockend = true;
+  GENERATED  
+#              define OP1  VAROP(iptr->s1)
+  GENERATED  
+  GENERATED  
+#              line 508 "src/vm/jit/verify/icmds.c"
+  GENERATED    if (STATE->returntype.type != TYPE_DBL)
+  GENERATED            VERIFY_ERROR("Return type mismatch");
+  GENERATED  
+#              line 919 "src/vm/jit/verify/typecheck-variablesbased-gen.inc"
+  GENERATED  
+  GENERATED    goto return_tail;
+  GENERATED  
+  GENERATED  
+#              undef OP1
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_ARETURN:
+  GENERATED    /* (A--) */
+  GENERATED    maythrow = true;
+  GENERATED    superblockend = true;
+  GENERATED  
+#              define OP1  VAROP(iptr->s1)
+  GENERATED  
+  GENERATED  
+#              line 468 "src/vm/jit/verify/icmds.c"
+  GENERATED    TYPECHECK_COUNT(stat_ins_areturn);
+  GENERATED    if (!TYPEINFO_IS_REFERENCE(OP1->typeinfo))
+  GENERATED            VERIFY_ERROR("illegal instruction: ARETURN on non-reference");
+  GENERATED  
+  GENERATED    if (STATE->returntype.type != TYPE_ADR
+  GENERATED                    || (r = typeinfo_is_assignable(&OP1->typeinfo,&(STATE->returntype.typeinfo)))
+  GENERATED                    == typecheck_FALSE)
+  GENERATED            VERIFY_ERROR("Return type mismatch");
+  GENERATED    if (r == typecheck_FAIL)
+  GENERATED            EXCEPTION;
+  GENERATED    if (r == typecheck_MAYBE) {
+  GENERATED            /* the check has to be postponed, we need a patcher */
+  GENERATED            TYPECHECK_COUNT(stat_ins_areturn_unresolved);
+  GENERATED            IPTR->sx.s23.s2.uc = create_unresolved_class(
+  GENERATED                            METHOD,
+  GENERATED                            METHOD->parseddesc->returntype.classref,
+  GENERATED                            &OP1->typeinfo);
+  GENERATED            IPTR->flags.bits |= INS_FLAG_UNRESOLVED;
+  GENERATED    }
+  GENERATED  
+#              line 956 "src/vm/jit/verify/typecheck-variablesbased-gen.inc"
+  GENERATED  
+  GENERATED    goto return_tail;
+  GENERATED  
+  GENERATED  
+#              undef OP1
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_RETURN:
+  GENERATED    /* (--) */
+  GENERATED    superblockend = true;
+  GENERATED  
+  GENERATED  
+#              line 513 "src/vm/jit/verify/icmds.c"
+  GENERATED    if (STATE->returntype.type != TYPE_VOID)
+  GENERATED            VERIFY_ERROR("Return type mismatch");
+  GENERATED  
+  GENERATED  return_tail:
+  GENERATED    TYPECHECK_COUNT(stat_ins_primitive_return);
+  GENERATED  
+  GENERATED    if (STATE->initmethod && METHOD->class != class_java_lang_Object) {
+  GENERATED            /* Check if the 'this' instance has been initialized. */
+  GENERATED            LOG("Checking <init> marker");
+  GENERATED  
+#            if defined(TYPECHECK_VARIABLESBASED)
+  GENERATED            if (!typevector_checktype(jd->var,STATE->numlocals-1,TYPE_INT))
+  GENERATED  
+#            else
+  GENERATED            if (STATE->locals[STATE->numlocals-1].type != TYPE_INT)
+  GENERATED  
+#            endif
+  GENERATED                    VERIFY_ERROR("<init> method does not initialize 'this'");
+  GENERATED    }
+  GENERATED  
+#              line 990 "src/vm/jit/verify/typecheck-variablesbased-gen.inc"
+  GENERATED  
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_GETSTATIC:
+  GENERATED    /* (--1|--2) */
+  GENERATED    maythrow = true;
+  GENERATED  
+#              define DST  VAROP(iptr->dst)
+  GENERATED  
+  GENERATED  
+#              line 183 "src/vm/jit/verify/icmds.c"
+  GENERATED    if (!verify_fieldaccess(state, NULL, NULL))
+  GENERATED            return false;
+  GENERATED    maythrow = true;
+  GENERATED  
+#              line 1007 "src/vm/jit/verify/typecheck-variablesbased-gen.inc"
+  GENERATED  
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+#              undef DST
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_PUTSTATIC:
+  GENERATED    /* (1--|2--) */
+  GENERATED    maythrow = true;
+  GENERATED  
+#              define OP1  VAROP(iptr->s1)
+  GENERATED  
+  GENERATED  
+#              line 131 "src/vm/jit/verify/icmds.c"
+  GENERATED    if (!verify_fieldaccess(state, NULL, VAROP(iptr->s1)))
+  GENERATED            return false;
+  GENERATED    maythrow = true;
+  GENERATED  
+#              line 1027 "src/vm/jit/verify/typecheck-variablesbased-gen.inc"
+  GENERATED  
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+#              undef OP1
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_GETFIELD:
+  GENERATED    /* (A--1|A--2) */
+  GENERATED    maythrow = true;
+  GENERATED  
+#              define OP1  VAROP(iptr->s1)
+  GENERATED  
+#              define DST  VAROP(iptr->dst)
+  GENERATED  
+  GENERATED  
+#              line 177 "src/vm/jit/verify/icmds.c"
+  GENERATED    if (!verify_fieldaccess(state, VAROP(iptr->s1), NULL))
+  GENERATED            return false;
+  GENERATED    maythrow = true;
+  GENERATED  
+#              line 1049 "src/vm/jit/verify/typecheck-variablesbased-gen.inc"
+  GENERATED  
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+#              undef OP1
+  GENERATED  
+#              undef DST
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_PUTFIELD:
+  GENERATED    /* (A1--|A2--) */
+  GENERATED    maythrow = true;
+  GENERATED  
+#              define OP1  VAROP(iptr->s1)
+  GENERATED  
+  GENERATED  
+#              line 125 "src/vm/jit/verify/icmds.c"
+  GENERATED    if (!verify_fieldaccess(state, VAROP(iptr->s1), VAROP(iptr->sx.s23.s2)))
+  GENERATED            return false;
+  GENERATED    maythrow = true;
+  GENERATED  
+#              line 1071 "src/vm/jit/verify/typecheck-variablesbased-gen.inc"
+  GENERATED  
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+#              undef OP1
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_INVOKEVIRTUAL:
+  GENERATED  case ICMD_INVOKESPECIAL:
+  GENERATED  case ICMD_INVOKESTATIC:
+  GENERATED  case ICMD_INVOKEINTERFACE:
+  GENERATED    /* (.--1|.--2|.--) */
+  GENERATED    maythrow = true;
+  GENERATED  
+#              define OP1  VAROP(iptr->s1)
+  GENERATED  
+  GENERATED  
+#              line 572 "src/vm/jit/verify/icmds.c"
+  GENERATED    TYPECHECK_COUNT(stat_ins_invoke);
+  GENERATED    if (!verify_invocation(state))
+  GENERATED            EXCEPTION;
+  GENERATED    TYPECHECK_COUNTIF(INSTRUCTION_IS_UNRESOLVED(IPTR), stat_ins_invoke_unresolved);
+  GENERATED  
+#              line 1095 "src/vm/jit/verify/typecheck-variablesbased-gen.inc"
+  GENERATED  
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+#              undef OP1
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_ARRAYLENGTH:
+  GENERATED    /* (A--I) */
+  GENERATED    maythrow = true;
+  GENERATED  
+#              define OP1  VAROP(iptr->s1)
+  GENERATED  
+#              define DST  VAROP(iptr->dst)
+  GENERATED  
+  GENERATED  
+#              line 192 "src/vm/jit/verify/icmds.c"
+  GENERATED    if (!TYPEINFO_MAYBE_ARRAY(OP1->typeinfo)
+  GENERATED                    && OP1->typeinfo.typeclass.cls != pseudo_class_Arraystub)
+  GENERATED            VERIFY_ERROR("illegal instruction: ARRAYLENGTH on non-array");
+  GENERATED  
+#              line 1117 "src/vm/jit/verify/typecheck-variablesbased-gen.inc"
+  GENERATED  
+  GENERATED    VAROP(iptr->dst)->type = TYPE_INT;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+#              undef OP1
+  GENERATED  
+#              undef DST
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_ATHROW:
+  GENERATED    /* (A--) */
+  GENERATED    maythrow = true;
+  GENERATED    superblockend = true;
+  GENERATED  
+#              define OP1  VAROP(iptr->s1)
+  GENERATED  
+  GENERATED  
+#              line 447 "src/vm/jit/verify/icmds.c"
+  GENERATED    TYPECHECK_COUNT(stat_ins_athrow);
+  GENERATED    r = typeinfo_is_assignable_to_class(&OP1->typeinfo,
+  GENERATED                    CLASSREF_OR_CLASSINFO(class_java_lang_Throwable));
+  GENERATED    if (r == typecheck_FALSE)
+  GENERATED            VERIFY_ERROR("illegal instruction: ATHROW on non-Throwable");
+  GENERATED    if (r == typecheck_FAIL)
+  GENERATED            EXCEPTION;
+  GENERATED    if (r == typecheck_MAYBE) {
+  GENERATED            /* the check has to be postponed. we need a patcher */
+  GENERATED            TYPECHECK_COUNT(stat_ins_athrow_unresolved);
+  GENERATED            IPTR->sx.s23.s2.uc = create_unresolved_class(
+  GENERATED                            METHOD,
+  GENERATED                            /* XXX make this more efficient, use class_java_lang_Throwable
+  GENERATED                             * directly */
+  GENERATED                            class_get_classref(METHOD->class,utf_java_lang_Throwable),
+  GENERATED                            &OP1->typeinfo);
+  GENERATED            IPTR->flags.bits |= INS_FLAG_UNRESOLVED;
+  GENERATED    }
+  GENERATED  
+#              line 1156 "src/vm/jit/verify/typecheck-variablesbased-gen.inc"
+  GENERATED  
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+#              undef OP1
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_CHECKCAST:
+  GENERATED    /* (A--A) */
+  GENERATED    maythrow = true;
+  GENERATED  
+#              define OP1  VAROP(iptr->s1)
+  GENERATED  
+#              define DST  VAROP(iptr->dst)
+  GENERATED  
+  GENERATED  
+#              line 326 "src/vm/jit/verify/icmds.c"
+  GENERATED    /* returnAddress is not allowed */
+  GENERATED    if (!TYPEINFO_IS_REFERENCE(OP1->typeinfo))
+  GENERATED            VERIFY_ERROR("Illegal instruction: CHECKCAST on non-reference");
+  GENERATED  
+  GENERATED    if (!typeinfo_init_class(&(DST->typeinfo),IPTR->sx.s23.s3.c))
+  GENERATED            EXCEPTION;
+  GENERATED  
+#              line 1181 "src/vm/jit/verify/typecheck-variablesbased-gen.inc"
+  GENERATED  
+  GENERATED    VAROP(iptr->dst)->type = TYPE_ADR;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+#              undef OP1
+  GENERATED  
+#              undef DST
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_INSTANCEOF:
+  GENERATED    /* (A--I) */
+  GENERATED    maythrow = true;
+  GENERATED  
+#              define OP1  VAROP(iptr->s1)
+  GENERATED  
+#              define DST  VAROP(iptr->dst)
+  GENERATED  
+  GENERATED  
+#              line 335 "src/vm/jit/verify/icmds.c"
+  GENERATED    /* returnAddress is not allowed */
+  GENERATED    if (!TYPEINFO_IS_REFERENCE(OP1->typeinfo))
+  GENERATED            VERIFY_ERROR("Illegal instruction: INSTANCEOF on non-reference");
+  GENERATED  
+#              line 1206 "src/vm/jit/verify/typecheck-variablesbased-gen.inc"
+  GENERATED  
+  GENERATED    VAROP(iptr->dst)->type = TYPE_INT;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+#              undef OP1
+  GENERATED  
+#              undef DST
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_MULTIANEWARRAY:
+  GENERATED    /* (.--A) */
+  GENERATED    maythrow = true;
+  GENERATED  
+#              define OP1  VAROP(iptr->s1)
+  GENERATED  
+#              define DST  VAROP(iptr->dst)
+  GENERATED  
+  GENERATED  
+#              line 615 "src/vm/jit/verify/icmds.c"
+  GENERATED    if (!verify_multianewarray(STATE))
+  GENERATED            EXCEPTION;
+  GENERATED  
+#              line 1230 "src/vm/jit/verify/typecheck-variablesbased-gen.inc"
+  GENERATED  
+  GENERATED    VAROP(iptr->dst)->type = TYPE_ADR;
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+#              undef OP1
+  GENERATED  
+#              undef DST
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_IASTORECONST:
+  GENERATED    /* (AI--) */
+  GENERATED    maythrow = true;
+  GENERATED  
+#              define OP1  VAROP(iptr->s1)
+  GENERATED  
+  GENERATED  
+#              line 279 "src/vm/jit/verify/icmds.c"
+  GENERATED    if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo, ARRAYTYPE_INT))
+  GENERATED            VERIFY_ERROR("Array type mismatch");
+  GENERATED  
+#              line 1252 "src/vm/jit/verify/typecheck-variablesbased-gen.inc"
+  GENERATED  
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+#              undef OP1
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_LASTORECONST:
+  GENERATED    /* (AI--) */
+  GENERATED    maythrow = true;
+  GENERATED  
+#              define OP1  VAROP(iptr->s1)
+  GENERATED  
+  GENERATED  
+#              line 284 "src/vm/jit/verify/icmds.c"
+  GENERATED    if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo, ARRAYTYPE_LONG))
+  GENERATED            VERIFY_ERROR("Array type mismatch");
+  GENERATED  
+#              line 1271 "src/vm/jit/verify/typecheck-variablesbased-gen.inc"
+  GENERATED  
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+#              undef OP1
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_BASTORECONST:
+  GENERATED    /* (AI--) */
+  GENERATED    maythrow = true;
+  GENERATED  
+#              define OP1  VAROP(iptr->s1)
+  GENERATED  
+  GENERATED  
+#              line 289 "src/vm/jit/verify/icmds.c"
+  GENERATED    if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo, ARRAYTYPE_BOOLEAN)
+  GENERATED                    && !TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo, ARRAYTYPE_BYTE))
+  GENERATED            VERIFY_ERROR("Array type mismatch");
+  GENERATED  
+#              line 1291 "src/vm/jit/verify/typecheck-variablesbased-gen.inc"
+  GENERATED  
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+#              undef OP1
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_CASTORECONST:
+  GENERATED    /* (AI--) */
+  GENERATED    maythrow = true;
+  GENERATED  
+#              define OP1  VAROP(iptr->s1)
+  GENERATED  
+  GENERATED  
+#              line 295 "src/vm/jit/verify/icmds.c"
+  GENERATED    if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo, ARRAYTYPE_CHAR))
+  GENERATED            VERIFY_ERROR("Array type mismatch");
+  GENERATED  
+#              line 1310 "src/vm/jit/verify/typecheck-variablesbased-gen.inc"
+  GENERATED  
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+#              undef OP1
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_SASTORECONST:
+  GENERATED    /* (AI--) */
+  GENERATED    maythrow = true;
+  GENERATED  
+#              define OP1  VAROP(iptr->s1)
+  GENERATED  
+  GENERATED  
+#              line 300 "src/vm/jit/verify/icmds.c"
+  GENERATED    if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo, ARRAYTYPE_SHORT))
+  GENERATED            VERIFY_ERROR("Array type mismatch");
+  GENERATED  
+#              line 1329 "src/vm/jit/verify/typecheck-variablesbased-gen.inc"
+  GENERATED  
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+#              undef OP1
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_PUTSTATICCONST:
+  GENERATED    /* (--) */
+  GENERATED    maythrow = true;
+  GENERATED  
+  GENERATED  
+#              line 157 "src/vm/jit/verify/icmds.c"
+  GENERATED    /* XXX this mess will go away with const operands */
+  GENERATED    INSTRUCTION_GET_FIELDREF(state->iptr, fieldref);
+  GENERATED    constvalue.type = fieldref->parseddesc.fd->type;
+  GENERATED    if (IS_ADR_TYPE(constvalue.type)) {
+  GENERATED            if (state->iptr->sx.val.anyptr) {
+  GENERATED                    assert(class_java_lang_String);
+  GENERATED                    assert(class_java_lang_String->state & CLASS_LINKED);
+  GENERATED                    typeinfo_init_classinfo(&(constvalue.typeinfo),
+  GENERATED                                                                    class_java_lang_String);
+  GENERATED            }
+  GENERATED            else {
+  GENERATED                    TYPEINFO_INIT_NULLTYPE(constvalue.typeinfo);
+  GENERATED            }
+  GENERATED    }
+  GENERATED    if (!verify_fieldaccess(state, NULL, &constvalue))
+  GENERATED            return false;
+  GENERATED    maythrow = true;
+  GENERATED  
+#              line 1361 "src/vm/jit/verify/typecheck-variablesbased-gen.inc"
+  GENERATED  
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_PUTFIELDCONST:
+  GENERATED    /* (A--) */
+  GENERATED    maythrow = true;
+  GENERATED  
+#              define OP1  VAROP(iptr->s1)
+  GENERATED  
+  GENERATED  
+#              line 137 "src/vm/jit/verify/icmds.c"
+  GENERATED    /* XXX this mess will go away with const operands */
+  GENERATED    INSTRUCTION_GET_FIELDREF(state->iptr, fieldref);
+  GENERATED    constvalue.type = fieldref->parseddesc.fd->type;
+  GENERATED    if (IS_ADR_TYPE(constvalue.type)) {
+  GENERATED            if (state->iptr->sx.val.anyptr) {
+  GENERATED                    assert(class_java_lang_String);
+  GENERATED                    assert(class_java_lang_String->state & CLASS_LINKED);
+  GENERATED                    typeinfo_init_classinfo(&(constvalue.typeinfo),
+  GENERATED                                                                    class_java_lang_String);
+  GENERATED            }
+  GENERATED            else {
+  GENERATED                    TYPEINFO_INIT_NULLTYPE(constvalue.typeinfo);
+  GENERATED            }
+  GENERATED    }
+  GENERATED    if (!verify_fieldaccess(state, VAROP(iptr->s1), &constvalue))
+  GENERATED            return false;
+  GENERATED    maythrow = true;
+  GENERATED  
+#              line 1392 "src/vm/jit/verify/typecheck-variablesbased-gen.inc"
+  GENERATED  
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+#              undef OP1
+  GENERATED  
+  GENERATED  
+  GENERATED  case ICMD_BUILTIN:
+  GENERATED    /* (.--1|.--2|.--) */
+  GENERATED    maythrow = true;
+  GENERATED  
+#              define OP1  VAROP(iptr->s1)
+  GENERATED  
+  GENERATED  
+#              line 630 "src/vm/jit/verify/icmds.c"
+  GENERATED    TYPECHECK_COUNT(stat_ins_builtin);
+  GENERATED    if (!verify_builtin(state))
+  GENERATED            EXCEPTION;
+  GENERATED  
+#              line 1412 "src/vm/jit/verify/typecheck-variablesbased-gen.inc"
+  GENERATED  
+  GENERATED    break;
+  GENERATED  
+  GENERATED  
+#              undef OP1
+  GENERATED  
+  GENERATED  
+#undef GENERATED
+/* vim:filetype=c:
+ */
index 6199d4504e3a9271ce866df877286ead703823cc..6bcc88b2c416f5e570a0fe9b1ccc6fe7e61d9ea5 100644 (file)
@@ -28,7 +28,7 @@
 
    Changes: Christian Thalinger
 
-   $Id: typecheck.c 5753 2006-10-12 14:39:43Z edwin $
+   $Id: typecheck.c 5773 2006-10-13 14:34:19Z edwin $
 
 */
 
@@ -741,6 +741,40 @@ static void typecheck_invalidate_locals(verifier_state *state, s4 index, bool tw
 }
 
 
+/* macros used by the generated code ******************************************/
+
+#define EXCEPTION          do { return false; } while (0)
+#define VERIFY_ERROR(msg)  TYPECHECK_VERIFYERROR_bool(msg)
+
+#define CHECK_LOCAL_TYPE(index, t)                                   \
+    do {                                                             \
+        if (!typevector_checktype(jd->var, (index), (t)))            \
+             VERIFY_ERROR("Local variable type mismatch");           \
+    } while (0)
+
+#define STORE_LOCAL(t, index)                                        \
+    do {                                                             \
+         typecheck_invalidate_locals(state, (index), false);         \
+         typevector_store(jd->var, (index), (t), NULL);              \
+    } while (0)
+
+#define STORE_LOCAL_2_WORD(t, index)                                 \
+    do {                                                             \
+         typecheck_invalidate_locals(state, (index), true);          \
+         typevector_store(jd->var, (index), (t), NULL);              \
+    } while (0)
+
+#define REACH_BLOCK(target)                                          \
+    do {                                                             \
+        if (!typestate_reach(state, (target),                        \
+                             state->bptr->outvars, jd->var,          \
+                             state->bptr->outdepth))                 \
+                return false;                                        \
+    } while (0)
+
+#define REACH(target)   REACH_BLOCK((target).block)
+
+
 /* verify_basic_block **********************************************************
  
    Perform bytecode verification of a basic block.
@@ -768,7 +802,6 @@ verify_basic_block(verifier_state *state)
        branch_target_t *table;
        lookup_target_t *lookup;
        jitdata *jd = state->jd;
-       varinfo *dv;
        exceptiontable *ex;
        varinfo constvalue;                               /* for PUT*CONST */
        constant_FMIref *fieldref;
@@ -782,7 +815,6 @@ verify_basic_block(verifier_state *state)
 
        /* prevent compiler warnings */
 
-       dv = NULL;
 
        /* determine the active exception handlers for this block */
        /* XXX could use a faster algorithm with sorted lists or  */
@@ -817,783 +849,26 @@ verify_basic_block(verifier_state *state)
                DOLOG(show_icmd(jd, state->iptr, false, SHOW_STACK)); LOGNL; LOGFLUSH;
 
                opcode = iptr->opc;
-               dv = VAROP(iptr->dst);
                maythrow = false;
 
                switch (opcode) {
 
-                       /****************************************/
-                       /* STACK MANIPULATIONS                  */
-
-                       /* We just need to copy the typeinfo */
-                       /* for slots containing addresses.   */
-
-                       case ICMD_MOVE:
-                       case ICMD_COPY:
-                               TYPECHECK_COUNT(stat_ins_stack);
-                               COPYTYPE(iptr->s1, iptr->dst);
-                               dv->type = VAROP(iptr->s1)->type;
-                               break;
-
-                               /****************************************/
-                               /* PRIMITIVE VARIABLE ACCESS            */
-
-                       case ICMD_ILOAD: if (!typevector_checktype(jd->var,state->iptr->s1.varindex,TYPE_INT)) 
-                                                                TYPECHECK_VERIFYERROR_bool("Local variable type mismatch");
-                                                        dv->type = TYPE_INT;
-                                                        break;
-                       case ICMD_IINC:  if (!typevector_checktype(jd->var,state->iptr->s1.varindex,TYPE_INT))
-                                                                TYPECHECK_VERIFYERROR_bool("Local variable type mismatch");
-                                                        dv->type = TYPE_INT;
-                                                        break;
-                       case ICMD_FLOAD: if (!typevector_checktype(jd->var,state->iptr->s1.varindex,TYPE_FLT))
-                                                                TYPECHECK_VERIFYERROR_bool("Local variable type mismatch");
-                                                        dv->type = TYPE_FLT;
-                                                        break;
-                       case ICMD_LLOAD: if (!typevector_checktype(jd->var,state->iptr->s1.varindex,TYPE_LNG))
-                                                                TYPECHECK_VERIFYERROR_bool("Local variable type mismatch");
-                                                        dv->type = TYPE_LNG;
-                                                        break;
-                       case ICMD_DLOAD: if (!typevector_checktype(jd->var,state->iptr->s1.varindex,TYPE_DBL))
-                                                                TYPECHECK_VERIFYERROR_bool("Local variable type mismatch");
-                                                        dv->type = TYPE_DBL;
-                                                        break;
-
-                       case ICMD_ISTORE: 
-                                                        typecheck_invalidate_locals(state, state->iptr->dst.varindex, false);
-                                                        typevector_store(jd->var,state->iptr->dst.varindex,TYPE_INT,NULL); 
-                                                        break;
-                       case ICMD_FSTORE: 
-                                                        typecheck_invalidate_locals(state, state->iptr->dst.varindex, false);
-                                                        typevector_store(jd->var,state->iptr->dst.varindex,TYPE_FLT,NULL); 
-                                                        break;
-                       case ICMD_LSTORE: 
-                                                        typecheck_invalidate_locals(state, state->iptr->dst.varindex, true);
-                                                        typevector_store(jd->var,state->iptr->dst.varindex,TYPE_LNG,NULL); 
-                                                        break;
-                       case ICMD_DSTORE: 
-                                                        typecheck_invalidate_locals(state, state->iptr->dst.varindex, true);
-                                                        typevector_store(jd->var,state->iptr->dst.varindex,TYPE_DBL,NULL); 
-                                                        break;
-
-                               /****************************************/
-                               /* LOADING ADDRESS FROM VARIABLE        */
-
-                       case ICMD_ALOAD:
-                               TYPECHECK_COUNT(stat_ins_aload);
-
-                               /* loading a returnAddress is not allowed */
-                               if (!TYPEDESC_IS_REFERENCE(*VAROP(state->iptr->s1))) {
-                                       TYPECHECK_VERIFYERROR_bool("illegal instruction: ALOAD loading non-reference");
-                               }
-                               TYPEINFO_COPY(VAROP(state->iptr->s1)->typeinfo,dv->typeinfo);
-                               dv->type = TYPE_ADR;
-                               break;
-
-                               /****************************************/
-                               /* STORING ADDRESS TO VARIABLE          */
-
-                       case ICMD_ASTORE:
-                               typecheck_invalidate_locals(state, state->iptr->dst.varindex, false);
-
-                               if (TYPEINFO_IS_PRIMITIVE(VAROP(state->iptr->s1)->typeinfo)) {
-                                       typevector_store_retaddr(jd->var,state->iptr->dst.varindex,&(VAROP(state->iptr->s1)->typeinfo));
-                               }
-                               else {
-                                       typevector_store(jd->var,state->iptr->dst.varindex,TYPE_ADR,
-                                                       &(VAROP(state->iptr->s1)->typeinfo));
-                               }
-                               break;
-
-                               /****************************************/
-                               /* LOADING ADDRESS FROM ARRAY           */
-
-                       case ICMD_AALOAD:
-                               if (!TYPEINFO_MAYBE_ARRAY_OF_REFS(VAROP(state->iptr->s1)->typeinfo))
-                                       TYPECHECK_VERIFYERROR_bool("illegal instruction: AALOAD on non-reference array");
-
-                               if (!typeinfo_init_component(&VAROP(state->iptr->s1)->typeinfo,&dv->typeinfo))
-                                       return false;
-                               dv->type = TYPE_ADR;
-                               maythrow = true;
-                               break;
-
-                               /****************************************/
-                               /* FIELD ACCESS                         */
-
-                       case ICMD_PUTFIELD:
-                               if (!verify_fieldaccess(state, VAROP(iptr->s1), 
-                                                                               VAROP(iptr->sx.s23.s2)))
-                                       return false;
-                               maythrow = true;
-                               break;
-
-                       case ICMD_PUTSTATIC:
-                               if (!verify_fieldaccess(state, NULL, VAROP(iptr->s1)))
-                                       return false;
-                               maythrow = true;
-                               break;
-
-                       case ICMD_PUTFIELDCONST:
-                               /* XXX this mess will go away with const operands */
-                               INSTRUCTION_GET_FIELDREF(state->iptr, fieldref);
-                               constvalue.type = fieldref->parseddesc.fd->type;
-                               if (IS_ADR_TYPE(constvalue.type)) {
-                                       if (state->iptr->sx.val.anyptr) {
-                                               assert(class_java_lang_String);
-                                               assert(class_java_lang_String->state & CLASS_LINKED);
-                                               typeinfo_init_classinfo(&(constvalue.typeinfo), 
-                                                                                               class_java_lang_String);
-                                       }
-                                       else {
-                                               TYPEINFO_INIT_NULLTYPE(constvalue.typeinfo);
-                                       }
-                               }
-                               if (!verify_fieldaccess(state, VAROP(iptr->s1), 
-                                                                               &constvalue))
-                                       return false;
-                               maythrow = true;
-                               break;
-
-                       case ICMD_PUTSTATICCONST:
-                               /* XXX this mess will go away with const operands */
-                               INSTRUCTION_GET_FIELDREF(state->iptr, fieldref);
-                               constvalue.type = fieldref->parseddesc.fd->type;
-                               if (IS_ADR_TYPE(constvalue.type)) {
-                                       if (state->iptr->sx.val.anyptr) {
-                                               assert(class_java_lang_String);
-                                               assert(class_java_lang_String->state & CLASS_LINKED);
-                                               typeinfo_init_classinfo(&(constvalue.typeinfo), 
-                                                                                               class_java_lang_String);
-                                       }
-                                       else {
-                                               TYPEINFO_INIT_NULLTYPE(constvalue.typeinfo);
-                                       }
-                               }
-                               if (!verify_fieldaccess(state, NULL, &constvalue))
-                                       return false;
-                               maythrow = true;
-                               break;
-
-                       case ICMD_GETFIELD:
-                               if (!verify_fieldaccess(state, VAROP(iptr->s1), NULL))
-                                       return false;
-                               maythrow = true;
-                               break;
-
-                       case ICMD_GETSTATIC:
-                               if (!verify_fieldaccess(state, NULL, NULL))
-                                       return false;
-                               maythrow = true;
-                               break;
-
-                               /****************************************/
-                               /* PRIMITIVE ARRAY ACCESS               */
-
-                       case ICMD_ARRAYLENGTH:
-                               if (!TYPEINFO_MAYBE_ARRAY(VAROP(state->iptr->s1)->typeinfo)
-                                               && VAROP(state->iptr->s1)->typeinfo.typeclass.cls != pseudo_class_Arraystub)
-                                       TYPECHECK_VERIFYERROR_bool("illegal instruction: ARRAYLENGTH on non-array");
-                               dv->type = TYPE_INT;
-                               maythrow = true;
-                               break;
-
-                       case ICMD_BALOAD:
-                               if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(VAROP(state->iptr->s1)->typeinfo,ARRAYTYPE_BOOLEAN)
-                                               && !TYPEINFO_MAYBE_PRIMITIVE_ARRAY(VAROP(state->iptr->s1)->typeinfo,ARRAYTYPE_BYTE))
-                                       TYPECHECK_VERIFYERROR_bool("Array type mismatch");
-                               dv->type = TYPE_INT;
-                               maythrow = true;
-                               break;
-                       case ICMD_CALOAD:
-                               if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(VAROP(state->iptr->s1)->typeinfo,ARRAYTYPE_CHAR))
-                                       TYPECHECK_VERIFYERROR_bool("Array type mismatch");
-                               dv->type = TYPE_INT;
-                               maythrow = true;
-                               break;
-                       case ICMD_DALOAD:
-                               if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(VAROP(state->iptr->s1)->typeinfo,ARRAYTYPE_DOUBLE))
-                                       TYPECHECK_VERIFYERROR_bool("Array type mismatch");
-                               dv->type = TYPE_DBL;
-                               maythrow = true;
-                               break;
-                       case ICMD_FALOAD:
-                               if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(VAROP(state->iptr->s1)->typeinfo,ARRAYTYPE_FLOAT))
-                                       TYPECHECK_VERIFYERROR_bool("Array type mismatch");
-                               dv->type = TYPE_FLT;
-                               maythrow = true;
-                               break;
-                       case ICMD_IALOAD:
-                               if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(VAROP(state->iptr->s1)->typeinfo,ARRAYTYPE_INT))
-                                       TYPECHECK_VERIFYERROR_bool("Array type mismatch");
-                               dv->type = TYPE_INT;
-                               maythrow = true;
-                               break;
-                       case ICMD_SALOAD:
-                               if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(VAROP(state->iptr->s1)->typeinfo,ARRAYTYPE_SHORT))
-                                       TYPECHECK_VERIFYERROR_bool("Array type mismatch");
-                               dv->type = TYPE_INT;
-                               maythrow = true;
-                               break;
-                       case ICMD_LALOAD:
-                               if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(VAROP(state->iptr->s1)->typeinfo,ARRAYTYPE_LONG))
-                                       TYPECHECK_VERIFYERROR_bool("Array type mismatch");
-                               dv->type = TYPE_LNG;
-                               maythrow = true;
-                               break;
-
-                       case ICMD_BASTORE:
-                               if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(VAROP(state->iptr->s1)->typeinfo,ARRAYTYPE_BOOLEAN)
-                                               && !TYPEINFO_MAYBE_PRIMITIVE_ARRAY(VAROP(state->iptr->s1)->typeinfo,ARRAYTYPE_BYTE))
-                                       TYPECHECK_VERIFYERROR_bool("Array type mismatch");
-                               maythrow = true;
-                               break;
-                       case ICMD_CASTORE:
-                               if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(VAROP(state->iptr->s1)->typeinfo,ARRAYTYPE_CHAR))
-                                       TYPECHECK_VERIFYERROR_bool("Array type mismatch");
-                               maythrow = true;
-                               break;
-                       case ICMD_DASTORE:
-                               if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(VAROP(state->iptr->s1)->typeinfo,ARRAYTYPE_DOUBLE))
-                                       TYPECHECK_VERIFYERROR_bool("Array type mismatch");
-                               maythrow = true;
-                               break;
-                       case ICMD_FASTORE:
-                               if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(VAROP(state->iptr->s1)->typeinfo,ARRAYTYPE_FLOAT))
-                                       TYPECHECK_VERIFYERROR_bool("Array type mismatch");
-                               maythrow = true;
-                               break;
-                       case ICMD_IASTORE:
-                               if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(VAROP(state->iptr->s1)->typeinfo,ARRAYTYPE_INT))
-                                       TYPECHECK_VERIFYERROR_bool("Array type mismatch");
-                               maythrow = true;
-                               break;
-                       case ICMD_SASTORE:
-                               if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(VAROP(state->iptr->s1)->typeinfo,ARRAYTYPE_SHORT))
-                                       TYPECHECK_VERIFYERROR_bool("Array type mismatch");
-                               maythrow = true;
-                               break;
-                       case ICMD_LASTORE:
-                               if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(VAROP(state->iptr->s1)->typeinfo,ARRAYTYPE_LONG))
-                                       TYPECHECK_VERIFYERROR_bool("Array type mismatch");
-                               maythrow = true;
-                               break;
-
-                       case ICMD_AASTORE:
-                               /* we just check the basic input types and that the           */
-                               /* destination is an array of references. Assignability to    */
-                               /* the actual array must be checked at runtime, each time the */
-                               /* instruction is performed. (See builtin_canstore.)          */
-                               TYPECHECK_ADR_OP(state->iptr->sx.s23.s3);
-                               TYPECHECK_INT_OP(state->iptr->sx.s23.s2);
-                               TYPECHECK_ADR_OP(state->iptr->s1);
-                               if (!TYPEINFO_MAYBE_ARRAY_OF_REFS(VAROP(state->iptr->s1)->typeinfo))
-                                       TYPECHECK_VERIFYERROR_bool("illegal instruction: AASTORE to non-reference array");
-                               maythrow = true;
-                               break;
-
-                       case ICMD_IASTORECONST:
-                               if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(VAROP(state->iptr->s1)->typeinfo, ARRAYTYPE_INT))
-                                       TYPECHECK_VERIFYERROR_bool("Array type mismatch");
-                               maythrow = true;
-                               break;
-
-                       case ICMD_LASTORECONST:
-                               if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(VAROP(state->iptr->s1)->typeinfo, ARRAYTYPE_LONG))
-                                       TYPECHECK_VERIFYERROR_bool("Array type mismatch");
-                               maythrow = true;
-                               break;
-
-                       case ICMD_BASTORECONST:
-                               if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(VAROP(state->iptr->s1)->typeinfo, ARRAYTYPE_BOOLEAN)
-                                               && !TYPEINFO_MAYBE_PRIMITIVE_ARRAY(VAROP(state->iptr->s1)->typeinfo, ARRAYTYPE_BYTE))
-                                       TYPECHECK_VERIFYERROR_bool("Array type mismatch");
-                               maythrow = true;
-                               break;
-
-                       case ICMD_CASTORECONST:
-                               if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(VAROP(state->iptr->s1)->typeinfo, ARRAYTYPE_CHAR))
-                                       TYPECHECK_VERIFYERROR_bool("Array type mismatch");
-                               maythrow = true;
-                               break;
-
-                       case ICMD_SASTORECONST:
-                               if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(VAROP(state->iptr->s1)->typeinfo, ARRAYTYPE_SHORT))
-                                       TYPECHECK_VERIFYERROR_bool("Array type mismatch");
-                               maythrow = true;
-                               break;
-
-                               /****************************************/
-                               /* ADDRESS CONSTANTS                    */
-
-                       case ICMD_ACONST:
-                               if (state->iptr->flags.bits & INS_FLAG_CLASS) {
-                                       /* a java.lang.Class reference */
-                                       TYPEINFO_INIT_JAVA_LANG_CLASS(dv->typeinfo,state->iptr->sx.val.c);
-                               }
-                               else {
-                                       if (state->iptr->sx.val.anyptr == NULL)
-                                               TYPEINFO_INIT_NULLTYPE(dv->typeinfo);
-                                       else {
-                                               /* string constant (or constant for builtin function) */
-                                               typeinfo_init_classinfo(&(dv->typeinfo),class_java_lang_String);
-                                       }
-                               }
-                               dv->type = TYPE_ADR;
-                               break;
-
-                               /****************************************/
-                               /* CHECKCAST AND INSTANCEOF             */
-
-                       case ICMD_CHECKCAST:
-                               TYPECHECK_ADR_OP(state->iptr->s1);
-                               /* returnAddress is not allowed */
-                               if (!TYPEINFO_IS_REFERENCE(VAROP(state->iptr->s1)->typeinfo))
-                                       TYPECHECK_VERIFYERROR_bool("Illegal instruction: CHECKCAST on non-reference");
-
-                               if (!typeinfo_init_class(&(dv->typeinfo),state->iptr->sx.s23.s3.c))
-                                               return false;
-                               dv->type = TYPE_ADR;
-                               maythrow = true;
-                               break;
-
-                       case ICMD_INSTANCEOF:
-                               TYPECHECK_ADR_OP(state->iptr->s1);
-                               /* returnAddress is not allowed */
-                               if (!TYPEINFO_IS_REFERENCE(VAROP(state->iptr->s1)->typeinfo))
-                                       TYPECHECK_VERIFYERROR_bool("Illegal instruction: INSTANCEOF on non-reference");
-                               dv->type = TYPE_INT;
-                               break;
-
-                               /****************************************/
-                               /* BRANCH INSTRUCTIONS                  */
-
-                       case ICMD_INLINE_GOTO:
-                               COPYTYPE(state->iptr->s1,state->iptr->dst);
-                               /* FALLTHROUGH! */
-                       case ICMD_GOTO:
-                               superblockend = true;
-                               /* FALLTHROUGH! */
-                       case ICMD_IFNULL:
-                       case ICMD_IFNONNULL:
-                       case ICMD_IFEQ:
-                       case ICMD_IFNE:
-                       case ICMD_IFLT:
-                       case ICMD_IFGE:
-                       case ICMD_IFGT:
-                       case ICMD_IFLE:
-                       case ICMD_IF_ICMPEQ:
-                       case ICMD_IF_ICMPNE:
-                       case ICMD_IF_ICMPLT:
-                       case ICMD_IF_ICMPGE:
-                       case ICMD_IF_ICMPGT:
-                       case ICMD_IF_ICMPLE:
-                       case ICMD_IF_ACMPEQ:
-                       case ICMD_IF_ACMPNE:
-
-                       case ICMD_IF_LEQ:
-                       case ICMD_IF_LNE:
-                       case ICMD_IF_LLT:
-                       case ICMD_IF_LGE:
-                       case ICMD_IF_LGT:
-                       case ICMD_IF_LLE:
-
-                       case ICMD_IF_LCMPEQ:
-                       case ICMD_IF_LCMPNE:
-                       case ICMD_IF_LCMPLT:
-                       case ICMD_IF_LCMPGE:
-                       case ICMD_IF_LCMPGT:
-                       case ICMD_IF_LCMPLE:
-
-                       case ICMD_IF_FCMPEQ:
-                       case ICMD_IF_FCMPNE:
-
-                       case ICMD_IF_FCMPL_LT:
-                       case ICMD_IF_FCMPL_GE:
-                       case ICMD_IF_FCMPL_GT:
-                       case ICMD_IF_FCMPL_LE:
-
-                       case ICMD_IF_FCMPG_LT:
-                       case ICMD_IF_FCMPG_GE:
-                       case ICMD_IF_FCMPG_GT:
-                       case ICMD_IF_FCMPG_LE:
-
-                       case ICMD_IF_DCMPEQ:
-                       case ICMD_IF_DCMPNE:
-
-                       case ICMD_IF_DCMPL_LT:
-                       case ICMD_IF_DCMPL_GE:
-                       case ICMD_IF_DCMPL_GT:
-                       case ICMD_IF_DCMPL_LE:
-
-                       case ICMD_IF_DCMPG_LT:
-                       case ICMD_IF_DCMPG_GE:
-                       case ICMD_IF_DCMPG_GT:
-                       case ICMD_IF_DCMPG_LE:
-                               TYPECHECK_COUNT(stat_ins_branch);
-
-                               /* propagate stack and variables to the target block */
-                               if (!typestate_reach(state, state->iptr->dst.block,
-                                                                        state->bptr->outvars, jd->var, 
-                                                                        state->bptr->outdepth))
-                                       return false;
-                               break;
-
-                               /****************************************/
-                               /* SWITCHES                             */
-
-                       case ICMD_TABLESWITCH:
-                               TYPECHECK_COUNT(stat_ins_switch);
-
-                               table = iptr->dst.table;
-                               i = iptr->sx.s23.s3.tablehigh
-                                       - iptr->sx.s23.s2.tablelow + 1 + 1; /* plus default */
-
-                               while (--i >= 0) {
-                                       tbptr = (table++)->block;
-                                       LOG2("target %d is block %04d",i,tbptr->nr);
-                                       if (!typestate_reach(state, tbptr, state->bptr->outvars,
-                                                                                jd->var, state->bptr->outdepth))
-                                               return false;
-                               }
-
-                               LOG("switch done");
-                               superblockend = true;
-                               break;
-
-                       case ICMD_LOOKUPSWITCH:
-                               TYPECHECK_COUNT(stat_ins_switch);
+                       /* include generated code for ICMDs verification */
 
-                               lookup = iptr->dst.lookup;
-                               i = iptr->sx.s23.s2.lookupcount;
-
-                               if (!typestate_reach(state,iptr->sx.s23.s3.lookupdefault.block,
-                                                                        state->bptr->outvars, jd->var,
-                                                                        state->bptr->outdepth))
-                                       return false;
-
-                               while (--i >= 0) {
-                                       tbptr = (lookup++)->target.block;
-                                       LOG2("target %d is block %04d",i,tbptr->nr);
-                                       if (!typestate_reach(state, tbptr, state->bptr->outvars,
-                                                               jd->var, state->bptr->outdepth))
-                                               return false;
-                               }
-
-                               LOG("switch done");
-                               superblockend = true;
-                               break;
-
-
-                               /****************************************/
-                               /* ADDRESS RETURNS AND THROW            */
-
-                       case ICMD_ATHROW:
-                               TYPECHECK_COUNT(stat_ins_athrow);
-                               r = typeinfo_is_assignable_to_class(&VAROP(state->iptr->s1)->typeinfo,
-                                               CLASSREF_OR_CLASSINFO(class_java_lang_Throwable));
-                               if (r == typecheck_FALSE)
-                                       TYPECHECK_VERIFYERROR_bool("illegal instruction: ATHROW on non-Throwable");
-                               if (r == typecheck_FAIL)
-                                       return false;
-                               if (r == typecheck_MAYBE) {
-                                       /* the check has to be postponed. we need a patcher */
-                                       TYPECHECK_COUNT(stat_ins_athrow_unresolved);
-                                       iptr->sx.s23.s2.uc = create_unresolved_class(
-                                                       state->m, 
-                                                       /* XXX make this more efficient, use class_java_lang_Throwable
-                                                        * directly */
-                                                       class_get_classref(state->m->class,utf_java_lang_Throwable),
-                                                       &VAROP(state->iptr->s1)->typeinfo);
-                                       iptr->flags.bits |= INS_FLAG_UNRESOLVED;
-                               }
-                               superblockend = true;
-                               maythrow = true;
-                               break;
-
-                       case ICMD_ARETURN:
-                               TYPECHECK_COUNT(stat_ins_areturn);
-                               if (!TYPEINFO_IS_REFERENCE(VAROP(state->iptr->s1)->typeinfo))
-                                       TYPECHECK_VERIFYERROR_bool("illegal instruction: ARETURN on non-reference");
-
-                               if (state->returntype.type != TYPE_ADR
-                                               || (r = typeinfo_is_assignable(&VAROP(state->iptr->s1)->typeinfo,&(state->returntype.typeinfo))) 
-                                                               == typecheck_FALSE)
-                                       TYPECHECK_VERIFYERROR_bool("Return type mismatch");
-                               if (r == typecheck_FAIL)
-                                       return false;
-                               if (r == typecheck_MAYBE) {
-                                       /* the check has to be postponed, we need a patcher */
-                                       TYPECHECK_COUNT(stat_ins_areturn_unresolved);
-                                       iptr->sx.s23.s2.uc = create_unresolved_class(
-                                                       state->m, 
-                                                       state->m->parseddesc->returntype.classref,
-                                                       &VAROP(state->iptr->s1)->typeinfo);
-                                       iptr->flags.bits |= INS_FLAG_UNRESOLVED;
-                               }
-                               goto return_tail;
-
-                               /****************************************/
-                               /* PRIMITIVE RETURNS                    */
-
-                       case ICMD_IRETURN:
-                               if (state->returntype.type != TYPE_INT) TYPECHECK_VERIFYERROR_bool("Return type mismatch");
-                               goto return_tail;
-
-                       case ICMD_LRETURN:
-                               if (state->returntype.type != TYPE_LNG) TYPECHECK_VERIFYERROR_bool("Return type mismatch");
-                               goto return_tail;
-
-                       case ICMD_FRETURN:
-                               if (state->returntype.type != TYPE_FLT) TYPECHECK_VERIFYERROR_bool("Return type mismatch");
-                               goto return_tail;
-
-                       case ICMD_DRETURN:
-                               if (state->returntype.type != TYPE_DBL) TYPECHECK_VERIFYERROR_bool("Return type mismatch");
-                               goto return_tail;
-
-                       case ICMD_RETURN:
-                               if (state->returntype.type != TYPE_VOID) TYPECHECK_VERIFYERROR_bool("Return type mismatch");
-return_tail:
-                               TYPECHECK_COUNT(stat_ins_primitive_return);
-
-                               if (state->initmethod && state->m->class != class_java_lang_Object) {
-                                       /* Check if the 'this' instance has been initialized. */
-                                       LOG("Checking <init> marker");
-                                       if (!typevector_checktype(jd->var,state->numlocals-1,TYPE_INT))
-                                               TYPECHECK_VERIFYERROR_bool("<init> method does not initialize 'this'");
-                               }
-
-                               superblockend = true;
-                               maythrow = true;
-                               break;
-
-                               /****************************************/
-                               /* SUBROUTINE INSTRUCTIONS              */
-
-                       case ICMD_JSR:
-                               LOG("jsr");
-
-                               tbptr = state->iptr->sx.s23.s3.jsrtarget.block;
-                               TYPEINFO_INIT_RETURNADDRESS(dv->typeinfo, state->bptr->next);
-                               if (!typestate_reach(state, tbptr, state->bptr->outvars, jd->var,
-                                                       state->bptr->outdepth))
-                                       return false;
-
-                               superblockend = true;
-                               break;
-
-                       case ICMD_RET:
-                               /* check returnAddress variable */
-                               if (!typevector_checkretaddr(jd->var,state->iptr->s1.varindex))
-                                       TYPECHECK_VERIFYERROR_bool("illegal instruction: RET using non-returnAddress variable");
-
-                               if (!typestate_reach(state, iptr->dst.block, state->bptr->outvars, jd->var,
-                                                       state->bptr->outdepth))
-                                       return false;
-
-                               superblockend = true;
-                               break;
-
-                               /****************************************/
-                               /* INVOKATIONS                          */
-
-                       case ICMD_INVOKEVIRTUAL:
-                       case ICMD_INVOKESPECIAL:
-                       case ICMD_INVOKESTATIC:
-                       case ICMD_INVOKEINTERFACE:
-                               TYPECHECK_COUNT(stat_ins_invoke);
-                               if (!verify_invocation(state))
-                                       return false;
-                               TYPECHECK_COUNTIF(INSTRUCTION_IS_UNRESOLVED(iptr), stat_ins_invoke_unresolved);
-                               maythrow = true;
-                               break;
-
-                               /****************************************/
-                               /* MULTIANEWARRAY                       */
-
-                       case ICMD_MULTIANEWARRAY:
-                               if (!verify_multianewarray(state))
-                                       return false;           
-                               maythrow = true;
-                               break;
-
-                               /****************************************/
-                               /* BUILTINS                             */
-
-                       case ICMD_BUILTIN:
-                               TYPECHECK_COUNT(stat_ins_builtin);
-                               if (!verify_builtin(state))
-                                       return false;
-                               maythrow = true;
-                               break;
-
-                               /****************************************/
-                               /* SIMPLE EXCEPTION THROWING TESTS      */
-
-                       case ICMD_CHECKNULL:
-                               /* CHECKNULL just requires that the stack top
-                                * is an address. This is checked in stack.c */
-                               maythrow = true;
-                               break;
-
-                               /****************************************/
-                               /* INSTRUCTIONS WHICH SHOULD HAVE BEEN  */
-                               /* REPLACED BY OTHER OPCODES            */
-
-#ifdef TYPECHECK_DEBUG
-                       case ICMD_NEW:
-                       case ICMD_NEWARRAY:
-                       case ICMD_ANEWARRAY:
-                       case ICMD_MONITORENTER:
-                       case ICMD_MONITOREXIT:
-                               LOG2("ICMD %d at %d\n", state->iptr->opc, (int)(state->iptr-state->bptr->iinstr));
-                               LOG("Should have been converted to builtin function call.");
-                               TYPECHECK_ASSERT(false);
-                               break;
-#endif
-
-                               /****************************************/
-                               /* UNCHECKED OPERATIONS                 */
-
-                               /*********************************************
-                                * Instructions below...
-                                *     *) don't operate on local variables,
-                                *     *) don't operate on references,
-                                *     *) don't operate on returnAddresses,
-                                *     *) don't affect control flow (except
-                                *        by throwing exceptions).
-                                *
-                                * (These instructions are typechecked in
-                                *  analyse_stack.)
-                                ********************************************/
-
-                               /* Instructions which may throw a runtime exception: */
-
-                       case ICMD_IDIV:
-                       case ICMD_IREM:
-                               dv->type = TYPE_INT;
-                               maythrow = true;
-                               break;
-
-                       case ICMD_LDIV:
-                       case ICMD_LREM:
-                               dv->type = TYPE_LNG;
-                               maythrow = true;
-                               break;
-
-                               /* Instructions which never throw a runtime exception: */
-                       case ICMD_NOP:
-                       case ICMD_POP:
-                       case ICMD_POP2:
-                               break;
-
-                       case ICMD_ICONST:
-                       case ICMD_IADD:
-                       case ICMD_ISUB:
-                       case ICMD_IMUL:
-                       case ICMD_INEG:
-                       case ICMD_IAND:
-                       case ICMD_IOR:
-                       case ICMD_IXOR:
-                       case ICMD_ISHL:
-                       case ICMD_ISHR:
-                       case ICMD_IUSHR:
-                       case ICMD_IMULPOW2:
-                       case ICMD_IDIVPOW2:
-                       case ICMD_IADDCONST:
-                       case ICMD_ISUBCONST:
-                       case ICMD_IMULCONST:
-                       case ICMD_IANDCONST:
-                       case ICMD_IORCONST:
-                       case ICMD_IXORCONST:
-                       case ICMD_ISHLCONST:
-                       case ICMD_ISHRCONST:
-                       case ICMD_IUSHRCONST:
-                       case ICMD_IREMPOW2:
-                       case ICMD_INT2BYTE:
-                       case ICMD_INT2CHAR:
-                       case ICMD_INT2SHORT:
-                       case ICMD_L2I:
-                       case ICMD_F2I:
-                       case ICMD_D2I:
-                       case ICMD_LCMP:
-                       case ICMD_LCMPCONST:
-                       case ICMD_FCMPL:
-                       case ICMD_FCMPG:
-                       case ICMD_DCMPL:
-                       case ICMD_DCMPG:
-                               dv->type = TYPE_INT;
-                               break;
-
-                       case ICMD_LCONST:
-                       case ICMD_LADD:
-                       case ICMD_LSUB:
-                       case ICMD_LMUL:
-                       case ICMD_LNEG:
-                       case ICMD_LAND:
-                       case ICMD_LOR:
-                       case ICMD_LXOR:
-                       case ICMD_LSHL:
-                       case ICMD_LSHR:
-                       case ICMD_LUSHR:
-                       case ICMD_LMULPOW2:
-                       case ICMD_LDIVPOW2:
-                       case ICMD_LADDCONST:
-                       case ICMD_LSUBCONST:
-                       case ICMD_LMULCONST:
-                       case ICMD_LANDCONST:
-                       case ICMD_LORCONST:
-                       case ICMD_LXORCONST:
-                       case ICMD_LSHLCONST:
-                       case ICMD_LSHRCONST:
-                       case ICMD_LUSHRCONST:
-                       case ICMD_LREMPOW2:
-                       case ICMD_I2L:
-                       case ICMD_F2L:
-                       case ICMD_D2L:
-                               dv->type = TYPE_LNG;
-                               break;
-
-                       case ICMD_FCONST:
-                       case ICMD_I2F:
-                       case ICMD_L2F:
-                       case ICMD_D2F:
-                       case ICMD_FADD:
-                       case ICMD_FSUB:
-                       case ICMD_FMUL:
-                       case ICMD_FDIV:
-                       case ICMD_FREM:
-                       case ICMD_FNEG:
-                               dv->type = TYPE_FLT;
-                               break;
-
-                       case ICMD_DCONST:
-                       case ICMD_I2D:
-                       case ICMD_L2D:
-                       case ICMD_F2D:
-                       case ICMD_DADD:
-                       case ICMD_DSUB:
-                       case ICMD_DMUL:
-                       case ICMD_DDIV:
-                       case ICMD_DREM:
-                       case ICMD_DNEG:
-                               dv->type = TYPE_DBL;
-                               break;
-
-                       case ICMD_INLINE_START:
-                       case ICMD_INLINE_END:
-                               break;
-
-                               /* XXX What shall we do with the following ?*/
-                       case ICMD_AASTORECONST:
-                               TYPECHECK_COUNT(stat_ins_unchecked);
-                               break;
-
-                               /****************************************/
+#define TYPECHECK_VARIABLESBASED
+#define STATE  state
+#define METHOD (state->m)
+#define IPTR   iptr
+#define BPTR   (state->bptr)
+#include <typecheck-variablesbased-gen.inc>
+#undef  STATE
+#undef  METHOD
+#undef  IPTR
+#undef  BPTR
+#undef  TYPECHECK_VARIABLESBASED
 
                        default:
-                               LOG2("ICMD %d at %d\n", state->iptr->opc, (int)(state->iptr-state->bptr->iinstr));
+                               LOG1("ICMD %d\n", opcode);
                                TYPECHECK_VERIFYERROR_bool("Missing ICMD code during typecheck");
                }
 
index f81e8a34fdea168f7a8e6671e3bf7ca58f1a9d42..f30e88d28fca9cf46dac46b853b0eaf37e24c5e4 100644 (file)
@@ -26,7 +26,7 @@
 
    Authors: Christian Thalinger
 
-   $Id: typecheck.h 4699 2006-03-28 14:52:32Z twisti $
+   $Id: typecheck.h 5773 2006-10-13 14:34:19Z edwin $
 
 */
 
 
 /* function prototypes ********************************************************/
 
+#if defined(ENABLE_VERIFIER)
 bool typecheck(jitdata *jd);
+bool typecheck_stackbased(jitdata *jd);
+#endif
 
 #endif /* _TYPECHECK_H */
 
index 3179ea7579250e4bc047203ddf602c6bcb93e946..5d3003641b5529c054fe0c7742109e5e415273d3 100644 (file)
@@ -1197,10 +1197,6 @@ bool vm_create(JavaVMInitArgs *vm_args)
                case OPT_INTRP:
 #if defined(ENABLE_INTRP)
                        opt_intrp = true;
-#if defined(ENABLE_VERIFIER)
-                       /* XXX currently the verifier does not work with the interpreter */
-                       opt_verify = false;
-#endif
 #else
                        printf("-Xint option not enabled.\n");
                        exit(1);