*/
+#if 0 /* (needed for code examples in the following comment) */
+/******************************************************************************/
+/* This file contains ICMD-specific code for type checking and type
+ * inference. It is an input file for the verifier generator
+ * (src/vm/jit/verify/generate.pl). The verifier generator creates
+ * code for two compiler passes:
+ * - stack-based type-infering verification
+ * - vasiables-based type-infering verification
+ *
+ * The rest of this file must consist of "case" clauses starting in
+ * the first column. Each clause can be marked with tags like this:
+ *
+ */ case ICMD_CONSTANT: /* {TAG, TAG, ...} */
+/*
+ * This must be on one line. The following tags are defined:
+ * STACKBASED..........use this clause for the stack-based verifier
+ * VARIABLESBASED......use this clause for the variables-based verifier
+ *
+ * If no tag is specified, {STACKBASED,VARIABLESBASED} is assumed.
+ *
+ * There are also tags that can be used inside a clause like this:
+ *
+ */ /* {TAG} */
+/*
+ * The following tags are defined within clauses:
+ * RESULTNOW...........generate code for modelling the stack action
+ * _before_ the user-defined code in the clause
+ * (Default is to model the stack action afterwards.)
+ *
+ * The following macros are pre-defined:
+ *
+ * TYPECHECK_STACKBASED.......iff compiling the stack-based verifier
+ * TYPECHECK_VARIABLESBASED...iff compiling the variables-based verifier
+ *
+/******************************************************************************/
+#endif /* (end #if 0) */
+
+
/* this marker is needed by generate.pl: */
/* {START_OF_CODE} */
CHECK_CAT1(stack[-1]);
break;
-case ICMD_SWAP:
+case ICMD_SWAP: /* {STACKBASED} */
CHECK_CAT1(stack[0]);
CHECK_CAT1(stack[-1]);
COPY_SLOT(temp , stack[-1]);
break;
-case ICMD_DUP:
+case ICMD_DUP: /* {STACKBASED} */
/* we dup 1 */
CHECK_CAT1(stack[0]);
COPY_SLOT(stack[ 0], stack[ 1]);
break;
-case ICMD_DUP_X1:
+case ICMD_DUP_X1: /* {STACKBASED} */
/* we dup 1 */
CHECK_CAT1(stack[0]);
/* we skip 1 */
COPY_SLOT(stack[ 1], stack[-1]);
break;
-case ICMD_DUP_X2:
+case ICMD_DUP_X2: /* {STACKBASED} */
/* we dup 1 */
CHECK_CAT1(stack[0]);
/* we skip either 11 or 2 */
COPY_SLOT(stack[ 1], stack[-2]);
break;
-case ICMD_DUP2:
+case ICMD_DUP2: /* {STACKBASED} */
/* we dup either 11 or 2 */
if (IS_CAT1(stack[0]))
CHECK_CAT1(stack[-1]);
COPY_SLOT(stack[-1], stack[ 1]);
break;
-case ICMD_DUP2_X1:
+case ICMD_DUP2_X1: /* {STACKBASED} */
/* we dup either 11 or 2 */
if (IS_CAT1(stack[0]))
CHECK_CAT1(stack[-1]);
COPY_SLOT(stack[ 1], stack[-2]);
break;
-case ICMD_DUP2_X2:
+case ICMD_DUP2_X2: /* {STACKBASED} */
/* we dup either 11 or 2 */
if (IS_CAT1(stack[0]))
CHECK_CAT1(stack[-1]);
GENERATED /* may use stack[1] ... stack[1] */
GENERATED
GENERATED
-# line 309 "src/vm/jit/verify/icmds.c"
+# line 347 "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 /* may use stack[1] ... stack[1] */
GENERATED
GENERATED
-# line 57 "src/vm/jit/verify/icmds.c"
+# line 95 "src/vm/jit/verify/icmds.c"
GENERATED TYPECHECK_COUNT(stat_ins_aload);
GENERATED
GENERATED /* loading a returnAddress is not allowed */
GENERATED /* may use stack[-1] ... stack[0] */
GENERATED
GENERATED
-# line 220 "src/vm/jit/verify/icmds.c"
+# line 258 "src/vm/jit/verify/icmds.c"
GENERATED if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_INT))
GENERATED VERIFY_ERROR("Array type mismatch");
GENERATED
GENERATED /* may use stack[-1] ... stack[0] */
GENERATED
GENERATED
-# line 230 "src/vm/jit/verify/icmds.c"
+# line 268 "src/vm/jit/verify/icmds.c"
GENERATED if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_LONG))
GENERATED VERIFY_ERROR("Array type mismatch");
GENERATED
GENERATED /* may use stack[-1] ... stack[0] */
GENERATED
GENERATED
-# line 215 "src/vm/jit/verify/icmds.c"
+# line 253 "src/vm/jit/verify/icmds.c"
GENERATED if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_FLOAT))
GENERATED VERIFY_ERROR("Array type mismatch");
GENERATED
GENERATED /* may use stack[-1] ... stack[0] */
GENERATED
GENERATED
-# line 210 "src/vm/jit/verify/icmds.c"
+# line 248 "src/vm/jit/verify/icmds.c"
GENERATED if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_DOUBLE))
GENERATED VERIFY_ERROR("Array type mismatch");
GENERATED
GENERATED /* may use stack[-1] ... stack[0] */
GENERATED
GENERATED
-# line 77 "src/vm/jit/verify/icmds.c"
+# line 115 "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 /* may use stack[-1] ... stack[0] */
GENERATED
GENERATED
-# line 199 "src/vm/jit/verify/icmds.c"
+# line 237 "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 /* may use stack[-1] ... stack[0] */
GENERATED
GENERATED
-# line 205 "src/vm/jit/verify/icmds.c"
+# line 243 "src/vm/jit/verify/icmds.c"
GENERATED if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_CHAR))
GENERATED VERIFY_ERROR("Array type mismatch");
GENERATED
GENERATED /* may use stack[-1] ... stack[0] */
GENERATED
GENERATED
-# line 225 "src/vm/jit/verify/icmds.c"
+# line 263 "src/vm/jit/verify/icmds.c"
GENERATED if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_SHORT))
GENERATED VERIFY_ERROR("Array type mismatch");
GENERATED
GENERATED /* may use stack[0] ... stack[0] */
GENERATED
GENERATED
-# line 70 "src/vm/jit/verify/icmds.c"
+# line 108 "src/vm/jit/verify/icmds.c"
GENERATED TYPEINFO_COPY(OP1->typeinfo, DST->typeinfo);
GENERATED
# line 471 "src/vm/jit/verify/typecheck-stackbased-gen.inc"
GENERATED /* may use stack[-2] ... stack[0] */
GENERATED
GENERATED
-# line 256 "src/vm/jit/verify/icmds.c"
+# line 294 "src/vm/jit/verify/icmds.c"
GENERATED if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_INT))
GENERATED VERIFY_ERROR("Array type mismatch");
GENERATED
GENERATED /* may use stack[-3] ... stack[0] */
GENERATED
GENERATED
-# line 266 "src/vm/jit/verify/icmds.c"
+# line 304 "src/vm/jit/verify/icmds.c"
GENERATED if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_LONG))
GENERATED VERIFY_ERROR("Array type mismatch");
GENERATED
GENERATED /* may use stack[-2] ... stack[0] */
GENERATED
GENERATED
-# line 251 "src/vm/jit/verify/icmds.c"
+# line 289 "src/vm/jit/verify/icmds.c"
GENERATED if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_FLOAT))
GENERATED VERIFY_ERROR("Array type mismatch");
GENERATED
GENERATED /* may use stack[-3] ... stack[0] */
GENERATED
GENERATED
-# line 246 "src/vm/jit/verify/icmds.c"
+# line 284 "src/vm/jit/verify/icmds.c"
GENERATED if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_DOUBLE))
GENERATED VERIFY_ERROR("Array type mismatch");
GENERATED
GENERATED /* may use stack[-2] ... stack[0] */
GENERATED
GENERATED
-# line 271 "src/vm/jit/verify/icmds.c"
+# line 309 "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 /* may use stack[-2] ... stack[0] */
GENERATED
GENERATED
-# line 235 "src/vm/jit/verify/icmds.c"
+# line 273 "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 /* may use stack[-2] ... stack[0] */
GENERATED
GENERATED
-# line 241 "src/vm/jit/verify/icmds.c"
+# line 279 "src/vm/jit/verify/icmds.c"
GENERATED if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_CHAR))
GENERATED VERIFY_ERROR("Array type mismatch");
GENERATED
GENERATED /* may use stack[-2] ... stack[0] */
GENERATED
GENERATED
-# line 261 "src/vm/jit/verify/icmds.c"
+# line 299 "src/vm/jit/verify/icmds.c"
GENERATED if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_SHORT))
GENERATED VERIFY_ERROR("Array type mismatch");
GENERATED
GENERATED /* may use stack[0] ... stack[0] */
GENERATED
GENERATED
-# line 657 "src/vm/jit/verify/icmds.c"
+# line 695 "src/vm/jit/verify/icmds.c"
GENERATED /* we pop 1 */
GENERATED CHECK_CAT1(stack[0]);
GENERATED
GENERATED /* may use stack[-1] ... stack[0] */
GENERATED
GENERATED
-# line 662 "src/vm/jit/verify/icmds.c"
+# line 700 "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 /* may use stack[0] ... stack[1] */
GENERATED
GENERATED
-# line 677 "src/vm/jit/verify/icmds.c"
+# line 715 "src/vm/jit/verify/icmds.c"
GENERATED /* we dup 1 */
GENERATED CHECK_CAT1(stack[0]);
GENERATED
GENERATED /* may use stack[-1] ... stack[1] */
GENERATED
GENERATED
-# line 684 "src/vm/jit/verify/icmds.c"
+# line 722 "src/vm/jit/verify/icmds.c"
GENERATED /* we dup 1 */
GENERATED CHECK_CAT1(stack[0]);
GENERATED /* we skip 1 */
GENERATED /* may use stack[-2] ... stack[1] */
GENERATED
GENERATED
-# line 695 "src/vm/jit/verify/icmds.c"
+# line 733 "src/vm/jit/verify/icmds.c"
GENERATED /* we dup 1 */
GENERATED CHECK_CAT1(stack[0]);
GENERATED /* we skip either 11 or 2 */
GENERATED /* may use stack[-1] ... stack[2] */
GENERATED
GENERATED
-# line 708 "src/vm/jit/verify/icmds.c"
+# line 746 "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 /* may use stack[-2] ... stack[2] */
GENERATED
GENERATED
-# line 717 "src/vm/jit/verify/icmds.c"
+# line 755 "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 /* may use stack[-3] ... stack[2] */
GENERATED
GENERATED
-# line 731 "src/vm/jit/verify/icmds.c"
+# line 769 "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 /* may use stack[-1] ... stack[0] */
GENERATED
GENERATED
-# line 668 "src/vm/jit/verify/icmds.c"
+# line 706 "src/vm/jit/verify/icmds.c"
GENERATED CHECK_CAT1(stack[0]);
GENERATED CHECK_CAT1(stack[-1]);
GENERATED
GENERATED /* may use stack[1] ... stack[1] */
GENERATED
GENERATED
-# line 348 "src/vm/jit/verify/icmds.c"
+# line 386 "src/vm/jit/verify/icmds.c"
GENERATED /* {RESULTNOW} */
GENERATED TYPECHECK_COUNT(stat_ins_branch);
GENERATED
GENERATED /* may use stack[1] ... stack[2] */
GENERATED
GENERATED
-# line 354 "src/vm/jit/verify/icmds.c"
+# line 392 "src/vm/jit/verify/icmds.c"
GENERATED /* {RESULTNOW} */
GENERATED TYPECHECK_COUNT(stat_ins_branch);
GENERATED
GENERATED /* may use stack[1] ... stack[2] */
GENERATED
GENERATED
-# line 360 "src/vm/jit/verify/icmds.c"
+# line 398 "src/vm/jit/verify/icmds.c"
GENERATED /* {RESULTNOW} */
GENERATED TYPECHECK_COUNT(stat_ins_branch);
GENERATED
GENERATED superblockend = true;
GENERATED
GENERATED
-# line 345 "src/vm/jit/verify/icmds.c"
+# line 383 "src/vm/jit/verify/icmds.c"
GENERATED /* {RESULTNOW} */
GENERATED TYPECHECK_COUNT(stat_ins_branch);
GENERATED
GENERATED /* may use stack[0] ... stack[0] */
GENERATED
GENERATED
-# line 541 "src/vm/jit/verify/icmds.c"
+# line 579 "src/vm/jit/verify/icmds.c"
GENERATED /* {RESULTNOW} */
GENERATED tbptr = BLOCK_OF(IPTR->sx.s23.s3.jsrtarget.insindex);
GENERATED
GENERATED superblockend = true;
GENERATED
GENERATED
-# line 560 "src/vm/jit/verify/icmds.c"
+# line 598 "src/vm/jit/verify/icmds.c"
GENERATED /* {RESULTNOW} */
GENERATED CHECK_LOCAL_TYPE(IPTR->s1.varindex, TYPE_RET);
GENERATED if (!TYPEINFO_IS_PRIMITIVE(STATE->locals[IPTR->s1.varindex].typeinfo))
GENERATED /* may use stack[1] ... stack[1] */
GENERATED
GENERATED
-# line 412 "src/vm/jit/verify/icmds.c"
+# line 450 "src/vm/jit/verify/icmds.c"
GENERATED /* {RESULTNOW} */
GENERATED TYPECHECK_COUNT(stat_ins_switch);
GENERATED
GENERATED /* may use stack[1] ... stack[1] */
GENERATED
GENERATED
-# line 428 "src/vm/jit/verify/icmds.c"
+# line 466 "src/vm/jit/verify/icmds.c"
GENERATED /* {RESULTNOW} */
GENERATED TYPECHECK_COUNT(stat_ins_switch);
GENERATED
GENERATED /* may use stack[0] ... stack[0] */
GENERATED
GENERATED
-# line 494 "src/vm/jit/verify/icmds.c"
+# line 532 "src/vm/jit/verify/icmds.c"
GENERATED if (STATE->returntype.type != TYPE_INT)
GENERATED VERIFY_ERROR("Return type mismatch");
GENERATED
GENERATED /* may use stack[-1] ... stack[0] */
GENERATED
GENERATED
-# line 499 "src/vm/jit/verify/icmds.c"
+# line 537 "src/vm/jit/verify/icmds.c"
GENERATED if (STATE->returntype.type != TYPE_LNG)
GENERATED VERIFY_ERROR("Return type mismatch");
GENERATED
GENERATED /* may use stack[0] ... stack[0] */
GENERATED
GENERATED
-# line 504 "src/vm/jit/verify/icmds.c"
+# line 542 "src/vm/jit/verify/icmds.c"
GENERATED if (STATE->returntype.type != TYPE_FLT)
GENERATED VERIFY_ERROR("Return type mismatch");
GENERATED
GENERATED /* may use stack[-1] ... stack[0] */
GENERATED
GENERATED
-# line 509 "src/vm/jit/verify/icmds.c"
+# line 547 "src/vm/jit/verify/icmds.c"
GENERATED if (STATE->returntype.type != TYPE_DBL)
GENERATED VERIFY_ERROR("Return type mismatch");
GENERATED
GENERATED /* may use stack[0] ... stack[0] */
GENERATED
GENERATED
-# line 469 "src/vm/jit/verify/icmds.c"
+# line 507 "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 superblockend = true;
GENERATED
GENERATED
-# line 514 "src/vm/jit/verify/icmds.c"
+# line 552 "src/vm/jit/verify/icmds.c"
GENERATED if (STATE->returntype.type != TYPE_VOID)
GENERATED VERIFY_ERROR("Return type mismatch");
GENERATED
GENERATED /* variable number of outslots! */
GENERATED
GENERATED
-# line 118 "src/vm/jit/verify/icmds.c"
+# line 156 "src/vm/jit/verify/icmds.c"
GENERATED stack = typecheck_stackbased_verify_fieldaccess(STATE, NULL, NULL, stack);
GENERATED if (stack == NULL)
GENERATED EXCEPTION;
GENERATED /* variable number of inslots! */
GENERATED
GENERATED
-# line 100 "src/vm/jit/verify/icmds.c"
+# line 138 "src/vm/jit/verify/icmds.c"
GENERATED CHECK_STACK_DEPTH(1);
GENERATED if (!IS_CAT1(stack[0])) {
GENERATED /* (stack depth >= 2 is guaranteed) */
GENERATED /* variable number of outslots! */
GENERATED
GENERATED
-# line 111 "src/vm/jit/verify/icmds.c"
+# line 149 "src/vm/jit/verify/icmds.c"
GENERATED CHECK_STACK_TYPE(stack[0], TYPE_ADR);
GENERATED stack = typecheck_stackbased_verify_fieldaccess(STATE, stack, NULL, stack-1);
GENERATED if (stack == NULL)
GENERATED /* variable number of inslots! */
GENERATED
GENERATED
-# line 88 "src/vm/jit/verify/icmds.c"
+# line 126 "src/vm/jit/verify/icmds.c"
GENERATED CHECK_STACK_DEPTH(2);
GENERATED if (!IS_CAT1(stack[0])) {
GENERATED CHECK_STACK_DEPTH(3);
GENERATED /* variable number of outslots! */
GENERATED
GENERATED
-# line 583 "src/vm/jit/verify/icmds.c"
+# line 621 "src/vm/jit/verify/icmds.c"
GENERATED TYPECHECK_COUNT(stat_ins_invoke);
GENERATED
GENERATED INSTRUCTION_GET_METHODDESC(IPTR, md);
GENERATED /* may use stack[0] ... stack[0] */
GENERATED
GENERATED
-# line 193 "src/vm/jit/verify/icmds.c"
+# line 231 "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 /* may use stack[0] ... stack[0] */
GENERATED
GENERATED
-# line 448 "src/vm/jit/verify/icmds.c"
+# line 486 "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 /* may use stack[0] ... stack[0] */
GENERATED
GENERATED
-# line 327 "src/vm/jit/verify/icmds.c"
+# line 365 "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 /* may use stack[0] ... stack[0] */
GENERATED
GENERATED
-# line 336 "src/vm/jit/verify/icmds.c"
+# line 374 "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 /* variable number of inslots! */
GENERATED
GENERATED
-# line 621 "src/vm/jit/verify/icmds.c"
+# line 659 "src/vm/jit/verify/icmds.c"
GENERATED if (!typecheck_stackbased_multianewarray(STATE, stack, stackfloor))
GENERATED EXCEPTION;
GENERATED stack -= (IPTR->s1.argcount - 1);
GENERATED /* may use stack[1] ... stack[1] */
GENERATED
GENERATED
-# line 346 "src/vm/jit/verify/icmds.c"
+# line 384 "src/vm/jit/verify/icmds.c"
GENERATED /* {RESULTNOW} */
GENERATED TYPECHECK_COUNT(stat_ins_branch);
GENERATED
GENERATED /* variable number of outslots! */
GENERATED
GENERATED
-# line 637 "src/vm/jit/verify/icmds.c"
+# line 675 "src/vm/jit/verify/icmds.c"
GENERATED TYPECHECK_COUNT(stat_ins_builtin);
GENERATED if (!typecheck_stackbased_verify_builtin(STATE, stack, stackfloor))
GENERATED EXCEPTION;
# define DST VAROP(iptr->dst)
GENERATED
GENERATED
-# line 309 "src/vm/jit/verify/icmds.c"
+# line 347 "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);
# define DST VAROP(iptr->dst)
GENERATED
GENERATED
-# line 48 "src/vm/jit/verify/icmds.c"
+# line 86 "src/vm/jit/verify/icmds.c"
GENERATED TYPECHECK_COUNT(stat_ins_stack);
GENERATED COPYTYPE(IPTR->s1, IPTR->dst);
GENERATED DST->type = OP1->type;
# define DST VAROP(iptr->dst)
GENERATED
GENERATED
-# line 47 "src/vm/jit/verify/icmds.c"
+# line 85 "src/vm/jit/verify/icmds.c"
GENERATED TYPECHECK_COUNT(stat_ins_stack);
GENERATED COPYTYPE(IPTR->s1, IPTR->dst);
GENERATED DST->type = OP1->type;
# define DST VAROP(iptr->dst)
GENERATED
GENERATED
-# line 57 "src/vm/jit/verify/icmds.c"
+# line 95 "src/vm/jit/verify/icmds.c"
GENERATED TYPECHECK_COUNT(stat_ins_aload);
GENERATED
GENERATED /* loading a returnAddress is not allowed */
# define DST VAROP(iptr->dst)
GENERATED
GENERATED
-# line 220 "src/vm/jit/verify/icmds.c"
+# line 258 "src/vm/jit/verify/icmds.c"
GENERATED if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_INT))
GENERATED VERIFY_ERROR("Array type mismatch");
GENERATED
# define DST VAROP(iptr->dst)
GENERATED
GENERATED
-# line 230 "src/vm/jit/verify/icmds.c"
+# line 268 "src/vm/jit/verify/icmds.c"
GENERATED if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_LONG))
GENERATED VERIFY_ERROR("Array type mismatch");
GENERATED
# define DST VAROP(iptr->dst)
GENERATED
GENERATED
-# line 215 "src/vm/jit/verify/icmds.c"
+# line 253 "src/vm/jit/verify/icmds.c"
GENERATED if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_FLOAT))
GENERATED VERIFY_ERROR("Array type mismatch");
GENERATED
# define DST VAROP(iptr->dst)
GENERATED
GENERATED
-# line 210 "src/vm/jit/verify/icmds.c"
+# line 248 "src/vm/jit/verify/icmds.c"
GENERATED if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_DOUBLE))
GENERATED VERIFY_ERROR("Array type mismatch");
GENERATED
# define DST VAROP(iptr->dst)
GENERATED
GENERATED
-# line 77 "src/vm/jit/verify/icmds.c"
+# line 115 "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
# define DST VAROP(iptr->dst)
GENERATED
GENERATED
-# line 199 "src/vm/jit/verify/icmds.c"
+# line 237 "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");
# define DST VAROP(iptr->dst)
GENERATED
GENERATED
-# line 205 "src/vm/jit/verify/icmds.c"
+# line 243 "src/vm/jit/verify/icmds.c"
GENERATED if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_CHAR))
GENERATED VERIFY_ERROR("Array type mismatch");
GENERATED
# define DST VAROP(iptr->dst)
GENERATED
GENERATED
-# line 225 "src/vm/jit/verify/icmds.c"
+# line 263 "src/vm/jit/verify/icmds.c"
GENERATED if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_SHORT))
GENERATED VERIFY_ERROR("Array type mismatch");
GENERATED
# define OP1 VAROP(iptr->s1)
GENERATED
GENERATED
-# line 70 "src/vm/jit/verify/icmds.c"
+# line 108 "src/vm/jit/verify/icmds.c"
GENERATED TYPEINFO_COPY(OP1->typeinfo, DST->typeinfo);
GENERATED
# line 485 "src/vm/jit/verify/typecheck-variablesbased-gen.inc"
# define OP1 VAROP(iptr->s1)
GENERATED
GENERATED
-# line 363 "src/vm/jit/verify/icmds.c"
+# line 401 "src/vm/jit/verify/icmds.c"
GENERATED /* {RESULTNOW} */
GENERATED TYPECHECK_COUNT(stat_ins_branch);
GENERATED
# define OP1 VAROP(iptr->s1)
GENERATED
GENERATED
-# line 256 "src/vm/jit/verify/icmds.c"
+# line 294 "src/vm/jit/verify/icmds.c"
GENERATED if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_INT))
GENERATED VERIFY_ERROR("Array type mismatch");
GENERATED
# define OP1 VAROP(iptr->s1)
GENERATED
GENERATED
-# line 266 "src/vm/jit/verify/icmds.c"
+# line 304 "src/vm/jit/verify/icmds.c"
GENERATED if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_LONG))
GENERATED VERIFY_ERROR("Array type mismatch");
GENERATED
# define OP1 VAROP(iptr->s1)
GENERATED
GENERATED
-# line 251 "src/vm/jit/verify/icmds.c"
+# line 289 "src/vm/jit/verify/icmds.c"
GENERATED if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_FLOAT))
GENERATED VERIFY_ERROR("Array type mismatch");
GENERATED
# define OP1 VAROP(iptr->s1)
GENERATED
GENERATED
-# line 246 "src/vm/jit/verify/icmds.c"
+# line 284 "src/vm/jit/verify/icmds.c"
GENERATED if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_DOUBLE))
GENERATED VERIFY_ERROR("Array type mismatch");
GENERATED
# define OP1 VAROP(iptr->s1)
GENERATED
GENERATED
-# line 271 "src/vm/jit/verify/icmds.c"
+# line 309 "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 */
# define OP1 VAROP(iptr->s1)
GENERATED
GENERATED
-# line 235 "src/vm/jit/verify/icmds.c"
+# line 273 "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");
# define OP1 VAROP(iptr->s1)
GENERATED
GENERATED
-# line 241 "src/vm/jit/verify/icmds.c"
+# line 279 "src/vm/jit/verify/icmds.c"
GENERATED if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_CHAR))
GENERATED VERIFY_ERROR("Array type mismatch");
GENERATED
# define OP1 VAROP(iptr->s1)
GENERATED
GENERATED
-# line 261 "src/vm/jit/verify/icmds.c"
+# line 299 "src/vm/jit/verify/icmds.c"
GENERATED if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_SHORT))
GENERATED VERIFY_ERROR("Array type mismatch");
GENERATED
GENERATED superblockend = true;
GENERATED
GENERATED
-# line 345 "src/vm/jit/verify/icmds.c"
+# line 383 "src/vm/jit/verify/icmds.c"
GENERATED /* {RESULTNOW} */
GENERATED TYPECHECK_COUNT(stat_ins_branch);
GENERATED
# define DST VAROP(iptr->dst)
GENERATED
GENERATED
-# line 536 "src/vm/jit/verify/icmds.c"
+# line 574 "src/vm/jit/verify/icmds.c"
GENERATED TYPEINFO_INIT_RETURNADDRESS(DST->typeinfo, BPTR->next);
GENERATED REACH(IPTR->sx.s23.s3.jsrtarget);
GENERATED
GENERATED superblockend = true;
GENERATED
GENERATED
-# line 553 "src/vm/jit/verify/icmds.c"
+# line 591 "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");
# define OP1 VAROP(iptr->s1)
GENERATED
GENERATED
-# line 412 "src/vm/jit/verify/icmds.c"
+# line 450 "src/vm/jit/verify/icmds.c"
GENERATED /* {RESULTNOW} */
GENERATED TYPECHECK_COUNT(stat_ins_switch);
GENERATED
# define OP1 VAROP(iptr->s1)
GENERATED
GENERATED
-# line 428 "src/vm/jit/verify/icmds.c"
+# line 466 "src/vm/jit/verify/icmds.c"
GENERATED /* {RESULTNOW} */
GENERATED TYPECHECK_COUNT(stat_ins_switch);
GENERATED
# define OP1 VAROP(iptr->s1)
GENERATED
GENERATED
-# line 494 "src/vm/jit/verify/icmds.c"
+# line 532 "src/vm/jit/verify/icmds.c"
GENERATED if (STATE->returntype.type != TYPE_INT)
GENERATED VERIFY_ERROR("Return type mismatch");
GENERATED
# define OP1 VAROP(iptr->s1)
GENERATED
GENERATED
-# line 499 "src/vm/jit/verify/icmds.c"
+# line 537 "src/vm/jit/verify/icmds.c"
GENERATED if (STATE->returntype.type != TYPE_LNG)
GENERATED VERIFY_ERROR("Return type mismatch");
GENERATED
# define OP1 VAROP(iptr->s1)
GENERATED
GENERATED
-# line 504 "src/vm/jit/verify/icmds.c"
+# line 542 "src/vm/jit/verify/icmds.c"
GENERATED if (STATE->returntype.type != TYPE_FLT)
GENERATED VERIFY_ERROR("Return type mismatch");
GENERATED
# define OP1 VAROP(iptr->s1)
GENERATED
GENERATED
-# line 509 "src/vm/jit/verify/icmds.c"
+# line 547 "src/vm/jit/verify/icmds.c"
GENERATED if (STATE->returntype.type != TYPE_DBL)
GENERATED VERIFY_ERROR("Return type mismatch");
GENERATED
# define OP1 VAROP(iptr->s1)
GENERATED
GENERATED
-# line 469 "src/vm/jit/verify/icmds.c"
+# line 507 "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 superblockend = true;
GENERATED
GENERATED
-# line 514 "src/vm/jit/verify/icmds.c"
+# line 552 "src/vm/jit/verify/icmds.c"
GENERATED if (STATE->returntype.type != TYPE_VOID)
GENERATED VERIFY_ERROR("Return type mismatch");
GENERATED
# define DST VAROP(iptr->dst)
GENERATED
GENERATED
-# line 184 "src/vm/jit/verify/icmds.c"
+# line 222 "src/vm/jit/verify/icmds.c"
GENERATED if (!verify_fieldaccess(state, NULL, NULL))
GENERATED return false;
GENERATED maythrow = true;
# define OP1 VAROP(iptr->s1)
GENERATED
GENERATED
-# line 130 "src/vm/jit/verify/icmds.c"
+# line 168 "src/vm/jit/verify/icmds.c"
GENERATED if (!verify_fieldaccess(state, NULL, VAROP(iptr->s1)))
GENERATED return false;
GENERATED maythrow = true;
# define DST VAROP(iptr->dst)
GENERATED
GENERATED
-# line 178 "src/vm/jit/verify/icmds.c"
+# line 216 "src/vm/jit/verify/icmds.c"
GENERATED if (!verify_fieldaccess(state, VAROP(iptr->s1), NULL))
GENERATED return false;
GENERATED maythrow = true;
# define OP1 VAROP(iptr->s1)
GENERATED
GENERATED
-# line 124 "src/vm/jit/verify/icmds.c"
+# line 162 "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;
# define OP1 VAROP(iptr->s1)
GENERATED
GENERATED
-# line 573 "src/vm/jit/verify/icmds.c"
+# line 611 "src/vm/jit/verify/icmds.c"
GENERATED TYPECHECK_COUNT(stat_ins_invoke);
GENERATED if (!verify_invocation(state))
GENERATED EXCEPTION;
# define DST VAROP(iptr->dst)
GENERATED
GENERATED
-# line 193 "src/vm/jit/verify/icmds.c"
+# line 231 "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");
# define OP1 VAROP(iptr->s1)
GENERATED
GENERATED
-# line 448 "src/vm/jit/verify/icmds.c"
+# line 486 "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));
# define DST VAROP(iptr->dst)
GENERATED
GENERATED
-# line 327 "src/vm/jit/verify/icmds.c"
+# line 365 "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");
# define DST VAROP(iptr->dst)
GENERATED
GENERATED
-# line 336 "src/vm/jit/verify/icmds.c"
+# line 374 "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");
# define DST VAROP(iptr->dst)
GENERATED
GENERATED
-# line 616 "src/vm/jit/verify/icmds.c"
+# line 654 "src/vm/jit/verify/icmds.c"
GENERATED if (!verify_multianewarray(STATE))
GENERATED EXCEPTION;
GENERATED
# define OP1 VAROP(iptr->s1)
GENERATED
GENERATED
-# line 280 "src/vm/jit/verify/icmds.c"
+# line 318 "src/vm/jit/verify/icmds.c"
GENERATED if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo, ARRAYTYPE_INT))
GENERATED VERIFY_ERROR("Array type mismatch");
GENERATED
# define OP1 VAROP(iptr->s1)
GENERATED
GENERATED
-# line 285 "src/vm/jit/verify/icmds.c"
+# line 323 "src/vm/jit/verify/icmds.c"
GENERATED if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo, ARRAYTYPE_LONG))
GENERATED VERIFY_ERROR("Array type mismatch");
GENERATED
# define OP1 VAROP(iptr->s1)
GENERATED
GENERATED
-# line 290 "src/vm/jit/verify/icmds.c"
+# line 328 "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");
# define OP1 VAROP(iptr->s1)
GENERATED
GENERATED
-# line 296 "src/vm/jit/verify/icmds.c"
+# line 334 "src/vm/jit/verify/icmds.c"
GENERATED if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo, ARRAYTYPE_CHAR))
GENERATED VERIFY_ERROR("Array type mismatch");
GENERATED
# define OP1 VAROP(iptr->s1)
GENERATED
GENERATED
-# line 301 "src/vm/jit/verify/icmds.c"
+# line 339 "src/vm/jit/verify/icmds.c"
GENERATED if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo, ARRAYTYPE_SHORT))
GENERATED VERIFY_ERROR("Array type mismatch");
GENERATED
GENERATED maythrow = true;
GENERATED
GENERATED
-# line 157 "src/vm/jit/verify/icmds.c"
+# line 195 "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;
# define OP1 VAROP(iptr->s1)
GENERATED
GENERATED
-# line 136 "src/vm/jit/verify/icmds.c"
+# line 174 "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;
# define OP1 VAROP(iptr->s1)
GENERATED
GENERATED
-# line 631 "src/vm/jit/verify/icmds.c"
+# line 669 "src/vm/jit/verify/icmds.c"
GENERATED TYPECHECK_COUNT(stat_ins_builtin);
GENERATED if (!verify_builtin(state))
GENERATED EXCEPTION;