sim: Add support for serializing BitUnionXX

BitUnion instances can normally not be used with the SERIALIZE_SCALAR
and UNSERIALIZE_SCALAR macros due to the way they are converted
between their storage type and their actual type. This changeset adds
a set of parm(In|Out) functions specifically for gem5 bit unions to
work around the issue.
This commit is contained in:
Andreas Sandberg 2014-10-16 05:49:37 -04:00
parent 66df7b7fd4
commit 804ed4b418

View file

@ -43,6 +43,7 @@
#include <map>
#include <vector>
#include "base/bitunion.hh"
#include "base/types.hh"
class IniFile;
@ -63,14 +64,37 @@ static const uint64_t gem5CheckpointVersion = 0x000000000000000d;
template <class T>
void paramOut(std::ostream &os, const std::string &name, const T &param);
template <typename DataType, typename BitUnion>
void paramOut(std::ostream &os, const std::string &name,
const BitfieldBackend::BitUnionOperators<DataType, BitUnion> &p)
{
paramOut(os, name, p.__data);
}
template <class T>
void paramIn(Checkpoint *cp, const std::string &section,
const std::string &name, T &param);
template <typename DataType, typename BitUnion>
void paramIn(Checkpoint *cp, const std::string &section,
const std::string &name,
BitfieldBackend::BitUnionOperators<DataType, BitUnion> &p)
{
paramIn(cp, section, name, p.__data);
}
template <class T>
bool optParamIn(Checkpoint *cp, const std::string &section,
const std::string &name, T &param);
template <typename DataType, typename BitUnion>
bool optParamIn(Checkpoint *cp, const std::string &section,
const std::string &name,
BitfieldBackend::BitUnionOperators<DataType, BitUnion> &p)
{
return optParamIn(cp, section, name, p.__data);
}
template <class T>
void arrayParamOut(std::ostream &os, const std::string &name,
const T *param, unsigned size);