summaryrefslogtreecommitdiff
path: root/src/arch/alpha/isa.hh
diff options
context:
space:
mode:
authorGabe Black <gblack@eecs.umich.edu>2009-07-08 23:02:22 -0700
committerGabe Black <gblack@eecs.umich.edu>2009-07-08 23:02:22 -0700
commit3d39b6213265ceeb14b8089190e5a097f17fdc1b (patch)
tree60094f669d10e2c3f52aff53789819145663b095 /src/arch/alpha/isa.hh
parentb398b8ff1ba7e181e010afd6219074cf6f683820 (diff)
downloadgem5-3d39b6213265ceeb14b8089190e5a097f17fdc1b.tar.xz
Alpha: Pull the MiscRegFile fully into the ISA object.
Diffstat (limited to 'src/arch/alpha/isa.hh')
-rw-r--r--src/arch/alpha/isa.hh73
1 files changed, 47 insertions, 26 deletions
diff --git a/src/arch/alpha/isa.hh b/src/arch/alpha/isa.hh
index 4c19659ab..dbd1c43a9 100644
--- a/src/arch/alpha/isa.hh
+++ b/src/arch/alpha/isa.hh
@@ -31,50 +31,73 @@
#ifndef __ARCH_ALPHA_ISA_HH__
#define __ARCH_ALPHA_ISA_HH__
-#include "arch/alpha/miscregfile.hh"
+#include <string>
+#include <iostream>
+
+#include "arch/alpha/registers.hh"
#include "arch/alpha/types.hh"
+#include "base/types.hh"
+class BaseCPU;
class Checkpoint;
class EventManager;
+class ThreadContext;
namespace AlphaISA
{
class ISA
{
+ public:
+ typedef uint64_t InternalProcReg;
+
+ protected:
+ uint64_t fpcr; // floating point condition codes
+ uint64_t uniq; // process-unique register
+ bool lock_flag; // lock flag for LL/SC
+ Addr lock_addr; // lock address for LL/SC
+ int intr_flag;
+
+ InternalProcReg ipr[NumInternalProcRegs]; // Internal processor regs
+
protected:
- MiscRegFile miscRegFile;
+ InternalProcReg readIpr(int idx, ThreadContext *tc);
+ void setIpr(int idx, InternalProcReg val, ThreadContext *tc);
public:
- void expandForMultithreading(ThreadID num_threads, unsigned num_vpes)
- {
- miscRegFile.expandForMultithreading(num_threads, num_vpes);
- }
+ // These functions should be removed once the simplescalar cpu
+ // model has been replaced.
+ int getInstAsid();
+ int getDataAsid();
- void reset(std::string core_name, ThreadID num_threads,
- unsigned num_vpes, BaseCPU *_cpu)
- {
- miscRegFile.reset(core_name, num_threads, num_vpes, _cpu);
- }
+ MiscReg readMiscRegNoEffect(int misc_reg, ThreadID tid = 0);
+ MiscReg readMiscReg(int misc_reg, ThreadContext *tc, ThreadID tid = 0);
- int instAsid()
- {
- return miscRegFile.getInstAsid();
- }
+ void setMiscRegNoEffect(int misc_reg, const MiscReg &val,
+ ThreadID tid = 0);
+ void setMiscReg(int misc_reg, const MiscReg &val, ThreadContext *tc,
+ ThreadID tid = 0);
- int dataAsid()
+ void
+ clear()
{
- return miscRegFile.getDataAsid();
+ fpcr = 0;
+ uniq = 0;
+ lock_flag = 0;
+ lock_addr = 0;
+ intr_flag = 0;
}
- void clear();
+ void serialize(std::ostream &os);
+ void unserialize(Checkpoint *cp, const std::string &section);
- MiscReg readMiscRegNoEffect(int miscReg);
- MiscReg readMiscReg(int miscReg, ThreadContext *tc);
+ void reset(std::string core_name, ThreadID num_threads,
+ unsigned num_vpes, BaseCPU *_cpu)
+ { }
- void setMiscRegNoEffect(int miscReg, const MiscReg val);
- void setMiscReg(int miscReg, const MiscReg val,
- ThreadContext *tc);
+
+ void expandForMultithreading(ThreadID num_threads, unsigned num_vpes)
+ { }
int
flattenIntIndex(int reg)
@@ -88,12 +111,10 @@ namespace AlphaISA
return reg;
}
- void serialize(std::ostream &os);
- void unserialize(Checkpoint *cp, const std::string &section);
-
ISA()
{
clear();
+ initializeIprTable();
}
};
}