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
This commit is contained in:
parent
aa12cac9fd
commit
8da9fcdd75
|
@ -158,6 +158,9 @@ class AlphaISA
|
||||||
#endif // FULL_SYSTEM
|
#endif // FULL_SYSTEM
|
||||||
// Are these architectural, or just for convenience?
|
// Are these architectural, or just for convenience?
|
||||||
uint8_t opcode, ra; // current instruction details (for intr's)
|
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);
|
static StaticInstPtr<AlphaISA> decodeInst(MachInst);
|
||||||
|
|
|
@ -100,16 +100,20 @@ ExecContext::takeOverFrom(ExecContext *oldContext)
|
||||||
void
|
void
|
||||||
ExecContext::serialize(ostream &os)
|
ExecContext::serialize(ostream &os)
|
||||||
{
|
{
|
||||||
SERIALIZE_ARRAY(regs.intRegFile, NumIntRegs);
|
SERIALIZE_ENUM(_status);
|
||||||
SERIALIZE_ARRAY(regs.floatRegFile.q, NumFloatRegs);
|
regs.serialize(os);
|
||||||
|
// thread_num and cpu_id are deterministic from the config
|
||||||
|
SERIALIZE_SCALAR(func_exe_insn);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
ExecContext::unserialize(const IniFile *db, const std::string §ion)
|
ExecContext::unserialize(const IniFile *db, const std::string §ion)
|
||||||
{
|
{
|
||||||
UNSERIALIZE_ARRAY(regs.intRegFile, NumIntRegs);
|
UNSERIALIZE_ENUM(_status);
|
||||||
UNSERIALIZE_ARRAY(regs.floatRegFile.q, NumFloatRegs);
|
regs.unserialize(db, section);
|
||||||
|
// thread_num and cpu_id are deterministic from the config
|
||||||
|
UNSERIALIZE_SCALAR(func_exe_insn);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -66,6 +66,16 @@ void arrayParamIn(const IniFile *db, const std::string §ion,
|
||||||
|
|
||||||
#define UNSERIALIZE_SCALAR(scalar) paramIn(db, section, #scalar, scalar)
|
#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) \
|
#define SERIALIZE_ARRAY(member, size) \
|
||||||
arrayParamOut(os, #member, member, size)
|
arrayParamOut(os, #member, member, size)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue