cs_debug.c 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. #include <stdio.h>
  2. #include "../../../h/em_spec.h"
  3. #include "../share/types.h"
  4. #include "../share/debug.h"
  5. #include "../share/lset.h"
  6. #include "cs.h"
  7. #include "cs_aux.h"
  8. #include "cs_avail.h"
  9. #include "cs_entity.h"
  10. #ifdef VERBOSE
  11. extern char em_mnem[]; /* The mnemonics of the EM instructions. */
  12. STATIC showinstr(lnp)
  13. line_p lnp;
  14. {
  15. /* Makes the instruction in `lnp' human readable. Only lines that
  16. * can occur in expressions that are going to be eliminated are
  17. * properly handled.
  18. */
  19. if (INSTR(lnp) < sp_fmnem && INSTR(lnp) > sp_lmnem) {
  20. fprintf(stderr,"*** ?\n");
  21. return;
  22. }
  23. fprintf(stderr,"%s", &em_mnem[4 * (INSTR(lnp)-sp_fmnem)]);
  24. switch (TYPE(lnp)) {
  25. case OPNO:
  26. break;
  27. case OPSHORT:
  28. fprintf(stderr," %d", SHORT(lnp));
  29. break;
  30. case OPOBJECT:
  31. fprintf(stderr," %d", OBJ(lnp)->o_id);
  32. break;
  33. case OPOFFSET:
  34. fprintf(stderr," %D", OFFSET(lnp));
  35. break;
  36. default:
  37. fprintf(stderr," ?");
  38. break;
  39. }
  40. fprintf(stderr,"\n");
  41. }
  42. SHOWOCCUR(ocp)
  43. occur_p ocp;
  44. {
  45. /* Shows all instructions in an occurrence. */
  46. register line_p lnp, next;
  47. if (verbose_flag) {
  48. for (lnp = ocp->oc_lfirst; lnp != (line_p) 0; lnp = next) {
  49. next = lnp == ocp->oc_llast ? (line_p) 0 : lnp->l_next;
  50. showinstr(lnp);
  51. }
  52. }
  53. }
  54. #endif
  55. #ifdef TRACE
  56. SHOWAVAIL(avp)
  57. avail_p avp;
  58. {
  59. /* Shows an available expression. */
  60. showinstr(avp->av_found);
  61. fprintf(stderr,"result %d,", avp->av_result);
  62. fprintf(stderr,"occurred %d times\n", Lnrelems(avp->av_occurs) + 1);
  63. }
  64. OUTAVAILS()
  65. {
  66. register avail_p ravp;
  67. fprintf(stderr,"AVAILABLE EXPRESSIONS\n");
  68. for (ravp = avails; ravp != (avail_p) 0; ravp = ravp->av_before) {
  69. SHOWAVAIL(ravp);
  70. fprintf(stderr,"\n");
  71. }
  72. }
  73. STATIC char *enkinds[] = {
  74. "constant",
  75. "local",
  76. "external",
  77. "indirect",
  78. "offsetted",
  79. "address of local",
  80. "address of external",
  81. "address of offsetted",
  82. "address of local base",
  83. "address of argument base",
  84. "procedure",
  85. "floating zero",
  86. "array element",
  87. "local base",
  88. "heap pointer",
  89. "ignore mask"
  90. };
  91. OUTENTITIES()
  92. {
  93. register Lindex i;
  94. fprintf(stderr,"ENTITIES\n");
  95. for (i = Lfirst(entities); i != (Lindex) 0; i = Lnext(i, entities)) {
  96. register entity_p rep = en_elem(i);
  97. fprintf(stderr,"%s,", enkinds[rep->en_kind]);
  98. fprintf(stderr,"size %D,", rep->en_size);
  99. fprintf(stderr,"valno %d,", rep->en_vn);
  100. switch (rep->en_kind) {
  101. case ENCONST:
  102. fprintf(stderr,"$%D\n", rep->en_val);
  103. break;
  104. case ENLOCAL:
  105. case ENALOCAL:
  106. fprintf(stderr,"%D(LB)\n", rep->en_loc);
  107. break;
  108. case ENINDIR:
  109. fprintf(stderr,"*%d\n", rep->en_ind);
  110. break;
  111. case ENOFFSETTED:
  112. case ENAOFFSETTED:
  113. fprintf(stderr,"%D(%d)\n", rep->en_off, rep->en_base);
  114. break;
  115. case ENALOCBASE:
  116. case ENAARGBASE:
  117. fprintf(stderr,"%D levels\n", rep->en_levels);
  118. break;
  119. case ENARRELEM:
  120. fprintf(stderr,"%d[%d], ",rep->en_arbase,rep->en_index);
  121. fprintf(stderr,"rom at %d\n", rep->en_adesc);
  122. break;
  123. }
  124. fprintf(stderr,"\n");
  125. }
  126. }
  127. /* XXX */
  128. OUTTRACE(s, n)
  129. char *s;
  130. {
  131. fprintf(stderr,"trace: ");
  132. fprintf(stderr,s, n);
  133. fprintf(stderr,"\n");
  134. }
  135. #endif TRACE