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

Subversion Repositories or1k

[/] [or1k/] [tags/] [nog_patch_68/] [or1ksim/] [cuc/] [insn.c] - Diff between revs 939 and 953

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

Rev 939 Rev 953
Line 166... Line 166...
        }
        }
      }
      }
  }
  }
}
}
 
 
 
/* Inserts n nops before insn 'ref' */
 
void insert_insns (cuc_func *f, int ref, int n)
 
{
 
  int b1, i, j;
 
  int b = REF_BB(ref);
 
  int ins = REF_I(ref);
 
 
 
  assert (b < f->num_bb);
 
  assert (ins <= f->bb[b].ninsn);
 
  assert (f->bb[b].ninsn + n < MAX_INSNS);
 
  print_cuc_bb (f, "PREINSERT");
 
  f->bb[b].insn = (cuc_insn *) realloc (f->bb[b].insn,
 
                                        (f->bb[b].ninsn + n) * sizeof (cuc_insn));
 
 
 
  /* Set up relocations */
 
  for (i = 0; i < f->bb[b].ninsn; i++)
 
    if (i < ins) reloc[i] = i;
 
    else reloc[i] = i + n;
 
 
 
  /* Move instructions, based on relocations */
 
  for (i = f->bb[b].ninsn - 1; i >= 0; i--) f->bb[b].insn[reloc[i]] = f->bb[b].insn[i];
 
  for (i = 0; i < n; i++) change_insn_type (&f->bb[b].insn[ins + i], II_NOP);
 
 
 
  f->bb[b].ninsn += n;
 
  for (b1 = 0; b1 < f->num_bb; b1++) {
 
    dep_list *d = f->bb[b1].mdep;
 
    while (d) {
 
      if (REF_BB (d->ref) == b && REF_I (d->ref) >= ins)
 
        d->ref = REF (b, REF_I (d->ref) + n);
 
      d = d->next;
 
    }
 
    for (i = 0; i < f->bb[b1].ninsn; i++) {
 
      d = f->bb[b1].insn[i].dep;
 
      while (d) {
 
        if (REF_BB (d->ref) == b && REF_I (d->ref) >= ins)
 
          d->ref = REF (b, REF_I (d->ref) + n);
 
        d = d->next;
 
      }
 
      for (j = 0; j < MAX_OPERANDS; j++)
 
        if (f->bb[b1].insn[i].opt[j] & OPT_REF && REF_BB (f->bb[b1].insn[i].op[j]) == b
 
         && REF_I (f->bb[b1].insn[i].op[j]) >= ins)
 
          f->bb[b1].insn[i].op[j] = REF (b, REF_I (f->bb[b1].insn[i].op[j]) + n);
 
    }
 
  }
 
  for (i = 0; i < f->nmsched; i++)
 
    if (REF_BB(f->msched[i]) == b) f->msched[i] = REF (b, reloc[REF_I (f->msched[i])]);
 
  print_cuc_bb (f, "POSTINSERT");
 
  cuc_check (f);
 
}
 
 
/* returns nonzero, if instruction was simplified */
/* returns nonzero, if instruction was simplified */
int apply_edge_condition (cuc_insn *ii)
int apply_edge_condition (cuc_insn *ii)
{
{
  unsigned int c = ii->op[2];
  unsigned int c = ii->op[2];
 
 

powered by: WebSVN 2.1.0

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