diff options
author | Steve Reinhardt <stever@eecs.umich.edu> | 2003-10-29 08:50:25 -0800 |
---|---|---|
committer | Steve Reinhardt <stever@eecs.umich.edu> | 2003-10-29 08:50:25 -0800 |
commit | 8da9fcdd751bcb74c17e72d7d0a6c7ccf259552c (patch) | |
tree | 0cf43c0d989be70e4dbf57eaa3c1083ae0b11f9a | |
parent | aa12cac9fd423d75578c3657fe5fe6e664e63890 (diff) | |
download | gem5-8da9fcdd751bcb74c17e72d7d0a6c7ccf259552c.tar.xz |
Flesh out ExecContext serialize/unserialize (including RegFile).
Add support for serializing enums.
arch/alpha/isa_traits.hh:
Add serialize/unserialize functions for RegFile
(defined in new isa_traits.cc).
cpu/exec_context.cc:
Flesh out serialize/unserialize.
sim/serialize.hh:
Add {UN}SERIALIZE_ENUM().
--HG--
extra : convert_revision : 9e30c7e7b3b290dc8ea0888ba3636fc93ee89052
-rw-r--r-- | arch/alpha/isa_traits.hh | 3 | ||||
-rw-r--r-- | cpu/exec_context.cc | 12 | ||||
-rw-r--r-- | sim/serialize.hh | 10 |
3 files changed, 21 insertions, 4 deletions
diff --git a/arch/alpha/isa_traits.hh b/arch/alpha/isa_traits.hh index e27841c3c..fbdcffbcf 100644 --- a/arch/alpha/isa_traits.hh +++ b/arch/alpha/isa_traits.hh @@ -158,6 +158,9 @@ class AlphaISA #endif // FULL_SYSTEM // Are these architectural, or just for convenience? uint8_t opcode, ra; // current instruction details (for intr's) + + void serialize(std::ostream &os); + void unserialize(const IniFile *db, const std::string §ion); }; static StaticInstPtr<AlphaISA> decodeInst(MachInst); diff --git a/cpu/exec_context.cc b/cpu/exec_context.cc index ed6360649..b869a8c4d 100644 --- a/cpu/exec_context.cc +++ b/cpu/exec_context.cc @@ -100,16 +100,20 @@ ExecContext::takeOverFrom(ExecContext *oldContext) void ExecContext::serialize(ostream &os) { - SERIALIZE_ARRAY(regs.intRegFile, NumIntRegs); - SERIALIZE_ARRAY(regs.floatRegFile.q, NumFloatRegs); + SERIALIZE_ENUM(_status); + regs.serialize(os); + // thread_num and cpu_id are deterministic from the config + SERIALIZE_SCALAR(func_exe_insn); } void ExecContext::unserialize(const IniFile *db, const std::string §ion) { - UNSERIALIZE_ARRAY(regs.intRegFile, NumIntRegs); - UNSERIALIZE_ARRAY(regs.floatRegFile.q, NumFloatRegs); + UNSERIALIZE_ENUM(_status); + regs.unserialize(db, section); + // thread_num and cpu_id are deterministic from the config + UNSERIALIZE_SCALAR(func_exe_insn); } diff --git a/sim/serialize.hh b/sim/serialize.hh index 9c321b897..d7842b47d 100644 --- a/sim/serialize.hh +++ b/sim/serialize.hh @@ -66,6 +66,16 @@ void arrayParamIn(const IniFile *db, const std::string §ion, #define UNSERIALIZE_SCALAR(scalar) paramIn(db, section, #scalar, scalar) +// ENUMs are like SCALARs, but we cast them to ints on the way out +#define SERIALIZE_ENUM(scalar) paramOut(os, #scalar, (int)scalar) + +#define UNSERIALIZE_ENUM(scalar) \ + do { \ + int tmp; \ + paramIn(db, section, #scalar, tmp); \ + scalar = (typeof(scalar))tmp; \ + } while (0) + #define SERIALIZE_ARRAY(member, size) \ arrayParamOut(os, #member, member, size) |