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

Subversion Repositories or1k

[/] [or1k/] [tags/] [nog_patch_61/] [or1ksim/] [cuc/] [bb.c] - Diff between revs 1061 and 1062

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

Rev 1061 Rev 1062
Line 49... Line 49...
    PRINTF (" "); print_bb_num (f->bb[i].next[1]);
    PRINTF (" "); print_bb_num (f->bb[i].next[1]);
    PRINTF (" prev "); print_bb_num (f->bb[i].prev[0]);
    PRINTF (" prev "); print_bb_num (f->bb[i].prev[0]);
    PRINTF (" "); print_bb_num (f->bb[i].prev[1]);
    PRINTF (" "); print_bb_num (f->bb[i].prev[1]);
    PRINTF ("\n");
    PRINTF ("\n");
 
 
    if (f->bb[i].insn) print_insns (f->bb[i].insn, f->bb[i].ninsn, 0);
    if (f->bb[i].insn) print_insns (i, f->bb[i].insn, f->bb[i].ninsn, 0);
  }
  }
  if (f->nmsched) {
  if (f->nmsched) {
    PRINTF ("\nmsched: ");
    PRINTF ("\nmsched: ");
    for (i = 0; i < f->nmsched; i++)
    for (i = 0; i < f->nmsched; i++)
      PRINTF ("%x ", f->msched[i]);
      PRINTF ("%x ", f->msched[i]);
Line 346... Line 346...
  cucdebug (1, "cuc_check\n");
  cucdebug (1, "cuc_check\n");
  for (i = 0; i < f->num_bb; i++) {
  for (i = 0; i < f->num_bb; i++) {
    if (!f->bb[i].insn && f->bb[i].ninsn) goto err;
    if (!f->bb[i].insn && f->bb[i].ninsn) goto err;
    for (j = 0; j < f->bb[i].ninsn; j++) {
    for (j = 0; j < f->bb[i].ninsn; j++) {
      cuc_insn *ii = &f->bb[i].insn[j];
      cuc_insn *ii = &f->bb[i].insn[j];
      if ((ii->index == II_CMOV || ii->index == II_ADD) && ii->type & IT_COND) {
      if ((ii->index == II_CMOV || ii->index == II_ADD) && ii->type & IT_COND && ii->opt[0] & OPT_DEST) {
        k = 0;
        k = 0;
        assert (ii->opt[k] & OPT_REGISTER);
        assert (ii->opt[k] & OPT_REGISTER);
        if ((signed)ii->op[k] >= 0 && ii->op[k] != FLAG_REG && ii->op[k] != LRBB_REG) {
        if ((signed)ii->op[k] >= 0 && ii->op[k] != FLAG_REG && ii->op[k] != LRBB_REG) {
          cucdebug (1, "%x %x\n", ii->opt[0], ii->op[0]);
          cucdebug (1, "Invalid dest conditional type opt%x op%x\n", ii->opt[0], ii->op[0]);
          goto err;
          goto err;
        }
        }
      }
      }
      for (k = 0; k < MAX_OPERANDS; k++) {
      for (k = 0; k < MAX_OPERANDS; k++) {
        if (ii->opt[k] & OPT_REF) {
        if (ii->opt[k] & OPT_REF) {
          int t = ii->op[k];
          int t = ii->op[k];
          if (REF_BB(t) >= f->num_bb || REF_I (t) >= f->bb[REF_BB(t)].ninsn
          if (REF_BB(t) >= f->num_bb || REF_I (t) >= f->bb[REF_BB(t)].ninsn
           || (ii->index == II_CMOV || ii->index == II_ADD) && (
           || (ii->index == II_CMOV || ii->index == II_ADD) && (
                (f->INSN(t).type & IT_COND) != (ii->type & IT_COND) && k < 3
                (f->INSN(t).type & IT_COND) != (ii->type & IT_COND) && k < 3
              || !(f->INSN(t).type & IT_COND) && k == 3)) goto err;
              || !(f->INSN(t).type & IT_COND) && k == 3)) {
 
            cucdebug (1, "Conditional misused\n");
 
            goto err;
 
          }
        }
        }
        if (k && ii->opt[k] & OPT_DEST) {
        if (k && ii->opt[k] & OPT_DEST) {
          cucdebug (1, "Destination only allowed for op0!\n");
          cucdebug (1, "Destination only allowed for op0!\n");
          goto err;
          goto err;
        }
        }
      }
      }
    }
    }
  }
  }
  return;
  return;
err:
err:
  cucdebug (1, "Anomaly detected at %x.%x[%i]\n", i, j, k);
  cucdebug (1, "Anomaly detected at [%x_%x].%i\n", i, j, k);
  print_cuc_bb (f, "ANOMALY");
  print_cuc_bb (f, "ANOMALY");
 
  cucdebug (1, "Anomaly detected at [%x_%x].%i\n", i, j, k);
  exit (1);
  exit (1);
}
}
 
 
/* Build basic blocks */
/* Build basic blocks */
void build_bb (cuc_func *f)
void build_bb (cuc_func *f)

powered by: WebSVN 2.1.0

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