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.
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 $
*/
#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: ");
##
## 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
typecheck-builtins.inc \
typecheck-fields.inc \
typecheck-invoke.inc \
+ typecheck-stackbased.c \
+ typecheck-stackbased-gen.inc \
+ typecheck-variablesbased-gen.inc \
typeinfo.c \
typeinfo.h
--- /dev/null
+#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:
+ */
--- /dev/null
+#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:
+ */
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 $
*/
}
+/* 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.
branch_target_t *table;
lookup_target_t *lookup;
jitdata *jd = state->jd;
- varinfo *dv;
exceptiontable *ex;
varinfo constvalue; /* for PUT*CONST */
constant_FMIref *fieldref;
/* prevent compiler warnings */
- dv = NULL;
/* determine the active exception handlers for this block */
/* XXX could use a faster algorithm with sorted lists or */
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");
}
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 */
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);