summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Schultz <alschult@umich.edu>2003-10-21 17:18:17 -0400
committerAndrew Schultz <alschult@umich.edu>2003-10-21 17:18:17 -0400
commitf600cff5c265bc69048bfd71c31434de3f34b204 (patch)
tree5a6e38ca3cce20a2b28027be0542b3f4ca7608df
parentae232a883abf5c5f9dadaec4ccaf0268469b383d (diff)
downloadgem5-f600cff5c265bc69048bfd71c31434de3f34b204.tar.xz
Created new M5 instruction to allow an integer parameter (init_param) to be specified in the INI and then read inside the simulator.
arch/alpha/isa_desc: Added new M5FUNC instruction to put allow reading of init_param inside simulator kern/tru64/tru64_system.cc: kern/tru64/tru64_system.hh: sim/system.cc: sim/system.hh: Added support for init_param --HG-- extra : convert_revision : 8253f0b4239b194d4f04665c9deec1fcdf665c8a
-rw-r--r--arch/alpha/isa_desc1
-rw-r--r--kern/tru64/tru64_system.cc18
-rw-r--r--kern/tru64/tru64_system.hh1
-rw-r--r--sim/system.cc2
-rw-r--r--sim/system.hh4
5 files changed, 17 insertions, 9 deletions
diff --git a/arch/alpha/isa_desc b/arch/alpha/isa_desc
index b5536525d..f36413ad8 100644
--- a/arch/alpha/isa_desc
+++ b/arch/alpha/isa_desc
@@ -2407,6 +2407,7 @@ decode OPCODE default Unknown::unknown() {
if (!xc->misspeculating())
m5_exit();
}}, No_OpClass);
+ 0x30: initparam({{ Ra = xc->cpu->system->init_param; }});
}
}
diff --git a/kern/tru64/tru64_system.cc b/kern/tru64/tru64_system.cc
index b31b82644..0a4f8ae4e 100644
--- a/kern/tru64/tru64_system.cc
+++ b/kern/tru64/tru64_system.cc
@@ -43,11 +43,11 @@
using namespace std;
-Tru64System::Tru64System(const string _name, MemoryController *_memCtrl,
- PhysicalMemory *_physmem, const string &kernel_path,
- const string &console_path, const string &palcode,
- const string &boot_osflags)
- : System(_name, _memCtrl, _physmem)
+Tru64System::Tru64System(const string _name, const int _init_param,
+ MemoryController *_memCtrl, PhysicalMemory *_physmem,
+ const string &kernel_path, const string &console_path,
+ const string &palcode, const string &boot_osflags)
+ : System(_name, _init_param, _memCtrl, _physmem)
{
kernelSymtab = new SymbolTable;
consoleSymtab = new SymbolTable;
@@ -208,6 +208,7 @@ BEGIN_DECLARE_SIM_OBJECT_PARAMS(Tru64System)
SimObjectParam<MemoryController *> mem_ctl;
SimObjectParam<PhysicalMemory *> physmem;
+ Param<int> init_param;
Param<string> kernel_code;
Param<string> console_code;
@@ -220,6 +221,7 @@ BEGIN_INIT_SIM_OBJECT_PARAMS(Tru64System)
INIT_PARAM(mem_ctl, "memory controller"),
INIT_PARAM(physmem, "phsyical memory"),
+ INIT_PARAM_DFLT(init_param, "numerical value to pass into simulator", 0),
INIT_PARAM(kernel_code, "file that contains the kernel code"),
INIT_PARAM(console_code, "file that contains the console code"),
INIT_PARAM(pal_code, "file that contains palcode"),
@@ -230,9 +232,9 @@ END_INIT_SIM_OBJECT_PARAMS(Tru64System)
CREATE_SIM_OBJECT(Tru64System)
{
- Tru64System *sys = new Tru64System(getInstanceName(), mem_ctl, physmem,
- kernel_code, console_code, pal_code,
- boot_osflags);
+ Tru64System *sys = new Tru64System(getInstanceName(), init_param, mem_ctl,
+ physmem, kernel_code, console_code,
+ pal_code, boot_osflags);
return sys;
}
diff --git a/kern/tru64/tru64_system.hh b/kern/tru64/tru64_system.hh
index 087ef038c..7fd337eb5 100644
--- a/kern/tru64/tru64_system.hh
+++ b/kern/tru64/tru64_system.hh
@@ -79,6 +79,7 @@ class Tru64System : public System
public:
Tru64System(const std::string _name,
+ const int _init_param,
MemoryController *_memCtrl,
PhysicalMemory *_physmem,
const std::string &kernel_path,
diff --git a/sim/system.cc b/sim/system.cc
index fd80e23c3..e1e293c90 100644
--- a/sim/system.cc
+++ b/sim/system.cc
@@ -37,9 +37,11 @@ vector<System *> System::systemList;
int System::numSystemsRunning = 0;
System::System(const std::string _name,
+ const int _init_param,
MemoryController *_memCtrl,
PhysicalMemory *_physmem)
: SimObject(_name),
+ init_param(_init_param),
memCtrl(_memCtrl),
physmem(_physmem)
{
diff --git a/sim/system.hh b/sim/system.hh
index bec1011ce..56a3d6a6f 100644
--- a/sim/system.hh
+++ b/sim/system.hh
@@ -46,6 +46,7 @@ class ExecContext;
class System : public SimObject
{
public:
+ const int init_param;
MemoryController *memCtrl;
PhysicalMemory *physmem;
@@ -55,7 +56,8 @@ class System : public SimObject
void registerExecContext(ExecContext *xc);
public:
- System(const std::string name, MemoryController *, PhysicalMemory *);
+ System(const std::string _name, const int _init_param,
+ MemoryController *, PhysicalMemory *);
~System();
virtual void init(ExecContext *xc) = 0;