1 /* vm/jit/show.c - showing the intermediate representation
3 Copyright (C) 1996-2005, 2006 R. Grafl, A. Krall, C. Kruegel,
4 C. Oates, R. Obermaisser, M. Platter, M. Probst, S. Ring,
5 E. Steiner, C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich,
6 J. Wenninger, Institut f. Computersprachen - TU Wien
8 This file is part of CACAO.
10 This program is free software; you can redistribute it and/or
11 modify it under the terms of the GNU General Public License as
12 published by the Free Software Foundation; either version 2, or (at
13 your option) any later version.
15 This program is distributed in the hope that it will be useful, but
16 WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 General Public License for more details.
20 You should have received a copy of the GNU General Public License
21 along with this program; if not, write to the Free Software
22 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
25 Contact: cacao@cacaojvm.org
27 Authors: Andreas Krall
29 Changes: Edwin Steiner
43 #include "mm/memory.h"
44 #include "vm/global.h"
45 #include "vm/options.h"
46 #include "vm/builtin.h"
47 #include "vm/stringlocal.h"
48 #include "vm/jit/jit.h"
49 #include "vm/jit/show.h"
50 #include "vm/jit/disass.h"
52 #if defined(ENABLE_THREADS)
53 #include "threads/native/lock.h"
56 /* global variables ***********************************************************/
58 #if defined(ENABLE_THREADS) && !defined(NDEBUG)
59 static java_objectheader *show_global_lock;
63 /* show_init *******************************************************************
65 Initialized the show subsystem (called by jit_init).
67 *******************************************************************************/
71 #if defined(ENABLE_THREADS)
72 /* initialize the show lock */
74 show_global_lock = NEW(java_objectheader);
76 lock_init_object_lock(show_global_lock);
85 /* show_print_stack ************************************************************
87 Print the stack representation starting with the given top stackptr.
89 NOTE: Currently this function may only be called after register allocation!
91 *******************************************************************************/
94 static void show_print_stack(codegendata *cd, stackptr s)
106 j = cd->maxstack - i;
112 if (s->flags & SAVEDVAR)
113 switch (s->varkind) {
115 if (s->flags & INMEMORY)
116 printf(" M%02d", s->regoff);
117 #ifdef HAS_ADDRESS_REGISTER_FILE
118 else if (s->type == TYPE_ADR)
119 printf(" R%02d", s->regoff);
121 else if (IS_FLT_DBL_TYPE(s->type))
122 printf(" F%02d", s->regoff);
124 #if defined(SUPPORT_COMBINE_INTEGER_REGISTERS)
125 if (IS_2_WORD_TYPE(s->type)) {
126 # if defined(ENABLE_JIT) && defined(ENABLE_DISASSEMBLER)
127 # if defined(ENABLE_INTRP)
129 printf(" %3d/%3d", GET_LOW_REG(s->regoff),
130 GET_HIGH_REG(s->regoff));
133 printf(" %3s/%3s", regs[GET_LOW_REG(s->regoff)],
134 regs[GET_HIGH_REG(s->regoff)]);
136 printf(" %3d/%3d", GET_LOW_REG(s->regoff),
137 GET_HIGH_REG(s->regoff));
141 #endif /* defined(SUPPORT_COMBINE_INTEGER_REGISTERS) */
143 #if defined(ENABLE_JIT) && defined(ENABLE_DISASSEMBLER)
144 # if defined(ENABLE_INTRP)
146 printf(" %3d", s->regoff);
149 printf(" %3s", regs[s->regoff]);
151 printf(" %3d", s->regoff);
157 printf(" I%02d", s->varnum);
160 printf(" L%02d", s->varnum);
163 if (s->varnum == -1) {
165 /* varkind ARGVAR "misused for this special case */
168 else /* "normal" Argvar */
169 printf(" A%02d", s->varnum);
175 switch (s->varkind) {
177 if (s->flags & INMEMORY)
178 printf(" m%02d", s->regoff);
179 #ifdef HAS_ADDRESS_REGISTER_FILE
180 else if (s->type == TYPE_ADR)
181 printf(" r%02d", s->regoff);
183 else if (IS_FLT_DBL_TYPE(s->type))
184 printf(" f%02d", s->regoff);
186 #if defined(SUPPORT_COMBINE_INTEGER_REGISTERS)
187 if (IS_2_WORD_TYPE(s->type)) {
188 # if defined(ENABLE_JIT) && defined(ENABLE_DISASSEMBLER)
189 # if defined(ENABLE_INTRP)
191 printf(" %3d/%3d", GET_LOW_REG(s->regoff),
192 GET_HIGH_REG(s->regoff));
195 printf(" %3s/%3s", regs[GET_LOW_REG(s->regoff)],
196 regs[GET_HIGH_REG(s->regoff)]);
198 printf(" %3d/%3d", GET_LOW_REG(s->regoff),
199 GET_HIGH_REG(s->regoff));
203 #endif /* defined(SUPPORT_COMBINE_INTEGER_REGISTERS) */
205 #if defined(ENABLE_JIT) && defined(ENABLE_DISASSEMBLER)
206 # if defined(ENABLE_INTRP)
208 printf(" %3d", s->regoff);
211 printf(" %3s", regs[s->regoff]);
213 printf(" %3d", s->regoff);
219 printf(" i%02d", s->varnum);
222 printf(" l%02d", s->varnum);
225 if (s->varnum == -1) {
227 /* varkind ARGVAR "misused for this special case */
230 else /* "normal" Argvar */
231 printf(" a%02d", s->varnum);
239 #endif /* !defined(NDEBUG) */
243 static void print_reg(stackptr s) {
245 if (s->flags & SAVEDVAR)
246 switch (s->varkind) {
248 if (s->flags & INMEMORY)
249 printf(" tm%02d", s->regoff);
251 printf(" tr%02d", s->regoff);
254 printf(" s %02d", s->varnum);
257 printf(" l %02d", s->varnum);
260 printf(" a %02d", s->varnum);
263 printf(" ! %02d", s->varnum);
266 switch (s->varkind) {
268 if (s->flags & INMEMORY)
269 printf(" Tm%02d", s->regoff);
271 printf(" Tr%02d", s->regoff);
274 printf(" S %02d", s->varnum);
277 printf(" L %02d", s->varnum);
280 printf(" A %02d", s->varnum);
283 printf(" ? %02d", s->varnum);
294 static char *jit_type[] = {
304 /* show_method *****************************************************************
306 Print the intermediate representation of a method.
308 NOTE: Currently this function may only be called after register allocation!
310 *******************************************************************************/
313 void show_method(jitdata *jd)
324 /* get required compiler data */
331 #if defined(ENABLE_THREADS)
332 /* We need to enter a lock here, since the binutils disassembler
333 is not reentrant-able and we could not read functions printed
336 builtin_monitorenter(show_global_lock);
343 printf("\nBasic blocks: %d\n", m->basicblockcount);
344 printf("Max locals: %d\n", cd->maxlocals);
345 printf("Max stack: %d\n", cd->maxstack);
346 printf("Line number table length: %d\n", m->linenumbercount);
348 printf("Exceptions (Number: %d):\n", cd->exceptiontablelength);
349 for (ex = cd->exceptiontable; ex != NULL; ex = ex->down) {
350 printf(" L%03d ... ", ex->start->debug_nr );
351 printf("L%03d = ", ex->end->debug_nr);
352 printf("L%03d", ex->handler->debug_nr);
353 printf(" (catchtype: ");
354 if (ex->catchtype.any)
355 if (IS_CLASSREF(ex->catchtype))
356 utf_display_printable_ascii_classname(ex->catchtype.ref->name);
358 utf_display_printable_ascii_classname(ex->catchtype.cls->name);
364 printf("Local Table:\n");
365 for (i = 0; i < cd->maxlocals; i++) {
368 #if defined(ENABLE_JIT) && defined(ENABLE_DISASSEMBLER)
369 for (j = TYPE_INT; j <= TYPE_ADR; j++) {
370 # if defined(ENABLE_INTRP)
373 if (rd->locals[i][j].type >= 0) {
374 printf(" (%s) ", jit_type[j]);
375 if (rd->locals[i][j].flags & INMEMORY)
376 printf("m%2d", rd->locals[i][j].regoff);
377 # ifdef HAS_ADDRESS_REGISTER_FILE
378 else if (j == TYPE_ADR)
379 printf("r%02d", rd->locals[i][j].regoff);
381 else if ((j == TYPE_FLT) || (j == TYPE_DBL))
382 printf("f%02d", rd->locals[i][j].regoff);
384 # if defined(SUPPORT_COMBINE_INTEGER_REGISTERS)
385 if (IS_2_WORD_TYPE(j))
387 regs[GET_LOW_REG(rd->locals[i][j].regoff)],
388 regs[GET_HIGH_REG(rd->locals[i][j].regoff)]);
391 printf("%3s", regs[rd->locals[i][j].regoff]);
394 # if defined(ENABLE_INTRP)
398 #endif /* defined(ENABLE_JIT) && defined(ENABLE_DISASSEMBLER) */
404 #if defined(ENABLE_LSRA)
407 #if defined(ENABLE_INTRP)
410 printf("Interface Table:\n");
411 for (i = 0; i < cd->maxstack; i++) {
412 if ((rd->interfaces[i][0].type >= 0) ||
413 (rd->interfaces[i][1].type >= 0) ||
414 (rd->interfaces[i][2].type >= 0) ||
415 (rd->interfaces[i][3].type >= 0) ||
416 (rd->interfaces[i][4].type >= 0)) {
419 #if defined(ENABLE_JIT) && defined(ENABLE_DISASSEMBLER)
420 # if defined(ENABLE_INTRP)
423 for (j = TYPE_INT; j <= TYPE_ADR; j++) {
424 if (rd->interfaces[i][j].type >= 0) {
425 printf(" (%s) ", jit_type[j]);
426 if (rd->interfaces[i][j].flags & SAVEDVAR) {
427 if (rd->interfaces[i][j].flags & INMEMORY)
428 printf("M%2d", rd->interfaces[i][j].regoff);
429 #ifdef HAS_ADDRESS_REGISTER_FILE
430 else if (j == TYPE_ADR)
431 printf("R%02d", rd->interfaces[i][j].regoff);
433 else if ((j == TYPE_FLT) || (j == TYPE_DBL))
434 printf("F%02d", rd->interfaces[i][j].regoff);
436 #if defined(SUPPORT_COMBINE_INTEGER_REGISTERS)
437 if (IS_2_WORD_TYPE(j))
439 regs[GET_LOW_REG(rd->interfaces[i][j].regoff)],
440 regs[GET_HIGH_REG(rd->interfaces[i][j].regoff)]);
443 printf("%3s",regs[rd->interfaces[i][j].regoff]);
447 if (rd->interfaces[i][j].flags & INMEMORY)
448 printf("m%2d", rd->interfaces[i][j].regoff);
449 #ifdef HAS_ADDRESS_REGISTER_FILE
450 else if (j == TYPE_ADR)
451 printf("r%02d", rd->interfaces[i][j].regoff);
453 else if ((j == TYPE_FLT) || (j == TYPE_DBL))
454 printf("f%02d", rd->interfaces[i][j].regoff);
456 #if defined(SUPPORT_COMBINE_INTEGER_REGISTERS)
457 if (IS_2_WORD_TYPE(j))
459 regs[GET_LOW_REG(rd->interfaces[i][j].regoff)],
460 regs[GET_HIGH_REG(rd->interfaces[i][j].regoff)]);
463 printf("%3s",regs[rd->interfaces[i][j].regoff]);
469 # if defined(ENABLE_INTRP)
472 #endif /* defined(ENABLE_JIT) && defined(ENABLE_DISASSEMBLER) */
478 #if defined(ENABLE_INTRP)
481 #if defined(ENABLE_LSRA)
485 if (code->rplpoints) {
486 printf("Replacement Points:\n");
487 replace_show_replacement_points(code);
491 #if defined(ENABLE_DISASSEMBLER)
492 /* show code before first basic block */
494 if (opt_showdisassemble) {
495 u1ptr = (u1 *) ((ptrint) code->mcode + cd->dseglen);
497 for (; u1ptr < (u1 *) ((ptrint) code->mcode + cd->dseglen + m->basicblocks[0].mpc);)
504 /* show code of all basic blocks */
506 for (bptr = m->basicblocks; bptr != NULL; bptr = bptr->next)
507 show_basicblock(jd, bptr);
509 #if defined(ENABLE_DISASSEMBLER)
510 /* show stubs code */
512 if (opt_showdisassemble && opt_showexceptionstubs) {
513 printf("\nException stubs code:\n");
514 printf("Length: %d\n\n", (s4) (code->mcodelength -
515 ((ptrint) cd->dseglen +
516 m->basicblocks[m->basicblockcount].mpc)));
518 u1ptr = (u1 *) ((ptrint) code->mcode + cd->dseglen +
519 m->basicblocks[m->basicblockcount].mpc);
521 for (; (ptrint) u1ptr < ((ptrint) code->mcode + code->mcodelength);)
528 #if defined(ENABLE_THREADS)
529 builtin_monitorexit(show_global_lock);
532 /* finally flush the output */
536 #endif /* !defined(NDEBUG) */
539 /* show_basicblock *************************************************************
541 Print the intermediate representation of a basic block.
543 NOTE: Currently this function may only be called after register allocation!
545 *******************************************************************************/
548 void show_basicblock(jitdata *jd, basicblock *bptr)
558 /* get required compiler data */
564 if (bptr->flags != BBDELETED) {
565 deadcode = bptr->flags <= BBREACHED;
570 for (j = cd->maxstack; j > 0; j--)
573 show_print_stack(cd, bptr->instack);
575 printf("] %sL%03d(flags: %d, bitflags: %01x, next: %d, type: ",
576 (bptr->bitflags & BBFLAG_REPLACEMENT) ? "<REPLACE> " : "",
577 bptr->debug_nr, bptr->flags, bptr->bitflags,
578 (bptr->next) ? (bptr->next->debug_nr) : -1);
580 switch (bptr->type) {
592 printf(", instruction count: %d, predecessors: %d):\n",
593 bptr->icount, bptr->pre_count);
597 for (i = 0; i < bptr->icount; i++, iptr++) {
601 for (j = cd->maxstack; j > 0; j--)
604 show_print_stack(cd, iptr->dst);
606 printf("] %5d (line: %5d) ", i, iptr->line);
608 show_icmd(iptr, deadcode);
612 #if defined(ENABLE_DISASSEMBLER)
613 if (opt_showdisassemble && (!deadcode)) {
615 u1ptr = (u1 *) ((ptrint) code->mcode + cd->dseglen + bptr->mpc);
617 if (bptr->next != NULL) {
618 for (; u1ptr < (u1 *) ((ptrint) code->mcode + cd->dseglen + bptr->next->mpc);)
623 for (; u1ptr < (u1 *) ((ptrint) code->mcode + code->mcodelength);)
631 #endif /* !defined(NDEBUG) */
634 /* show_icmd *******************************************************************
636 Print the intermediate representation of an instruction.
638 NOTE: Currently this function may only be called after register allocation!
640 *******************************************************************************/
643 void show_icmd(instruction *iptr, bool deadcode)
652 constant_classref *cr;
653 unresolved_field *uf;
655 /* get the opcode and the condition */
657 opcode = iptr->opc & ICMD_OPCODE_MASK;
658 condition = (iptr->opc & ICMD_CONDITION_MASK) >> 8;
660 printf("%s", icmd_names[opcode]);
662 /* Print the condition for conditional instructions. */
665 printf(" (condition: %s)", icmd_names[condition]);
679 case ICMD_IUSHRCONST:
682 case ICMD_LUSHRCONST:
684 case ICMD_IASTORECONST:
685 case ICMD_BASTORECONST:
686 case ICMD_CASTORECONST:
687 case ICMD_SASTORECONST:
688 printf(" %d (0x%08x)", iptr->val.i, iptr->val.i);
691 case ICMD_IFEQ_ICONST:
692 case ICMD_IFNE_ICONST:
693 case ICMD_IFLT_ICONST:
694 case ICMD_IFGE_ICONST:
695 case ICMD_IFGT_ICONST:
696 case ICMD_IFLE_ICONST:
697 printf(" %d, %d (0x%08x)", iptr[1].op1, iptr->val.i, iptr->val.i);
700 case ICMD_ELSE_ICONST:
701 printf(" %d (0x%08x)", iptr->val.i, iptr->val.i);
714 case ICMD_LASTORECONST:
715 #if SIZEOF_VOID_P == 4
716 printf(" %lld (0x%016llx)", iptr->val.l, iptr->val.l);
718 printf(" %ld (0x%016lx)", iptr->val.l, iptr->val.l);
723 printf(" %f (0x%08x)", iptr->val.f, iptr->val.i);
727 #if SIZEOF_VOID_P == 4
728 printf(" %g (0x%016llx)", iptr->val.d, iptr->val.l);
730 printf(" %g (0x%016lx)", iptr->val.d, iptr->val.l);
735 case ICMD_AASTORECONST:
736 /* check if this is a constant string or a class reference */
738 if (ICMD_ACONST_IS_CLASS(iptr)) {
739 if (INSTRUCTION_IS_UNRESOLVED(iptr)) {
740 printf(" (NOT RESOLVED) classref = ");
741 class_classref_print(ICMD_ACONST_UNRESOLVED_CLASSREF(iptr));
745 class_print(ICMD_ACONST_RESOLVED_CLASSINFO(iptr));
749 printf(" %p", iptr->val.a);
752 printf(", String = \"");
753 utf_display_printable_ascii(javastring_toutf(iptr->val.a, false));
761 if (INSTRUCTION_IS_UNRESOLVED(iptr)) {
762 uf = INSTRUCTION_UNRESOLVED_FIELD(iptr);
763 printf(" (NOT RESOLVED) ");
765 field_fieldref_print(uf->fieldref);
768 f = INSTRUCTION_RESOLVED_FIELDINFO(iptr);
769 printf(" %d, ", f->offset);
777 if (INSTRUCTION_IS_UNRESOLVED(iptr)) {
778 uf = INSTRUCTION_UNRESOLVED_FIELD(iptr);
779 printf(" (NOT RESOLVED) ");
781 field_fieldref_print(uf->fieldref);
784 f = INSTRUCTION_RESOLVED_FIELDINFO(iptr);
785 if (!CLASS_IS_OR_ALMOST_INITIALIZED(f->class))
786 printf(" (NOT INITIALIZED) ");
794 case ICMD_PUTSTATICCONST:
795 case ICMD_PUTFIELDCONST:
796 switch (iptr[1].op1) {
798 printf(" %d (0x%08x),", iptr->val.i, iptr->val.i);
801 #if SIZEOF_VOID_P == 4
802 printf(" %lld (0x%016llx),", iptr->val.l, iptr->val.l);
804 printf(" %ld (0x%016lx),", iptr->val.l, iptr->val.l);
808 printf(" %p,", iptr->val.a);
811 printf(" %g (0x%08x),", iptr->val.f, iptr->val.i);
814 #if SIZEOF_VOID_P == 4
815 printf(" %g (0x%016llx),", iptr->val.d, iptr->val.l);
817 printf(" %g (0x%016lx),", iptr->val.d, iptr->val.l);
822 if (INSTRUCTION_IS_UNRESOLVED(iptr + 1)) {
823 uf = INSTRUCTION_UNRESOLVED_FIELD(iptr + 1);
824 printf(" (NOT RESOLVED) ");
825 field_fieldref_print(uf->fieldref);
828 f = INSTRUCTION_RESOLVED_FIELDINFO(iptr + 1);
829 if ((iptr->opc == ICMD_PUTSTATICCONST) &&
830 !CLASS_IS_OR_ALMOST_INITIALIZED(f->class))
831 printf(" (NOT INITIALIZED), ");
833 printf(" %d, ", f->offset);
839 printf(" %d + %d", iptr->op1, iptr->val.i);
874 printf(" %d", iptr->op1);
880 utf_display_printable_ascii_classname(c->name);
916 utf_display_printable_ascii_classname(c->name);
920 case ICMD_MULTIANEWARRAY:
925 printf(" (NOT RESOLVED) %d ", iptr->op1);
926 utf_display_printable_ascii(cr->name);
929 printf(" %d ", iptr->op1);
930 utf_display_printable_ascii_classname(c->name);
935 case ICMD_INSTANCEOF:
940 if (c->flags & ACC_INTERFACE)
941 printf(" (INTERFACE) ");
943 printf(" (CLASS,%3d) ", c->vftbl->diffval);
945 printf(" (NOT RESOLVED) ");
946 utf_display_printable_ascii_classname(cr->name);
949 case ICMD_INLINE_START:
950 case ICMD_INLINE_END:
952 insinfo_inline *insinfo = (insinfo_inline *) iptr->target;
954 method_print(insinfo->method);
959 printf(" %s", ((builtintable_entry *) iptr->val.a)->name);
962 case ICMD_INVOKEVIRTUAL:
963 case ICMD_INVOKESPECIAL:
964 case ICMD_INVOKESTATIC:
965 case ICMD_INVOKEINTERFACE:
967 constant_FMIref *mref;
969 if (INSTRUCTION_IS_UNRESOLVED(iptr)) {
970 printf(" (NOT RESOLVED) ");
971 mref = INSTRUCTION_UNRESOLVED_METHOD(iptr)->methodref;
975 mref = INSTRUCTION_RESOLVED_FMIREF(iptr);
977 method_methodref_print(mref);
987 printf(" %d (0x%08x)", iptr->val.i, iptr->val.i);
989 if ((iptr->opc & ICMD_CONDITION_MASK) == 0) {
990 if (deadcode || !iptr->target)
991 printf(" op1=%d", iptr->op1);
993 printf(" L%03d (%p)", ((basicblock *) iptr->target)->debug_nr, iptr->target);
1003 #if SIZEOF_VOID_P == 4
1004 printf(" %lld (%016llx)", iptr->val.l, iptr->val.l);
1006 printf(" %ld (%016lx)", iptr->val.l, iptr->val.l);
1009 if ((iptr->opc & ICMD_CONDITION_MASK) == 0) {
1010 if (deadcode || !iptr->target)
1011 printf(" op1=%d", iptr->op1);
1013 printf(" L%03d", ((basicblock *) iptr->target)->debug_nr);
1019 case ICMD_INLINE_GOTO:
1020 if (deadcode || !iptr->target)
1021 printf(" op1=%d", iptr->op1);
1023 printf(" L%03d (%p)", ((basicblock *) iptr->target)->debug_nr,iptr->target);
1027 case ICMD_IFNONNULL:
1028 case ICMD_IF_ICMPEQ:
1029 case ICMD_IF_ICMPNE:
1030 case ICMD_IF_ICMPLT:
1031 case ICMD_IF_ICMPGE:
1032 case ICMD_IF_ICMPGT:
1033 case ICMD_IF_ICMPLE:
1035 case ICMD_IF_LCMPEQ:
1036 case ICMD_IF_LCMPNE:
1037 case ICMD_IF_LCMPLT:
1038 case ICMD_IF_LCMPGE:
1039 case ICMD_IF_LCMPGT:
1040 case ICMD_IF_LCMPLE:
1042 case ICMD_IF_FCMPEQ:
1043 case ICMD_IF_FCMPNE:
1045 case ICMD_IF_FCMPL_LT:
1046 case ICMD_IF_FCMPL_GE:
1047 case ICMD_IF_FCMPL_GT:
1048 case ICMD_IF_FCMPL_LE:
1050 case ICMD_IF_FCMPG_LT:
1051 case ICMD_IF_FCMPG_GE:
1052 case ICMD_IF_FCMPG_GT:
1053 case ICMD_IF_FCMPG_LE:
1055 case ICMD_IF_DCMPEQ:
1056 case ICMD_IF_DCMPNE:
1058 case ICMD_IF_DCMPL_LT:
1059 case ICMD_IF_DCMPL_GE:
1060 case ICMD_IF_DCMPL_GT:
1061 case ICMD_IF_DCMPL_LE:
1063 case ICMD_IF_DCMPG_LT:
1064 case ICMD_IF_DCMPG_GE:
1065 case ICMD_IF_DCMPG_GT:
1066 case ICMD_IF_DCMPG_LE:
1068 case ICMD_IF_ACMPEQ:
1069 case ICMD_IF_ACMPNE:
1070 if (!(iptr->opc & ICMD_CONDITION_MASK)) {
1071 if (deadcode || !iptr->target)
1072 printf(" op1=%d", iptr->op1);
1074 printf(" L%03d (%p)", ((basicblock *) iptr->target)->debug_nr,iptr->target);
1078 case ICMD_TABLESWITCH:
1079 s4ptr = (s4*)iptr->val.a;
1081 if (deadcode || !iptr->target) {
1082 printf(" %d;", *s4ptr);
1085 tptr = (void **) iptr->target;
1086 printf(" L%03d;", ((basicblock *) *tptr)->debug_nr);
1090 s4ptr++; /* skip default */
1091 j = *s4ptr++; /* low */
1092 j = *s4ptr++ - j; /* high */
1094 if (deadcode || !*tptr)
1095 printf(" %d", *s4ptr++);
1097 printf(" L%03d", ((basicblock *) *tptr)->debug_nr);
1104 case ICMD_LOOKUPSWITCH:
1105 s4ptr = (s4*)iptr->val.a;
1107 if (deadcode || !iptr->target) {
1108 printf(" %d;", *s4ptr);
1111 tptr = (void **) iptr->target;
1112 printf(" L%03d;", ((basicblock *) *tptr)->debug_nr);
1115 s4ptr++; /* default */
1116 j = *s4ptr++; /* count */
1119 if (deadcode || !*tptr) {
1120 s4ptr++; /* skip value */
1121 printf(" %d",*s4ptr++);
1124 printf(" L%03d", ((basicblock *) *tptr)->debug_nr);
1132 printf(" (NOT RESOLVED) Class = \"");
1133 utf_display_printable_ascii(((unresolved_class *) iptr->val.a)->classref->name);
1138 #endif /* !defined(NDEBUG) */
1141 * These are local overrides for various environment variables in Emacs.
1142 * Please do not remove this and leave it at the end of the file, where
1143 * Emacs will automagically detect them.
1144 * ---------------------------------------------------------------------
1147 * indent-tabs-mode: t
1151 * vim:noexpandtab:sw=4:ts=4: