void WRdefnod() { register int i; for (i = 0; i < deftop; i++) { dbg_printf("defnod[%d] in B%d = (",defnod[i].DNblock->Bdfoidx,i); WReqn(defnod[i].DNelem); dbg_printf(");\n"); } }
void WRblock(block *b) { if (OPTIMIZER) { if (b && b->Bweight) dbg_printf("B%d: (%p), weight=%d",b->Bdfoidx,b,b->Bweight); else dbg_printf("block %p",b); if (!b) { ferr("\n"); return; } dbg_printf(" flags=x%x weight=%d",b->Bflags,b->Bweight); #if 0 dbg_printf("\tfile %p, line %d",b->Bfilptr,b->Blinnum); #endif dbg_printf(" "); WRBC(b->BC); dbg_printf(" Btry=%p Bindex=%d",b->Btry,b->Bindex); #if SCPP if (b->BC == BCtry) dbg_printf(" catchvar = %p",b->catchvar); #endif dbg_printf("\n"); dbg_printf("\tBpred: "); WRblocklist(b->Bpred); dbg_printf("\tBsucc: "); WRblocklist(b->Bsucc); if (b->Belem) { if (debugf) /* if full output */ elem_print(b->Belem); else { ferr("\t"); WReqn(b->Belem); dbg_printf(";\n"); } } if (b->Bcode) b->Bcode->print(); ferr("\n"); } else { targ_llong *pu; int ncases; list_t bl; assert(b); dbg_printf("********* Basic Block %p ************\n",b); if (b->Belem) elem_print(b->Belem); dbg_printf("block: "); WRBC(b->BC); dbg_printf(" Btry=%p Bindex=%d",b->Btry,b->Bindex); dbg_printf("\n"); dbg_printf("\tBpred:\n"); for (bl = b->Bpred; bl; bl = list_next(bl)) dbg_printf("\t%p\n",list_block(bl)); bl = b->Bsucc; switch (b->BC) { case BCswitch: pu = b->BS.Bswitch; assert(pu); ncases = *pu; dbg_printf("\tncases = %d\n",ncases); dbg_printf("\tdefault: %p\n",list_block(bl)); while (ncases--) { bl = list_next(bl); dbg_printf("\tcase %lld: %p\n",*++pu,list_block(bl)); } break; case BCiftrue: case BCgoto: case BCasm: #if SCPP case BCtry: case BCcatch: #endif case BCjcatch: case BC_try: case BC_filter: case BC_finally: case BC_ret: case BC_except: Lsucc: dbg_printf("\tBsucc:\n"); for ( ; bl; bl = list_next(bl)) dbg_printf("\t%p\n",list_block(bl)); break; case BCret: case BCretexp: case BCexit: break; default: assert(0); } } }
void WReqn(elem *e) { static int nest; if (!e) return; if (OTunary(e->Eoper)) { WROP(e->Eoper); if (OTbinary(e->E1->Eoper)) { nest++; ferr("("); WReqn(e->E1); ferr(")"); nest--; } else WReqn(e->E1); } else if (e->Eoper == OPcomma && !nest) { WReqn(e->E1); dbg_printf(";\n\t"); WReqn(e->E2); } else if (OTbinary(e->Eoper)) { if (OTbinary(e->E1->Eoper)) { nest++; ferr("("); WReqn(e->E1); ferr(")"); nest--; } else WReqn(e->E1); ferr(" "); WROP(e->Eoper); if (e->Eoper == OPstreq) dbg_printf("%ld",(long)type_size(e->ET)); ferr(" "); if (OTbinary(e->E2->Eoper)) { nest++; ferr("("); WReqn(e->E2); ferr(")"); nest--; } else WReqn(e->E2); } else { switch (e->Eoper) { case OPconst: switch (tybasic(e->Ety)) { case TYfloat: dbg_printf("%g <float> ",e->EV.Vfloat); break; case TYdouble: dbg_printf("%g ",e->EV.Vdouble); break; case TYldouble: dbg_printf("%Lg ",e->EV.Vldouble); break; case TYcent: case TYucent: dbg_printf("%lld+%lld ", e->EV.Vcent.msw, e->EV.Vcent.lsw); break; default: dbg_printf("%lld ",el_tolong(e)); break; } break; case OPrelconst: ferr("#"); /* FALL-THROUGH */ case OPvar: dbg_printf("%s",e->EV.sp.Vsym->Sident); if (e->EV.sp.Vsym->Ssymnum != -1) dbg_printf("(%d)",e->EV.sp.Vsym->Ssymnum); if (e->Eoffset != 0) { if (sizeof(e->Eoffset) == 8) dbg_printf(".x%llx", e->Eoffset); else dbg_printf(".%ld",(long)e->Eoffset); } break; case OPasm: case OPstring: dbg_printf("\"%s\"",e->EV.ss.Vstring); if (e->EV.ss.Voffset) dbg_printf("+%ld",(long)e->EV.ss.Voffset); break; case OPmark: case OPgot: case OPframeptr: case OPhalt: WROP(e->Eoper); break; case OPstrthis: break; default: WROP(e->Eoper); assert(0); } } }
void WReqn(elem *e) { static int nest; if (!e) return; if (OTunary(e->Eoper)) { WROP(e->Eoper); if (OTbinary(e->E1->Eoper)) { nest++; ferr("("); WReqn(e->E1); ferr(")"); nest--; } else WReqn(e->E1); } else if (e->Eoper == OPcomma && !nest) { WReqn(e->E1); dbg_printf(";\n\t"); WReqn(e->E2); } else if (OTbinary(e->Eoper)) { if (OTbinary(e->E1->Eoper)) { nest++; ferr("("); WReqn(e->E1); ferr(")"); nest--; } else WReqn(e->E1); ferr(" "); WROP(e->Eoper); if (e->Eoper == OPstreq) dbg_printf("%ld",e->Enumbytes); ferr(" "); if (OTbinary(e->E2->Eoper)) { nest++; ferr("("); WReqn(e->E2); ferr(")"); nest--; } else WReqn(e->E2); } else { switch (e->Eoper) { case OPconst: switch (tybasic(e->Ety)) { case TYfloat: dbg_printf("%g <float> ",e->EV.Vfloat); break; case TYdouble: dbg_printf("%g ",e->EV.Vdouble); break; default: dbg_printf("%lld ",el_tolong(e)); break; } break; case OPrelconst: ferr("#"); /* FALL-THROUGH */ case OPvar: dbg_printf("%s",e->EV.sp.Vsym->Sident); if (e->EV.sp.Vsym->Ssymnum != -1) dbg_printf("(%d)",e->EV.sp.Vsym->Ssymnum); if (e->Eoffset != 0) dbg_printf(".%ld",e->Eoffset); break; case OPasm: #if TARGET_MAC if (e->Eflags & EFsmasm) { if (e->EV.mac.Vasmdat[1]) dbg_printf("\"%c%c\"",e->EV.mac.Vasmdat[0],e->EV.mac.Vasmdat[1]); else dbg_printf("\"%c\"",e->EV.mac.Vasmdat[0]); break; }; #endif case OPstring: dbg_printf("\"%s\"",e->EV.ss.Vstring); if (e->EV.ss.Voffset) dbg_printf("+%ld",e->EV.ss.Voffset); break; case OPmark: case OPgot: case OPframeptr: WROP(e->Eoper); break; case OPstrthis: break; default: WROP(e->Eoper); assert(0); } } }