123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- /* $Header$ */
- /*
- * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
- * See the copyright notice in the ACK home directory, in the file "Copyright".
- */
- #include <stdio.h>
- #include <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," %ld", 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 %ld,", rep->en_size);
- fprintf(stderr,"valno %d,", rep->en_vn);
- switch (rep->en_kind) {
- case ENCONST:
- fprintf(stderr,"$%ld\n", rep->en_val);
- break;
- case ENLOCAL:
- case ENALOCAL:
- fprintf(stderr,"%ld(LB)\n", rep->en_loc);
- break;
- case ENINDIR:
- fprintf(stderr,"*%d\n", rep->en_ind);
- break;
- case ENOFFSETTED:
- case ENAOFFSETTED:
- fprintf(stderr,"%ld(%d)\n", rep->en_off, rep->en_base);
- break;
- case ENALOCBASE:
- case ENAARGBASE:
- fprintf(stderr,"%ld 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");
- }
- }
- #endif /* TRACE */
|