Initial revision
This commit is contained in:
156
util/ego/cs/cs_debug.c
Normal file
156
util/ego/cs/cs_debug.c
Normal file
@@ -0,0 +1,156 @@
|
||||
#include <stdio.h>
|
||||
#include "../../../h/em_spec.h"
|
||||
#include "../share/types.h"
|
||||
#include "../share/debug.h"
|
||||
#include "../share/lset.h"
|
||||
#include "cs.h"
|
||||
#include "cs_aux.h"
|
||||
#include "cs_avail.h"
|
||||
#include "cs_entity.h"
|
||||
|
||||
#ifdef VERBOSE
|
||||
|
||||
extern char em_mnem[]; /* The mnemonics of the EM instructions. */
|
||||
|
||||
STATIC showinstr(lnp)
|
||||
line_p lnp;
|
||||
{
|
||||
/* Makes the instruction in `lnp' human readable. Only lines that
|
||||
* can occur in expressions that are going to be eliminated are
|
||||
* properly handled.
|
||||
*/
|
||||
if (INSTR(lnp) < sp_fmnem && INSTR(lnp) > sp_lmnem) {
|
||||
fprintf(stderr,"*** ?\n");
|
||||
return;
|
||||
}
|
||||
|
||||
fprintf(stderr,"%s", &em_mnem[4 * (INSTR(lnp)-sp_fmnem)]);
|
||||
switch (TYPE(lnp)) {
|
||||
case OPNO:
|
||||
break;
|
||||
case OPSHORT:
|
||||
fprintf(stderr," %d", SHORT(lnp));
|
||||
break;
|
||||
case OPOBJECT:
|
||||
fprintf(stderr," %d", OBJ(lnp)->o_id);
|
||||
break;
|
||||
case OPOFFSET:
|
||||
fprintf(stderr," %D", OFFSET(lnp));
|
||||
break;
|
||||
default:
|
||||
fprintf(stderr," ?");
|
||||
break;
|
||||
}
|
||||
fprintf(stderr,"\n");
|
||||
}
|
||||
|
||||
SHOWOCCUR(ocp)
|
||||
occur_p ocp;
|
||||
{
|
||||
/* Shows all instructions in an occurrence. */
|
||||
|
||||
register line_p lnp, next;
|
||||
|
||||
if (verbose_flag) {
|
||||
for (lnp = ocp->oc_lfirst; lnp != (line_p) 0; lnp = next) {
|
||||
next = lnp == ocp->oc_llast ? (line_p) 0 : lnp->l_next;
|
||||
|
||||
showinstr(lnp);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef TRACE
|
||||
|
||||
SHOWAVAIL(avp)
|
||||
avail_p avp;
|
||||
{
|
||||
/* Shows an available expression. */
|
||||
showinstr(avp->av_found);
|
||||
fprintf(stderr,"result %d,", avp->av_result);
|
||||
fprintf(stderr,"occurred %d times\n", Lnrelems(avp->av_occurs) + 1);
|
||||
|
||||
}
|
||||
|
||||
OUTAVAILS()
|
||||
{
|
||||
register avail_p ravp;
|
||||
|
||||
fprintf(stderr,"AVAILABLE EXPRESSIONS\n");
|
||||
|
||||
for (ravp = avails; ravp != (avail_p) 0; ravp = ravp->av_before) {
|
||||
SHOWAVAIL(ravp);
|
||||
fprintf(stderr,"\n");
|
||||
}
|
||||
}
|
||||
|
||||
STATIC char *enkinds[] = {
|
||||
"constant",
|
||||
"local",
|
||||
"external",
|
||||
"indirect",
|
||||
"offsetted",
|
||||
"address of local",
|
||||
"address of external",
|
||||
"address of offsetted",
|
||||
"address of local base",
|
||||
"address of argument base",
|
||||
"procedure",
|
||||
"floating zero",
|
||||
"array element",
|
||||
"local base",
|
||||
"heap pointer",
|
||||
"ignore mask"
|
||||
};
|
||||
|
||||
OUTENTITIES()
|
||||
{
|
||||
register Lindex i;
|
||||
|
||||
fprintf(stderr,"ENTITIES\n");
|
||||
for (i = Lfirst(entities); i != (Lindex) 0; i = Lnext(i, entities)) {
|
||||
register entity_p rep = en_elem(i);
|
||||
|
||||
fprintf(stderr,"%s,", enkinds[rep->en_kind]);
|
||||
fprintf(stderr,"size %D,", rep->en_size);
|
||||
fprintf(stderr,"valno %d,", rep->en_vn);
|
||||
switch (rep->en_kind) {
|
||||
case ENCONST:
|
||||
fprintf(stderr,"$%D\n", rep->en_val);
|
||||
break;
|
||||
case ENLOCAL:
|
||||
case ENALOCAL:
|
||||
fprintf(stderr,"%D(LB)\n", rep->en_loc);
|
||||
break;
|
||||
case ENINDIR:
|
||||
fprintf(stderr,"*%d\n", rep->en_ind);
|
||||
break;
|
||||
case ENOFFSETTED:
|
||||
case ENAOFFSETTED:
|
||||
fprintf(stderr,"%D(%d)\n", rep->en_off, rep->en_base);
|
||||
break;
|
||||
case ENALOCBASE:
|
||||
case ENAARGBASE:
|
||||
fprintf(stderr,"%D levels\n", rep->en_levels);
|
||||
break;
|
||||
case ENARRELEM:
|
||||
fprintf(stderr,"%d[%d], ",rep->en_arbase,rep->en_index);
|
||||
fprintf(stderr,"rom at %d\n", rep->en_adesc);
|
||||
break;
|
||||
}
|
||||
fprintf(stderr,"\n");
|
||||
}
|
||||
}
|
||||
|
||||
/* XXX */
|
||||
OUTTRACE(s, n)
|
||||
char *s;
|
||||
{
|
||||
fprintf(stderr,"trace: ");
|
||||
fprintf(stderr,s, n);
|
||||
fprintf(stderr,"\n");
|
||||
}
|
||||
|
||||
#endif TRACE
|
||||
Reference in New Issue
Block a user