*/
#include "arch/x86/regs/msr.hh"
-#include "base/hashmap.hh"
namespace X86ISA
{
-typedef m5::hash_map<Addr, MiscRegIndex> MsrMap;
-
typedef MsrMap::value_type MsrVal;
const MsrMap::value_type msrMapData[] = {
static const unsigned msrMapSize = sizeof(msrMapData) / sizeof(msrMapData[0]);
-static MsrMap msrMap(msrMapData, msrMapData + msrMapSize);
+const MsrMap msrMap(msrMapData, msrMapData + msrMapSize);
bool
msrAddrToIndex(MiscRegIndex ®Num, Addr addr)
{
- MsrMap::iterator it = msrMap.find(addr);
+ MsrMap::const_iterator it(msrMap.find(addr));
if (it == msrMap.end()) {
return false;
} else {
#define __ARCH_X86_REG_MSR_HH__
#include "arch/x86/regs/misc.hh"
+#include "base/hashmap.hh"
#include "base/types.hh"
namespace X86ISA
{
+typedef m5::hash_map<Addr, MiscRegIndex> MsrMap;
+
+/**
+ * Map between MSR addresses and their corresponding misc registers.
+ *
+ * @note This map is usually only used when enumeration of supported
+ * MSRs is needed (e.g., in virtualized CPUs). Code that needs to
+ * look-up specific MSRs should use msrAddrToIndex().
+ */
+extern const MsrMap msrMap;
+
+/**
+ * Find and return the misc reg corresponding to an MSR address.
+ *
+ * Look for an MSR (addr) in #msrMap and return the
+ * corresponding misc reg in regNum. The value of regNum is undefined
+ * if the MSR was not found.
+ *
+ * @param regNum misc reg index (out).
+ * @param addr MSR address
+ * @return True if the MSR was found, false otherwise.
+ */
bool msrAddrToIndex(MiscRegIndex ®Num, Addr addr);
} // namespace X86ISA