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

Subversion Repositories or1k

[/] [or1k/] [tags/] [stable_0_2_0_rc3/] [or1ksim/] [cpu/] [common/] [execute.h] - Diff between revs 1481 and 1547

Go to most recent revision | Only display areas with differences | Details | Blame | View Log

Rev 1481 Rev 1547
/* execute.h -- Header file for architecture dependent execute.c
/* execute.h -- Header file for architecture dependent execute.c
   Copyright (C) 1999 Damjan Lampret, lampret@opencores.org
   Copyright (C) 1999 Damjan Lampret, lampret@opencores.org
 
 
This file is part of OpenRISC 1000 Architectural Simulator.
This file is part of OpenRISC 1000 Architectural Simulator.
 
 
This program is free software; you can redistribute it and/or modify
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
(at your option) any later version.
 
 
This program is distributed in the hope that it will be useful,
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.
GNU General Public License for more details.
 
 
You should have received a copy of the GNU General Public License
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
 
 
#if DYNAMIC_EXECUTION
#if DYNAMIC_EXECUTION
#include "dyn_rec.h"
#include "dyn_rec.h"
#endif
#endif
 
 
struct cpu_state {
struct cpu_state {
  /* General purpose registers. */
  /* General purpose registers. */
  uorreg_t reg[MAX_GPRS];
  uorreg_t reg[MAX_GPRS];
 
 
  /* Sprs */
  /* Sprs */
  uorreg_t sprs[MAX_SPRS];
  uorreg_t sprs[MAX_SPRS];
 
 
  /* Effective address of instructions that have an effective address.  This is
  /* Effective address of instructions that have an effective address.  This is
   * only used to get dump_exe_log correct */
   * only used to get dump_exe_log correct */
  oraddr_t insn_ea;
  oraddr_t insn_ea;
 
 
  /* Is current instruction in execution in a delay slot? */
  /* Is current instruction in execution in a delay slot? */
  int delay_insn;
  int delay_insn;
 
 
  /* Program counter (and translated PC) */
  /* Program counter (and translated PC) */
  oraddr_t pc;
  oraddr_t pc;
 
 
  /* Delay instruction effective address register */
  /* Delay instruction effective address register */
  oraddr_t pc_delay;
  oraddr_t pc_delay;
 
 
  /* Decoding of the just executed instruction.  Only used in analysis(). */
  /* Decoding of the just executed instruction.  Only used in analysis(). */
  struct iqueue_entry iqueue;
  struct iqueue_entry iqueue;
 
 
  /* decoding of the instruction that was executed before this one.  Only used
  /* decoding of the instruction that was executed before this one.  Only used
   * in analysis(). */
   * in analysis(). */
  struct iqueue_entry icomplet;
  struct iqueue_entry icomplet;
 
 
#if DYNAMIC_EXECUTION
#if DYNAMIC_EXECUTION
  /* Current page in execution */
  /* Current page in execution */
  struct dyn_page *curr_page;
  struct dyn_page *curr_page;
 
 
  /* Linked list of recompiled pages with their status */
  /* Pointers to recompiled pages */
  struct dyn_page *dyn_pages;
  struct dyn_page **dyn_pages;
 
 
  /* Micro operation queue.  Only used to speed up recompile_page */
  /* Micro operation queue.  Only used to speed up recompile_page */
  struct op_queue *opqs;
  struct op_queue *opqs;
 
 
  /* Set if all temporaries are stored */
  /* Set if all temporaries are stored */
  int ts_current;
  int ts_current;
 
 
  /* The contents of the temporaries.  Only used in except_handle */
  /* The contents of the temporaries.  Only used in except_handle */
  uorreg_t t0;
  uorreg_t t0;
  uorreg_t t1;
  uorreg_t t1;
  uorreg_t t2;
  uorreg_t t2;
#endif
#endif
};
};
 
 
extern struct cpu_state cpu_state;
extern struct cpu_state cpu_state;
 
 
#define CURINSN(INSN) (strcmp(cur->insn, (INSN)) == 0)
#define CURINSN(INSN) (strcmp(cur->insn, (INSN)) == 0)
 
 
/*extern machword eval_operand(char *srcoperand,int* breakpoint);
/*extern machword eval_operand(char *srcoperand,int* breakpoint);
extern void set_operand(char *dstoperand, unsigned long value,int* breakpoint);*/
extern void set_operand(char *dstoperand, unsigned long value,int* breakpoint);*/
void dumpreg();
void dumpreg();
inline void dump_exe_log();
inline void dump_exe_log();
inline int cpu_clock ();
inline int cpu_clock ();
void cpu_reset ();
void cpu_reset ();
uorreg_t evalsim_reg(unsigned int regno);
uorreg_t evalsim_reg(unsigned int regno);
void setsim_reg(unsigned int regno, uorreg_t value);
void setsim_reg(unsigned int regno, uorreg_t value);
 
 
extern oraddr_t pcnext;
extern oraddr_t pcnext;
int depend_operands(struct iqueue_entry *prev, struct iqueue_entry *next);
int depend_operands(struct iqueue_entry *prev, struct iqueue_entry *next);
 
 

powered by: WebSVN 2.1.0

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