From f600cff5c265bc69048bfd71c31434de3f34b204 Mon Sep 17 00:00:00 2001 From: Andrew Schultz Date: Tue, 21 Oct 2003 17:18:17 -0400 Subject: [PATCH] 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 --- arch/alpha/isa_desc | 1 + kern/tru64/tru64_system.cc | 18 ++++++++++-------- kern/tru64/tru64_system.hh | 1 + sim/system.cc | 2 ++ sim/system.hh | 4 +++- 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 mem_ctl; SimObjectParam physmem; + Param init_param; Param kernel_code; Param 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::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;