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
#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);
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);
}
#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)