Changes: Edwin Steiner
Christian Thalinger
- $Id: stack.c 2240 2005-04-06 13:04:28Z twisti $
+ $Id: stack.c 2333 2005-04-22 13:26:36Z twisti $
*/
b_index = bptr - m->basicblocks;
while (--len >= 0) {
opcode = iptr->opc;
- /* XXX TWISTI: why is this set to NULL here? */
-/* iptr->target = NULL; */
+ /* XXX TWISTI: why is this set to NULL here? */
+ /* iptr->target = NULL; */
/* dolog("p: %04d op: %s stack: %p", iptr - instr, icmd_names[opcode], curstack); */
iptr[2].opc = ICMD_NOP;
iptr[3].opc = ICMD_NOP;
#else
- /* HACK: save compare value in iptr[1].op1 */
- iptr[1].op1 = iptr[0].val.i;
- iptr[0].val.i = tbptr[1].iinstr[0].val.i;
- iptr[1].opc = ICMD_ELSE_ICONST;
- iptr[1].val.i = tbptr[2].iinstr[0].val.i;
- tbptr[1].iinstr[0].opc = ICMD_NOP;
- tbptr[1].iinstr[1].opc = ICMD_NOP;
- tbptr[2].iinstr[0].opc = ICMD_NOP;
+ /* HACK: save compare value in iptr[1].op1 */
+ iptr[1].op1 = iptr[0].val.i;
+ iptr[0].val.i = tbptr[1].iinstr[0].val.i;
+ iptr[1].opc = ICMD_ELSE_ICONST;
+ iptr[1].val.i = tbptr[2].iinstr[0].val.i;
+ tbptr[1].iinstr[0].opc = ICMD_NOP;
+ tbptr[1].iinstr[1].opc = ICMD_NOP;
+ tbptr[2].iinstr[0].opc = ICMD_NOP;
#endif
tbptr[1].flags = BBDELETED;
tbptr[2].flags = BBDELETED;
break;
}
#endif /* CONDITIONAL_LOADCONST */
+
OP1_0(TYPE_INT);
tbptr = m->basicblocks + m->basicblockindex[iptr->op1];
call_returntype = iptr->op1;
goto _callhandling;
- case ICMD_INVOKESPECIAL:
- COUNT(count_pcmd_met);
- {
-#if defined(__X86_64__)
- unresolved_method *um = iptr->target;
-/* if (lm->flags & ACC_STATIC) */
-/* {COUNT(count_check_null);} */
- call_argcount = iptr->op1;
- call_returntype =
- um->methodref->parseddesc.md->returntype.type;
-#else
- methodinfo *lm = iptr->val.a;
- if (lm->flags & ACC_STATIC)
- {COUNT(count_check_null);}
- call_argcount = iptr->op1;
- call_returntype = lm->returntype;
-#endif
-
-/* _callhandling: */
- i = call_argcount;
-
- if (i > rd->arguments_num)
- rd->arguments_num = i;
- REQUIRE(i);
-
- /* Macro in codegen.h */
- SET_ARG_STACKSLOTS;
-
- while (copy) {
- copy->flags |= SAVEDVAR;
- copy = copy->prev;
- }
- i = call_argcount;
-
- POPMANY(i);
- if (call_returntype != TYPE_VOID)
- OP0_1(call_returntype);
- break;
- }
-
case ICMD_INVOKEVIRTUAL:
-/* case ICMD_INVOKESPECIAL: */
+ case ICMD_INVOKESPECIAL:
case ICMD_INVOKEINTERFACE:
case ICMD_INVOKESTATIC:
COUNT(count_pcmd_met);
{
+#if defined(__X86_64__) || defined(__I386__)
+ unresolved_method *um = iptr->target;
+/* if (lm->flags & ACC_STATIC) */
+/* {COUNT(count_check_null);} */
+ call_argcount = iptr->op1;
+ call_returntype = um->methodref->parseddesc.md->returntype.type;
+#else
methodinfo *lm = iptr->val.a;
if (lm->flags & ACC_STATIC)
{COUNT(count_check_null);}
call_argcount = iptr->op1;
call_returntype = lm->returntype;
+#endif
_callhandling:
i = call_argcount;
break;
case ICMD_MULTIANEWARRAY:
+ if (rd->argintreguse < 3)
+ rd->argintreguse = 3;
+
i = iptr->op1;
REQUIRE(i);
#ifdef SPECIALMEMUSE
case ICMD_BASTORECONST:
case ICMD_CASTORECONST:
case ICMD_SASTORECONST:
- printf(" %d", iptr->val.i);
+ printf(" %d (0x%08x)", iptr->val.i, iptr->val.i);
break;
case ICMD_IFEQ_ICONST:
case ICMD_LCONST:
case ICMD_LASTORECONST:
#if defined(__I386__) || defined(__POWERPC__)
- printf(" %lld", iptr->val.l);
+ printf(" %lld (0x%016llx)", iptr->val.l, iptr->val.l);
#else
- printf(" %ld", iptr->val.l);
+ printf(" %ld (0x%016lx)", iptr->val.l, iptr->val.l);
#endif
break;
case ICMD_GETFIELD:
case ICMD_PUTFIELD:
- printf(" %d,", ((fieldinfo *) iptr->val.a)->offset);
- case ICMD_PUTSTATIC:
+#if defined(__X86_64__) || defined(__I386__)
+ if (iptr->val.a)
+ printf(" %d,", ((fieldinfo *) iptr->val.a)->offset);
+ else
+ printf(" NOT RESOLVED,");
+#else
+ printf(" %d,", ((fieldinfo *) iptr->val.a)->offset);
+ printf(" ");
+ utf_display_classname(((fieldinfo *) iptr->val.a)->class->name);
+ printf(".");
+ utf_display(((fieldinfo *) iptr->val.a)->name);
+ printf(" (type ");
+ utf_display(((fieldinfo *) iptr->val.a)->descriptor);
+ printf(")");
+ break;
+#endif
+ case ICMD_PUTSTATIC:
case ICMD_GETSTATIC:
+#if defined(__X86_64__) || defined(__I386__)
+ printf(" ");
+ utf_display_classname(((unresolved_field *) iptr->target)->fieldref->classref->name);
+ printf(".");
+ utf_display(((unresolved_field *) iptr->target)->fieldref->name);
+ printf(" (type ");
+ utf_display(((unresolved_field *) iptr->target)->fieldref->descriptor);
+ printf(")");
+#else
printf(" ");
- utf_fprint(stdout, ((fieldinfo *) iptr->val.a)->class->name);
+ utf_display_classname(((fieldinfo *) iptr->val.a)->class->name);
printf(".");
- utf_fprint(stdout, ((fieldinfo *) iptr->val.a)->name);
+ utf_display(((fieldinfo *) iptr->val.a)->name);
printf(" (type ");
- utf_fprint(stdout, ((fieldinfo *) iptr->val.a)->descriptor);
+ utf_display(((fieldinfo *) iptr->val.a)->descriptor);
printf(")");
+#endif
break;
case ICMD_PUTSTATICCONST:
printf(" %g,", iptr->val.d);
break;
}
+#if defined(__X86_64__)
+ if (iptr->opc == ICMD_PUTFIELDCONST)
+ printf(" NOT RESOLVED,");
+ printf(" ");
+ utf_display_classname(((unresolved_field *) iptr[1].target)->fieldref->classref->name);
+ printf(".");
+ utf_display(((unresolved_field *) iptr[1].target)->fieldref->name);
+ printf(" (type ");
+ utf_display(((unresolved_field *) iptr[1].target)->fieldref->descriptor);
+ printf(")");
+#else
if (iptr->opc == ICMD_PUTFIELDCONST)
printf(" %d,", ((fieldinfo *) iptr[1].val.a)->offset);
printf(" ");
- utf_fprint(stdout, ((fieldinfo *) iptr[1].val.a)->class->name);
+ utf_display_classname(((fieldinfo *) iptr[1].val.a)->class->name);
printf(".");
- utf_fprint(stdout, ((fieldinfo *) iptr[1].val.a)->name);
+ utf_display(((fieldinfo *) iptr[1].val.a)->name);
printf(" (type ");
- utf_fprint(stdout, ((fieldinfo *) iptr[1].val.a)->descriptor);
+ utf_display(((fieldinfo *) iptr[1].val.a)->descriptor);
printf(")");
+#endif
break;
case ICMD_IINC:
case ICMD_NEW:
printf(" ");
- utf_fprint(stdout,
- ((classinfo *) iptr->val.a)->name);
+ utf_display_classname(((classinfo *) iptr->val.a)->name);
break;
case ICMD_NEWARRAY:
case ICMD_ANEWARRAY:
if (iptr->op1) {
printf(" ");
- utf_fprint(stdout,
- ((classinfo *) iptr->val.a)->name);
+ utf_display_classname(((classinfo *) iptr->val.a)->name);
}
break;
printf(" %d ",iptr->op1);
vft = (vftbl_t *)iptr->val.a;
if (vft)
- utf_fprint(stdout,vft->class->name);
+ utf_display_classname(vft->class->name);
else
printf("<null>");
}
case ICMD_CHECKCAST:
case ICMD_INSTANCEOF:
+#if defined(__X86_64__) || defined(__I386__)
+ if (iptr->op1) {
+ classinfo *c = iptr->val.a;
+ if (c) {
+ if (c->flags & ACC_INTERFACE)
+ printf(" (INTERFACE) ");
+ else
+ printf(" (CLASS,%3d) ", c->vftbl->diffval);
+ } else {
+ printf(" (NOT RESOLVED) ");
+ }
+ utf_display_classname(((constant_classref *) iptr->target)->name);
+ }
+ break;
+#endif
if (iptr->op1) {
classinfo *c = iptr->val.a;
if (c->flags & ACC_INTERFACE)
printf(" (INTERFACE) ");
else
printf(" (CLASS,%3d) ", c->vftbl->diffval);
- utf_fprint(stdout, c->name);
+ utf_display_classname(c->name);
}
break;
printf(" %s", icmd_builtin_name((functionptr) iptr->val.fp));
break;
+ case ICMD_INVOKEVIRTUAL:
case ICMD_INVOKESPECIAL:
-#if defined(__X86_64__)
+ case ICMD_INVOKESTATIC:
+ case ICMD_INVOKEINTERFACE:
+#if defined(__X86_64__) || defined(__I386__)
printf(" ");
- utf_fprint(stdout,
- ((unresolved_method *) iptr->target)->methodref->classref->name);
+ utf_display_classname(((unresolved_method *) iptr->target)->methodref->classref->name);
printf(".");
- utf_fprint(stdout,
- ((unresolved_method *) iptr->target)->methodref->name);
+ utf_display(((unresolved_method *) iptr->target)->methodref->name);
+ utf_display(((unresolved_method *) iptr->target)->methodref->descriptor);
#else
printf(" ");
- utf_fprint(stdout,
- ((methodinfo *) iptr->val.a)->class->name);
+ utf_display_classname(((methodinfo *) iptr->val.a)->class->name);
printf(".");
- utf_fprint(stdout,
- ((methodinfo *) iptr->val.a)->name);
+ utf_display(((methodinfo *) iptr->val.a)->name);
+ utf_display(((methodinfo *) iptr->val.a)->descriptor);
#endif
break;
- case ICMD_INVOKEVIRTUAL:
-/* case ICMD_INVOKESPECIAL: */
- case ICMD_INVOKESTATIC:
- case ICMD_INVOKEINTERFACE:
- printf(" ");
- utf_fprint(stdout,
- ((methodinfo *) iptr->val.a)->class->name);
- printf(".");
- utf_fprint(stdout,
- ((methodinfo *) iptr->val.a)->name);
- break;
-
case ICMD_IFEQ:
case ICMD_IFNE:
case ICMD_IFLT: