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

Subversion Repositories or1k

[/] [or1k/] [tags/] [nog_patch_34/] [or1ksim/] [cpu/] [or32/] [execute.c] - Diff between revs 1343 and 1344

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

Rev 1343 Rev 1344
Line 32... Line 32...
#include "branch_predict.h"
#include "branch_predict.h"
#include "abstract.h"
#include "abstract.h"
#include "labels.h"
#include "labels.h"
#include "parse.h"
#include "parse.h"
#include "execute.h"
#include "execute.h"
#include "stats.h"
 
#include "except.h"
#include "except.h"
#include "sprs.h"
#include "sprs.h"
#include "sim-config.h"
#include "sim-config.h"
#include "debug_unit.h"
#include "debug_unit.h"
#include "opcode/or32.h"
#include "opcode/or32.h"
#include "immu.h"
#include "immu.h"
#include "dmmu.h"
#include "dmmu.h"
#include "debug.h"
#include "debug.h"
#include "opcode/or32.h"
#include "stats.h"
 
 
/* General purpose registers. */
/* General purpose registers. */
machword reg[MAX_GPRS];
machword reg[MAX_GPRS];
 
 
/* Instruction queue */
/* Instruction queue */
Line 299... Line 298...
  if (config.cpu.dependstats) {
  if (config.cpu.dependstats) {
    /* Dynamic, dependency stats. */
    /* Dynamic, dependency stats. */
    adddstats(icomplet[0].insn_index, current->insn_index, 1, check_depend());
    adddstats(icomplet[0].insn_index, current->insn_index, 1, check_depend());
 
 
    /* Dynamic, functional units stats. */
    /* Dynamic, functional units stats. */
    addfstats(icomplet[0].func_unit, current->func_unit, 1, check_depend());
    addfstats(or32_opcodes[icomplet[0].insn_index].func_unit,
 
              or32_opcodes[current->insn_index].func_unit, 1, check_depend());
 
 
    /* Dynamic, single stats. */
    /* Dynamic, single stats. */
    addsstats(current->insn_index, 1);
    addsstats(current->insn_index, 1);
  }
  }
 
 
  if (config.cpu.superscalar) {
  if (config.cpu.superscalar) {
    if ((current->func_unit == it_branch) || (current->func_unit == it_jump))
    if ((or32_opcodes[current->insn_index].func_unit == it_branch) ||
 
        (or32_opcodes[current->insn_index].func_unit == it_jump))
      runtime.sim.storecycles += 0;
      runtime.sim.storecycles += 0;
 
 
    if (current->func_unit == it_store)
    if (or32_opcodes[current->insn_index].func_unit == it_store)
      runtime.sim.storecycles += 1;
      runtime.sim.storecycles += 1;
 
 
    if (current->func_unit == it_load)
    if (or32_opcodes[current->insn_index].func_unit == it_load)
      runtime.sim.loadcycles += 1;
      runtime.sim.loadcycles += 1;
#if 0        
#if 0        
    if ((icomplet[0].func_unit == it_load) && check_depend())
    if ((icomplet[0].func_unit == it_load) && check_depend())
      runtime.sim.loadcycles++;
      runtime.sim.loadcycles++;
#endif
#endif
 
 
    /* Pseudo multiple issue benchmark */
    /* Pseudo multiple issue benchmark */
    if ((multissue[current->func_unit] < 1) || (check_depend())
    if ((multissue[or32_opcodes[current->insn_index].func_unit] < 1) ||
     || (issued_per_cycle < 1)) {
        (check_depend()) || (issued_per_cycle < 1)) {
      int i;
      int i;
      for (i = 0; i < 20; i++)
      for (i = 0; i < 20; i++)
        multissue[i] = 2;
        multissue[i] = 2;
      issued_per_cycle = 2;
      issued_per_cycle = 2;
      runtime.cpu.supercycles++;
      runtime.cpu.supercycles++;
Line 342... Line 343...
      multissue[it_movimm] = 2;
      multissue[it_movimm] = 2;
      multissue[it_arith] = 2;
      multissue[it_arith] = 2;
      multissue[it_store] = 2;
      multissue[it_store] = 2;
      multissue[it_load] = 2;
      multissue[it_load] = 2;
    }
    }
    multissue[current->func_unit]--;
    multissue[or32_opcodes[current->insn_index].func_unit]--;
    issued_per_cycle--;
    issued_per_cycle--;
  }
  }
 
 
  if (config.cpu.dependstats)
  if (config.cpu.dependstats)
    /* Instruction waits in completition buffer until retired. */
    /* Instruction waits in completition buffer until retired. */
Line 613... Line 614...
#if SIMPLE_EXECUTION
#if SIMPLE_EXECUTION
void l_invalid (struct iqueue_entry *current) {
void l_invalid (struct iqueue_entry *current) {
#else
#else
void l_invalid () {
void l_invalid () {
#endif
#endif
  /* It would be hard to handle this case for statistics; we skip it
 
     since it should not occur anyway:
 
  IFF (config.cpu.dependstats) current->func_unit = it_unknown; */
 
  except_handle(EXCEPT_ILLEGAL, iqueue[0].insn_addr);
  except_handle(EXCEPT_ILLEGAL, iqueue[0].insn_addr);
}
}
 
 
#if !SIMPLE_EXECUTION
#if !SIMPLE_EXECUTION
 
 

powered by: WebSVN 2.1.0

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