OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [tags/] [nog_patch_47/] [or1ksim/] [cuc/] [insn.c] - Diff between revs 996 and 997

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 996 Rev 997
Line 85... Line 85...
void print_insns (cuc_insn *insn, int ninsn, int verbose)
void print_insns (cuc_insn *insn, int ninsn, int verbose)
{
{
  int i, j;
  int i, j;
  for (i = 0; i < ninsn; i++) {
  for (i = 0; i < ninsn; i++) {
    dep_list *l = insn[i].dep;
    dep_list *l = insn[i].dep;
    printf ("%4x%c %-4s ", i, insn[i].index >= 0 ? ':' : '?', cuc_insn_name (&insn[i]));
    PRINTF ("%4x%c %-4s ", i, insn[i].index >= 0 ? ':' : '?', cuc_insn_name (&insn[i]));
    if (verbose) {
    if (verbose) {
      printf ("%-20s insn = %08x, index = %i, type = %04x ",
      PRINTF ("%-20s insn = %08x, index = %i, type = %04x ",
                      insn[i].disasm, insn[i].insn, insn[i].index, insn[i].type);
                      insn[i].disasm, insn[i].insn, insn[i].index, insn[i].type);
    } else printf ("type = %04x ", insn[i].type);
    } else PRINTF ("type = %04x ", insn[i].type);
    for (j = 0; j < MAX_OPERANDS; j++) {
    for (j = 0; j < MAX_OPERANDS; j++) {
      if (insn[i].opt[j] & OPT_DEST) printf ("*");
      if (insn[i].opt[j] & OPT_DEST) PRINTF ("*");
      switch (insn[i].opt[j] & ~OPT_DEST) {
      switch (insn[i].opt[j] & ~OPT_DEST) {
        case OPT_NONE: break;
        case OPT_NONE: break;
        case OPT_CONST: if (insn[i].type & IT_COND && (insn[i].index == II_CMOV
        case OPT_CONST: if (insn[i].type & IT_COND && (insn[i].index == II_CMOV
                         || insn[i].index == II_ADD)) printf ("%x, ", insn[i].op[j]);
                         || insn[i].index == II_ADD)) PRINTF ("%x, ", insn[i].op[j]);
                        else printf ("0x%08x, ", insn[i].op[j]); break;
                        else PRINTF ("0x%08x, ", insn[i].op[j]); break;
        case OPT_JUMP: printf ("J%x ", insn[i].op[j]); break;
        case OPT_JUMP: PRINTF ("J%x ", insn[i].op[j]); break;
        case OPT_REGISTER: printf ("r%i, ", insn[i].op[j]); break;
        case OPT_REGISTER: PRINTF ("r%i, ", insn[i].op[j]); break;
        case OPT_REF: printf ("[%x.%x], ", REF_BB(insn[i].op[j]), REF_I(insn[i].op[j])); break;
        case OPT_REF: PRINTF ("[%x.%x], ", REF_BB(insn[i].op[j]), REF_I(insn[i].op[j])); break;
        case OPT_BB: printf ("BB "); print_bb_num (insn[i].op[j]); printf (", "); break;
        case OPT_BB: PRINTF ("BB "); print_bb_num (insn[i].op[j]); PRINTF (", "); break;
        case OPT_LRBB: printf ("LRBB, "); break;
        case OPT_LRBB: PRINTF ("LRBB, "); break;
        default:
        default:
          fprintf (stderr, "Invalid operand type %s(%x.%x) = %x\n",
          fprintf (stderr, "Invalid operand type %s(%x.%x) = %x\n",
                         cuc_insn_name (&insn[i]), i, j, insn[i].opt[j]);
                         cuc_insn_name (&insn[i]), i, j, insn[i].opt[j]);
          assert (0);
          assert (0);
      }
      }
    }
    }
    if (l) {
    if (l) {
      printf ("\n\tdep:");
      PRINTF ("\n\tdep:");
      while (l) {
      while (l) {
        printf (" [%x.%x],", REF_BB (l->ref), REF_I (l->ref));
        PRINTF (" [%x.%x],", REF_BB (l->ref), REF_I (l->ref));
        l = l->next;
        l = l->next;
      }
      }
    }
    }
    printf ("\n");
    PRINTF ("\n");
  }
  }
}
}
 
 
void add_dep (dep_list **list, int dep)
void add_dep (dep_list **list, int dep)
{
{
Line 861... Line 861...
          change_insn_type (&insn[i], II_NOP);
          change_insn_type (&insn[i], II_NOP);
        }
        }
    }
    }
  }
  }
  if (cuc_debug >= 2) {
  if (cuc_debug >= 2) {
    printf ("saved regs ");
    PRINTF ("saved regs ");
    for (i = 0; i < MAX_REGS; i++) printf ("%i:%i ", i, f->saved_regs[i]);
    for (i = 0; i < MAX_REGS; i++) PRINTF ("%i:%i ", i, f->saved_regs[i]);
    printf ("\n");
    PRINTF ("\n");
  }
  }
  return remove_nops (f);
  return remove_nops (f);
}
}
 
 
/* Determine inputs and outputs */
/* Determine inputs and outputs */
Line 1308... Line 1308...
/* Displays shared instructions */
/* Displays shared instructions */
void print_shared (cuc_func *rf, cuc_shared_item *shared, int nshared)
void print_shared (cuc_func *rf, cuc_shared_item *shared, int nshared)
{
{
  int i, first = 1;
  int i, first = 1;
  for (i = 0; i < nshared; i++) {
  for (i = 0; i < nshared; i++) {
    printf ("%s%s%s", first ? "" : "-", cuc_insn_name (&rf->INSN(shared[i].ref)),
    PRINTF ("%s%s%s", first ? "" : "-", cuc_insn_name (&rf->INSN(shared[i].ref)),
                    shared[i].cmatch ? "!" : "");
                    shared[i].cmatch ? "!" : "");
    first = 0;
    first = 0;
  }
  }
}
}
 
 
Line 1323... Line 1323...
   We can find sequence in reference function, as pointed from "shared" */
   We can find sequence in reference function, as pointed from "shared" */
void csm_gen (cuc_func *f, cuc_func *rf, cuc_shared_item *shared, int nshared)
void csm_gen (cuc_func *f, cuc_func *rf, cuc_shared_item *shared, int nshared)
{
{
  int b, i, j, cnt = 0;
  int b, i, j, cnt = 0;
#warning   some code here (2)
#warning   some code here (2)
  printf ("Replacing: ");
  PRINTF ("Replacing: ");
  print_shared (rf, shared, nshared);
  print_shared (rf, shared, nshared);
 
 
  for (b = 0; b < f->num_bb; b++)
  for (b = 0; b < f->num_bb; b++)
    for (i = 0; i < f->bb[b].ninsn; i++) {
    for (i = 0; i < f->bb[b].ninsn; i++) {
    }
    }
 
 
  printf ("\nFound %i matches.\n", cnt);
  PRINTF ("\nFound %i matches.\n", cnt);
}
}
 
 
 
 
 No newline at end of file
 No newline at end of file

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.