Gabe Black has uploaded this change for review. (
https://gem5-review.googlesource.com/c/public/gem5/+/41734 )
Change subject: arch: Move setting up RegClassInfos into the arches.
......................................................................
arch: Move setting up RegClassInfos into the arches.
Also remove no longer global constants from arch/registers.hh if they
are no longer used locally.
Change-Id: I1d1589db3dd4c51a5ec11e32348d394261e36d17
---
M src/arch/arm/freebsd/se_workload.hh
M src/arch/arm/htm.cc
M src/arch/arm/htm.hh
M src/arch/arm/isa.cc
M src/arch/arm/isa.hh
M src/arch/arm/isa_device.cc
M src/arch/arm/nativetrace.cc
M src/arch/arm/process.cc
M src/arch/arm/registers.hh
M src/arch/arm/tracers/tarmac_base.cc
M src/arch/arm/tracers/tarmac_record.hh
M src/arch/arm/utility.cc
M src/arch/arm/utility.hh
M src/arch/generic/isa.hh
M src/arch/mips/isa.cc
M src/arch/mips/isa.hh
M src/arch/mips/registers.hh
M src/arch/mips/utility.cc
M src/arch/power/isa.cc
M src/arch/power/isa.hh
M src/arch/power/isa/includes.isa
M src/arch/power/registers.hh
M src/arch/power/se_workload.hh
M src/arch/power/utility.cc
M src/arch/riscv/isa.cc
M src/arch/riscv/registers.hh
M src/arch/sparc/insts/static_inst.cc
M src/arch/sparc/interrupts.hh
M src/arch/sparc/isa.cc
M src/arch/sparc/isa.hh
M src/arch/sparc/isa/includes.isa
M src/arch/sparc/process.cc
M src/arch/sparc/registers.hh
M src/arch/sparc/remote_gdb.cc
M src/arch/sparc/tlb.cc
M src/arch/sparc/utility.cc
M src/arch/sparc/utility.hh
M src/arch/x86/isa.cc
M src/arch/x86/registers.hh
39 files changed, 126 insertions(+), 106 deletions(-)
diff --git a/src/arch/arm/freebsd/se_workload.hh
b/src/arch/arm/freebsd/se_workload.hh
index a228ee0..6f13201 100644
--- a/src/arch/arm/freebsd/se_workload.hh
+++ b/src/arch/arm/freebsd/se_workload.hh
@@ -34,8 +34,8 @@
#ifndef __ARCH_ARM_FREEBSD_SE_WORKLOAD_HH__
#define __ARCH_ARM_FREEBSD_SE_WORKLOAD_HH__
+#include "arch/arm/ccregs.hh"
#include "arch/arm/freebsd/freebsd.hh"
-#include "arch/arm/registers.hh"
#include "arch/arm/se_workload.hh"
#include "params/ArmEmuFreebsd.hh"
#include "sim/syscall_desc.hh"
diff --git a/src/arch/arm/htm.cc b/src/arch/arm/htm.cc
index 276406a..3129b3f 100644
--- a/src/arch/arm/htm.cc
+++ b/src/arch/arm/htm.cc
@@ -36,6 +36,9 @@
*/
#include "arch/arm/htm.hh"
+
+#include "arch/arm/intregs.hh"
+#include "arch/arm/miscregs.hh"
#include "cpu/thread_context.hh"
void
@@ -70,7 +73,7 @@
//tme_checkpoint->iccPmrEl1 = tc->readMiscReg(MISCREG_ICC_PMR_EL1);
nzcv = tc->readMiscReg(MISCREG_NZCV);
daif = tc->readMiscReg(MISCREG_DAIF);
- for (auto n = 0; n < NumIntArchRegs; n++) {
+ for (auto n = 0; n < NUM_ARCH_INTREGS; n++) {
x[n] = tc->readIntReg(n);
}
// TODO first detect if FP is enabled at this EL
@@ -97,7 +100,7 @@
//tc->setMiscReg(MISCREG_ICC_PMR_EL1, tme_checkpoint->iccPmrEl1);
tc->setMiscReg(MISCREG_NZCV, nzcv);
tc->setMiscReg(MISCREG_DAIF, daif);
- for (auto n = 0; n < NumIntArchRegs; n++) {
+ for (auto n = 0; n < NUM_ARCH_INTREGS; n++) {
tc->setIntReg(n, x[n]);
}
// TODO first detect if FP is enabled at this EL
diff --git a/src/arch/arm/htm.hh b/src/arch/arm/htm.hh
index 3fa7c1d..d32c58e 100644
--- a/src/arch/arm/htm.hh
+++ b/src/arch/arm/htm.hh
@@ -44,6 +44,7 @@
* ISA-specific types for hardware transactional memory.
*/
+#include "arch/arm/intregs.hh"
#include "arch/arm/registers.hh"
#include "arch/generic/htm.hh"
#include "base/types.hh"
@@ -70,7 +71,7 @@
private:
uint8_t rt; // TSTART destination register
Addr nPc; // Fallback instruction address
- std::array<RegVal, NumIntArchRegs> x; // General purpose registers
+ std::array<RegVal, NUM_ARCH_INTREGS> x; // General purpose registers
std::array<VecRegContainer, NumVecRegs> z; // Vector registers
std::array<VecPredRegContainer, NumVecRegs> p; // Predicate registers
Addr sp; // Stack Pointer at current EL
diff --git a/src/arch/arm/isa.cc b/src/arch/arm/isa.cc
index c7f82e0..039224f 100644
--- a/src/arch/arm/isa.cc
+++ b/src/arch/arm/isa.cc
@@ -47,6 +47,7 @@
#include "arch/arm/tlbi_op.hh"
#include "cpu/base.hh"
#include "cpu/checker/cpu.hh"
+#include "cpu/reg_class.hh"
#include "debug/Arm.hh"
#include "debug/MiscRegs.hh"
#include "dev/arm/generic_timer.hh"
@@ -65,6 +66,16 @@
pmu(p.pmu), impdefAsNop(p.impdef_nop),
afterStartup(false)
{
+ _regClasses.insert(_regClasses.end(), {
+ { NUM_INTREGS },
+ { 0 },
+ { NumVecRegs },
+ { NumVecRegs * TheISA::NumVecElemPerVecReg },
+ { NumVecPredRegs },
+ { NUM_CCREGS },
+ { NUM_MISCREGS }
+ });
+
miscRegs[MISCREG_SCTLR_RST] = 0;
// Hook up a dummy device if we haven't been configured with a
@@ -484,7 +495,7 @@
RegVal
ISA::readMiscRegNoEffect(int misc_reg) const
{
- assert(misc_reg < NumMiscRegs);
+ assert(misc_reg < NUM_MISCREGS);
const auto ® = lookUpMiscReg[misc_reg]; // bit masks
const auto &map = getMiscIndices(misc_reg);
@@ -810,7 +821,7 @@
void
ISA::setMiscRegNoEffect(int misc_reg, RegVal val)
{
- assert(misc_reg < NumMiscRegs);
+ assert(misc_reg < NUM_MISCREGS);
const auto ® = lookUpMiscReg[misc_reg]; // bit masks
const auto &map = getMiscIndices(misc_reg);
diff --git a/src/arch/arm/isa.hh b/src/arch/arm/isa.hh
index 7888229..aa2a83a 100644
--- a/src/arch/arm/isa.hh
+++ b/src/arch/arm/isa.hh
@@ -454,7 +454,7 @@
void initializeMiscRegMetadata();
- RegVal miscRegs[NumMiscRegs];
+ RegVal miscRegs[NUM_MISCREGS];
const IntRegIndex *intRegMap;
void
diff --git a/src/arch/arm/isa_device.cc b/src/arch/arm/isa_device.cc
index 5516a2c..009f0a7 100644
--- a/src/arch/arm/isa_device.cc
+++ b/src/arch/arm/isa_device.cc
@@ -37,6 +37,7 @@
#include "arch/arm/isa_device.hh"
+#include "arch/arm/miscregs.hh"
#include "base/logging.hh"
namespace ArmISA
diff --git a/src/arch/arm/nativetrace.cc b/src/arch/arm/nativetrace.cc
index 7075adb..e82f1a8 100644
--- a/src/arch/arm/nativetrace.cc
+++ b/src/arch/arm/nativetrace.cc
@@ -40,6 +40,7 @@
#include "arch/arm/nativetrace.hh"
+#include "arch/arm/ccregs.hh"
#include "arch/arm/isa_traits.hh"
#include "arch/arm/miscregs.hh"
#include "cpu/thread_context.hh"
diff --git a/src/arch/arm/process.cc b/src/arch/arm/process.cc
index 86bc8e2..b1c1b4d 100644
--- a/src/arch/arm/process.cc
+++ b/src/arch/arm/process.cc
@@ -40,7 +40,9 @@
#include "arch/arm/process.hh"
+#include "arch/arm/ccregs.hh"
#include "arch/arm/isa_traits.hh"
+#include "arch/arm/miscregs.hh"
#include "arch/arm/types.hh"
#include "base/loader/elf_object.hh"
#include "base/loader/object_file.hh"
diff --git a/src/arch/arm/registers.hh b/src/arch/arm/registers.hh
index 0955906..fdbe625 100644
--- a/src/arch/arm/registers.hh
+++ b/src/arch/arm/registers.hh
@@ -41,10 +41,7 @@
#ifndef __ARCH_ARM_REGISTERS_HH__
#define __ARCH_ARM_REGISTERS_HH__
-#include "arch/arm/ccregs.hh"
#include "arch/arm/intregs.hh"
-#include "arch/arm/miscregs.hh"
-#include "arch/arm/types.hh"
#include "arch/generic/vec_pred_reg.hh"
#include "arch/generic/vec_reg.hh"
@@ -68,14 +65,6 @@
VecPredRegHasPackedRepr, true>;
using VecPredRegContainer = VecPredReg::Container;
-// Constants Related to the number of registers
-// Int, Float, CC, Misc
-const int NumIntArchRegs = NUM_ARCH_INTREGS;
-const int NumIntRegs = NUM_INTREGS;
-const int NumFloatRegs = 0; // Float values are stored in the VecRegs
-const int NumCCRegs = NUM_CCREGS;
-const int NumMiscRegs = NUM_MISCREGS;
-
// Vec, PredVec
// NumFloatV7ArchRegs: This in theory should be 32.
// However in A32 gem5 is splitting double register accesses in two
@@ -89,9 +78,6 @@
const int NumVecRegs = NumVecV8ArchRegs + NumVecSpecialRegs +
NumVecIntrlvRegs;
const int NumVecPredRegs = 18; // P0-P15, FFR, UREG0
-const int TotalNumRegs = NumIntRegs + NumFloatRegs + NumVecRegs +
- NumVecPredRegs + NumMiscRegs;
-
// Semantically meaningful register indices
const int ReturnValueReg = 0;
const int ReturnValueReg1 = 1;
diff --git a/src/arch/arm/tracers/tarmac_base.cc
b/src/arch/arm/tracers/tarmac_base.cc
index e3364c4..445b151 100644
--- a/src/arch/arm/tracers/tarmac_base.cc
+++ b/src/arch/arm/tracers/tarmac_base.cc
@@ -40,7 +40,7 @@
#include <algorithm>
#include <string>
-#include "config/the_isa.hh"
+#include "arch/arm/miscregs.hh"
#include "cpu/reg_class.hh"
#include "cpu/static_inst.hh"
#include "cpu/thread_context.hh"
diff --git a/src/arch/arm/tracers/tarmac_record.hh
b/src/arch/arm/tracers/tarmac_record.hh
index e5179ce..870a3fd 100644
--- a/src/arch/arm/tracers/tarmac_record.hh
+++ b/src/arch/arm/tracers/tarmac_record.hh
@@ -45,6 +45,7 @@
#include <memory>
+#include "arch/arm/miscregs.hh"
#include "arch/arm/tracers/tarmac_base.hh"
#include "base/printable.hh"
#include "config/the_isa.hh"
diff --git a/src/arch/arm/utility.cc b/src/arch/arm/utility.cc
index 31408f6..533b339 100644
--- a/src/arch/arm/utility.cc
+++ b/src/arch/arm/utility.cc
@@ -39,8 +39,10 @@
#include <memory>
+#include "arch/arm/ccregs.hh"
#include "arch/arm/faults.hh"
#include "arch/arm/interrupts.hh"
+#include "arch/arm/intregs.hh"
#include "arch/arm/isa_traits.hh"
#include "arch/arm/mmu.hh"
#include "arch/arm/system.hh"
@@ -74,16 +76,13 @@
void
copyRegs(ThreadContext *src, ThreadContext *dest)
{
- for (int i = 0; i < NumIntRegs; i++)
+ for (int i = 0; i < NUM_INTREGS; i++)
dest->setIntRegFlat(i, src->readIntRegFlat(i));
- for (int i = 0; i < NumFloatRegs; i++)
- dest->setFloatRegFlat(i, src->readFloatRegFlat(i));
-
- for (int i = 0; i < NumCCRegs; i++)
+ for (int i = 0; i < NUM_CCREGS; i++)
dest->setCCReg(i, src->readCCReg(i));
- for (int i = 0; i < NumMiscRegs; i++)
+ for (int i = 0; i < NUM_MISCREGS; i++)
dest->setMiscRegNoEffect(i, src->readMiscRegNoEffect(i));
copyVecRegs(src, dest);
diff --git a/src/arch/arm/utility.hh b/src/arch/arm/utility.hh
index bd043df..1a12b6a 100644
--- a/src/arch/arm/utility.hh
+++ b/src/arch/arm/utility.hh
@@ -42,6 +42,7 @@
#ifndef __ARCH_ARM_UTILITY_HH__
#define __ARCH_ARM_UTILITY_HH__
+#include "arch/arm/ccregs.hh"
#include "arch/arm/isa_traits.hh"
#include "arch/arm/miscregs.hh"
#include "arch/arm/types.hh"
diff --git a/src/arch/generic/isa.hh b/src/arch/generic/isa.hh
index 8b8b2db..5ecf6fb 100644
--- a/src/arch/generic/isa.hh
+++ b/src/arch/generic/isa.hh
@@ -58,17 +58,7 @@
ThreadContext *tc = nullptr;
- RegClasses _regClasses = {
-#if THE_ISA != NULL_ISA
- { TheISA::NumIntRegs },
- { TheISA::NumFloatRegs },
- { TheISA::NumVecRegs },
- { TheISA::NumVecRegs * TheISA::NumVecElemPerVecReg },
- { TheISA::NumVecPredRegs },
- { TheISA::NumCCRegs },
- { TheISA::NumMiscRegs }
-#endif // THE_ISA != NULL_ISA
- };
+ RegClasses _regClasses;
public:
virtual void takeOverFrom(ThreadContext *new_tc, ThreadContext
*old_tc) {}
diff --git a/src/arch/mips/isa.cc b/src/arch/mips/isa.cc
index 7916c4a..98dab66 100644
--- a/src/arch/mips/isa.cc
+++ b/src/arch/mips/isa.cc
@@ -33,6 +33,7 @@
#include "arch/mips/pra_constants.hh"
#include "base/bitfield.hh"
#include "cpu/base.hh"
+#include "cpu/reg_class.hh"
#include "cpu/thread_context.hh"
#include "debug/MipsPRA.hh"
#include "params/MipsISA.hh"
@@ -41,7 +42,7 @@
{
std::string
-ISA::miscRegNames[NumMiscRegs] =
+ISA::miscRegNames[MISCREG_NUMREGS] =
{
"Index", "MVPControl", "MVPConf0", "MVPConf1", "", "", "", "",
"Random", "VPEControl", "VPEConf0", "VPEConf1",
@@ -90,17 +91,27 @@
ISA::ISA(const Params &p) : BaseISA(p), numThreads(p.num_threads),
numVpes(p.num_vpes)
{
- miscRegFile.resize(NumMiscRegs);
- bankType.resize(NumMiscRegs);
+ _regClasses.insert(_regClasses.end(), {
+ { NumIntRegs },
+ { NumFloatRegs },
+ { 1 }, // Not applicable to MIPS.
+ { 2 }, // Not applicable to MIPS.
+ { 1 }, // Not applicable to MIPS.
+ { 0 }, // Not applicable to MIPS.
+ { MISCREG_NUMREGS }
+ });
- for (int i=0; i < NumMiscRegs; i++) {
+ miscRegFile.resize(MISCREG_NUMREGS);
+ bankType.resize(MISCREG_NUMREGS);
+
+ for (int i = 0; i < MISCREG_NUMREGS; i++) {
miscRegFile[i].resize(1);
bankType[i] = perProcessor;
}
- miscRegFile_WriteMask.resize(NumMiscRegs);
+ miscRegFile_WriteMask.resize(MISCREG_NUMREGS);
- for (int i = 0; i < NumMiscRegs; i++) {
+ for (int i = 0; i < MISCREG_NUMREGS; i++) {
miscRegFile_WriteMask[i].push_back(0);
}
@@ -143,7 +154,7 @@
void
ISA::clear()
{
- for (int i = 0; i < NumMiscRegs; i++) {
+ for (int i = 0; i < MISCREG_NUMREGS; i++) {
for (int j = 0; j < miscRegFile[i].size(); j++)
miscRegFile[i][j] = 0;
diff --git a/src/arch/mips/isa.hh b/src/arch/mips/isa.hh
index cc05781..e2468ce 100644
--- a/src/arch/mips/isa.hh
+++ b/src/arch/mips/isa.hh
@@ -125,7 +125,7 @@
// and if necessary alert the CPU
void updateCPU(BaseCPU *cpu);
- static std::string miscRegNames[NumMiscRegs];
+ static std::string miscRegNames[MISCREG_NUMREGS];
public:
ISA(const Params &p);
diff --git a/src/arch/mips/registers.hh b/src/arch/mips/registers.hh
index a9d2661..67691c9 100644
--- a/src/arch/mips/registers.hh
+++ b/src/arch/mips/registers.hh
@@ -49,11 +49,6 @@
const int MaxShadowRegSets = 16; // Maximum number of shadow register sets
const int NumIntRegs = NumIntArchRegs + NumIntSpecialRegs; //HI &
LO Regs
const int NumFloatRegs = NumFloatArchRegs + NumFloatSpecialRegs;//
-const int NumVecRegs = 1; // Not applicable to MIPS
- // (1 to prevent warnings)
-const int NumVecPredRegs = 1; // Not applicable to MIPS
- // (1 to prevent warnings)
-const int NumCCRegs = 0;
const uint32_t MIPS32_QNAN = 0x7fbfffff;
const uint64_t MIPS64_QNAN = ULL(0x7ff7ffffffffffff);
@@ -266,8 +261,6 @@
MISCREG_NUMREGS
};
-const int NumMiscRegs = MISCREG_NUMREGS;
-
// Not applicable to MIPS
using VecElem = ::DummyVecElem;
using VecReg = ::DummyVecReg;
diff --git a/src/arch/mips/utility.cc b/src/arch/mips/utility.cc
index 78fa3e2..911756f 100644
--- a/src/arch/mips/utility.cc
+++ b/src/arch/mips/utility.cc
@@ -216,11 +216,8 @@
for (int i = 0; i < NumFloatRegs; i++)
dest->setFloatRegFlat(i, src->readFloatRegFlat(i));
- // Would need to add condition-code regs if implemented
- assert(NumCCRegs == 0);
-
// Copy misc. registers
- for (int i = 0; i < NumMiscRegs; i++)
+ for (int i = 0; i < MISCREG_NUMREGS; i++)
dest->setMiscRegNoEffect(i, src->readMiscRegNoEffect(i));
// Copy over the PC State
diff --git a/src/arch/power/isa.cc b/src/arch/power/isa.cc
index d432636..0aa480c 100644
--- a/src/arch/power/isa.cc
+++ b/src/arch/power/isa.cc
@@ -37,6 +37,8 @@
#include "arch/power/isa.hh"
+#include "arch/power/miscregs.hh"
+#include "arch/power/registers.hh"
#include "params/PowerISA.hh"
namespace PowerISA
@@ -44,6 +46,15 @@
ISA::ISA(const Params &p) : BaseISA(p)
{
+ _regClasses.insert(_regClasses.end(), {
+ { NumIntRegs },
+ { NumFloatRegs },
+ { 1 },
+ { 2 },
+ { 1 },
+ { 0 },
+ { NUM_MISCREGS }
+ });
clear();
}
diff --git a/src/arch/power/isa.hh b/src/arch/power/isa.hh
index 3f7968e..7ec9ac7 100644
--- a/src/arch/power/isa.hh
+++ b/src/arch/power/isa.hh
@@ -31,6 +31,7 @@
#define __ARCH_POWER_ISA_HH__
#include "arch/generic/isa.hh"
+#include "arch/power/miscregs.hh"
#include "arch/power/registers.hh"
#include "arch/power/types.hh"
#include "base/logging.hh"
@@ -49,7 +50,7 @@
{
protected:
RegVal dummy;
- RegVal miscRegs[NumMiscRegs];
+ RegVal miscRegs[NUM_MISCREGS];
public:
void clear() {}
diff --git a/src/arch/power/isa/includes.isa
b/src/arch/power/isa/includes.isa
index c97aba9..c219d97 100644
--- a/src/arch/power/isa/includes.isa
+++ b/src/arch/power/isa/includes.isa
@@ -70,6 +70,7 @@
#include "arch/generic/memhelpers.hh"
#include "arch/power/faults.hh"
#include "arch/power/isa_traits.hh"
+#include "arch/power/miscregs.hh"
#include "arch/power/utility.hh"
#include "base/condcodes.hh"
#include "cpu/base.hh"
diff --git a/src/arch/power/registers.hh b/src/arch/power/registers.hh
index 2a1aea5..b31f5f3 100644
--- a/src/arch/power/registers.hh
+++ b/src/arch/power/registers.hh
@@ -29,10 +29,10 @@
#ifndef __ARCH_POWER_REGISTERS_HH__
#define __ARCH_POWER_REGISTERS_HH__
+#include <cstdint>
+
#include "arch/generic/vec_pred_reg.hh"
#include "arch/generic/vec_reg.hh"
-#include "arch/power/miscregs.hh"
-#include "base/types.hh"
namespace PowerISA
{
@@ -62,12 +62,6 @@
const int NumIntRegs = NumIntArchRegs + NumIntSpecialRegs;
const int NumFloatRegs = NumFloatArchRegs;
-const int NumVecRegs = 1; // Not applicable to Power
- // (1 to prevent warnings)
-const int NumVecPredRegs = 1; // Not applicable to Power
- // (1 to prevent warnings)
-const int NumCCRegs = 0;
-const int NumMiscRegs = NUM_MISCREGS;
// Semantically meaningful register indices
const int ReturnValueReg = 3;
diff --git a/src/arch/power/se_workload.hh b/src/arch/power/se_workload.hh
index 9bdd0cc..910a271 100644
--- a/src/arch/power/se_workload.hh
+++ b/src/arch/power/se_workload.hh
@@ -28,6 +28,7 @@
#ifndef __ARCH_POWER_SE_WORKLOAD_HH__
#define __ARCH_POWER_SE_WORKLOAD_HH__
+#include "arch/power/miscregs.hh"
#include "arch/power/registers.hh"
#include "params/PowerSEWorkload.hh"
#include "sim/se_workload.hh"
diff --git a/src/arch/power/utility.cc b/src/arch/power/utility.cc
index bed0be9..1c68cd9 100644
--- a/src/arch/power/utility.cc
+++ b/src/arch/power/utility.cc
@@ -45,9 +45,6 @@
for (int i = 0; i < NumFloatRegs; ++i)
dest->setFloatReg(i, src->readFloatReg(i));
- // Would need to add condition-code regs if implemented
- assert(NumCCRegs == 0);
-
// Copy misc. registers
copyMiscRegs(src, dest);
diff --git a/src/arch/riscv/isa.cc b/src/arch/riscv/isa.cc
index 98798e7..073e1de 100644
--- a/src/arch/riscv/isa.cc
+++ b/src/arch/riscv/isa.cc
@@ -49,7 +49,7 @@
namespace RiscvISA
{
-M5_VAR_USED const std::array<const char *, NumMiscRegs> MiscRegNames = {{
+M5_VAR_USED const std::array<const char *, NUM_MISCREGS> MiscRegNames = {{
[MISCREG_PRV] = "PRV",
[MISCREG_ISA] = "ISA",
[MISCREG_VENDORID] = "VENDORID",
@@ -178,7 +178,17 @@
ISA::ISA(const Params &p) : BaseISA(p)
{
- miscRegFile.resize(NumMiscRegs);
+ _regClasses.insert(_regClasses.begin(), {
+ { NumIntRegs },
+ { NumFloatRegs },
+ { 1 }, // Not applicable to RISCV
+ { 2 }, // Not applicable to RISCV
+ { 1 }, // Not applicable to RISCV
+ { 0 }, // Not applicable to RISCV
+ { NUM_MISCREGS }
+ });
+
+ miscRegFile.resize(NUM_MISCREGS);
clear();
}
@@ -226,7 +236,7 @@
RegVal
ISA::readMiscRegNoEffect(int misc_reg) const
{
- if (misc_reg > NumMiscRegs || misc_reg < 0) {
+ if (misc_reg > NUM_MISCREGS || misc_reg < 0) {
// Illegal CSR
panic("Illegal CSR index %#x\n", misc_reg);
return -1;
@@ -314,7 +324,7 @@
void
ISA::setMiscRegNoEffect(int misc_reg, RegVal val)
{
- if (misc_reg > NumMiscRegs || misc_reg < 0) {
+ if (misc_reg > NUM_MISCREGS || misc_reg < 0) {
// Illegal CSR
panic("Illegal CSR index %#x\n", misc_reg);
}
diff --git a/src/arch/riscv/registers.hh b/src/arch/riscv/registers.hh
index 862259f..bd29bb2 100644
--- a/src/arch/riscv/registers.hh
+++ b/src/arch/riscv/registers.hh
@@ -111,13 +111,6 @@
const int NumIntRegs = NumIntArchRegs + NumMicroIntRegs;
const int NumFloatRegs = 32;
-const unsigned NumVecRegs = 1; // Not applicable to RISC-V
- // (1 to prevent warnings)
-const int NumVecPredRegs = 1; // Not applicable to RISC-V
- // (1 to prevent warnings)
-
-const int NumCCRegs = 0;
-
// Semantically meaningful register indices
const int ZeroReg = 0;
const int ReturnAddrReg = 1;
@@ -278,7 +271,6 @@
NUM_MISCREGS
};
-const int NumMiscRegs = NUM_MISCREGS;
enum CSRIndex {
CSR_USTATUS = 0x000,
diff --git a/src/arch/sparc/insts/static_inst.cc
b/src/arch/sparc/insts/static_inst.cc
index 467b38f..65a38ff 100644
--- a/src/arch/sparc/insts/static_inst.cc
+++ b/src/arch/sparc/insts/static_inst.cc
@@ -29,6 +29,10 @@
#include "arch/sparc/insts/static_inst.hh"
+#include "arch/sparc/miscregs.hh"
+#include "arch/sparc/registers.hh"
+#include "base/bitunion.hh"
+
namespace SparcISA
{
diff --git a/src/arch/sparc/interrupts.hh b/src/arch/sparc/interrupts.hh
index 02708b8..18646fa 100644
--- a/src/arch/sparc/interrupts.hh
+++ b/src/arch/sparc/interrupts.hh
@@ -32,6 +32,7 @@
#include "arch/generic/interrupts.hh"
#include "arch/sparc/faults.hh"
#include "arch/sparc/isa_traits.hh"
+#include "arch/sparc/miscregs.hh"
#include "arch/sparc/registers.hh"
#include "cpu/thread_context.hh"
#include "debug/Interrupt.hh"
diff --git a/src/arch/sparc/isa.cc b/src/arch/sparc/isa.cc
index ba3839b..12e2908 100644
--- a/src/arch/sparc/isa.cc
+++ b/src/arch/sparc/isa.cc
@@ -31,6 +31,7 @@
#include "arch/sparc/asi.hh"
#include "arch/sparc/decoder.hh"
#include "arch/sparc/interrupts.hh"
+#include "arch/sparc/miscregs.hh"
#include "base/bitfield.hh"
#include "base/trace.hh"
#include "cpu/base.hh"
@@ -61,6 +62,15 @@
ISA::ISA(const Params &p) : BaseISA(p)
{
+ _regClasses.insert(_regClasses.end(), {
+ { NumIntRegs },
+ { NumFloatRegs },
+ { 1 }, // Not applicable for SPARC
+ { 2 }, // Not applicable for SPARC
+ { 1 }, // Not applicable for SPARC
+ { 0 }, // Not applicable for SPARC
+ { NumMiscRegs }
+ });
clear();
}
diff --git a/src/arch/sparc/isa.hh b/src/arch/sparc/isa.hh
index a58cd85..2d75b0a 100644
--- a/src/arch/sparc/isa.hh
+++ b/src/arch/sparc/isa.hh
@@ -33,7 +33,7 @@
#include <string>
#include "arch/generic/isa.hh"
-#include "arch/sparc/registers.hh"
+#include "arch/sparc/miscregs.hh"
#include "arch/sparc/types.hh"
#include "cpu/reg_class.hh"
#include "sim/sim_object.hh"
diff --git a/src/arch/sparc/isa/includes.isa
b/src/arch/sparc/isa/includes.isa
index 1cef0fc..c2c44a7 100644
--- a/src/arch/sparc/isa/includes.isa
+++ b/src/arch/sparc/isa/includes.isa
@@ -47,6 +47,7 @@
#include "arch/sparc/insts/unimp.hh"
#include "arch/sparc/insts/unknown.hh"
#include "arch/sparc/isa_traits.hh"
+#include "arch/sparc/miscregs.hh"
#include "arch/sparc/registers.hh"
#include "base/condcodes.hh"
#include "base/logging.hh"
diff --git a/src/arch/sparc/process.cc b/src/arch/sparc/process.cc
index 0923eeb..191cbf2 100644
--- a/src/arch/sparc/process.cc
+++ b/src/arch/sparc/process.cc
@@ -31,6 +31,7 @@
#include "arch/sparc/asi.hh"
#include "arch/sparc/handlers.hh"
#include "arch/sparc/isa_traits.hh"
+#include "arch/sparc/miscregs.hh"
#include "arch/sparc/registers.hh"
#include "arch/sparc/types.hh"
#include "base/loader/elf_object.hh"
diff --git a/src/arch/sparc/registers.hh b/src/arch/sparc/registers.hh
index 0602176..1404a1d 100644
--- a/src/arch/sparc/registers.hh
+++ b/src/arch/sparc/registers.hh
@@ -31,7 +31,6 @@
#include "arch/generic/vec_pred_reg.hh"
#include "arch/generic/vec_reg.hh"
-#include "arch/sparc/miscregs.hh"
#include "arch/sparc/sparc_traits.hh"
#include "base/types.hh"
@@ -94,17 +93,10 @@
const int SyscallPseudoReturnReg = INTREG_O1;
const int NumIntRegs = (MaxGL + 1) * 8 + NWindows * 16 + NumMicroIntRegs;
-const int NumVecRegs = 1; // Not applicable to SPARC
- // (1 to prevent warnings)
-const int NumVecPredRegs = 1; // Not applicable to SPARC
- // (1 to prevent warnings)
-const int NumCCRegs = 0;
const int NumFloatRegs = 64;
const int NumFloatArchRegs = NumFloatRegs;
-const int TotalNumRegs = NumIntRegs + NumFloatRegs + NumMiscRegs;
-
} // namespace SparcISA
#endif
diff --git a/src/arch/sparc/remote_gdb.cc b/src/arch/sparc/remote_gdb.cc
index a2988c6..10c5c1f 100644
--- a/src/arch/sparc/remote_gdb.cc
+++ b/src/arch/sparc/remote_gdb.cc
@@ -124,6 +124,7 @@
#include <csignal>
#include <string>
+#include "arch/sparc/miscregs.hh"
#include "base/intmath.hh"
#include "base/remote_gdb.hh"
#include "base/socket.hh"
diff --git a/src/arch/sparc/tlb.cc b/src/arch/sparc/tlb.cc
index 46e03e3..4fc25b6 100644
--- a/src/arch/sparc/tlb.cc
+++ b/src/arch/sparc/tlb.cc
@@ -33,6 +33,7 @@
#include "arch/sparc/asi.hh"
#include "arch/sparc/faults.hh"
#include "arch/sparc/interrupts.hh"
+#include "arch/sparc/miscregs.hh"
#include "arch/sparc/mmu.hh"
#include "arch/sparc/registers.hh"
#include "base/bitfield.hh"
diff --git a/src/arch/sparc/utility.cc b/src/arch/sparc/utility.cc
index a0c0f8b..e606d16 100644
--- a/src/arch/sparc/utility.cc
+++ b/src/arch/sparc/utility.cc
@@ -205,9 +205,6 @@
dest->setFloatReg(i, src->readFloatReg(i));
}
- // Would need to add condition-code regs if implemented
- assert(NumCCRegs == 0);
-
// Copy misc. registers
copyMiscRegs(src, dest);
diff --git a/src/arch/sparc/utility.hh b/src/arch/sparc/utility.hh
index 8ec3e10..053258f 100644
--- a/src/arch/sparc/utility.hh
+++ b/src/arch/sparc/utility.hh
@@ -30,7 +30,7 @@
#define __ARCH_SPARC_UTILITY_HH__
#include "arch/sparc/isa_traits.hh"
-#include "arch/sparc/registers.hh"
+#include "arch/sparc/miscregs.hh"
#include "arch/sparc/tlb.hh"
#include "base/bitfield.hh"
#include "base/logging.hh"
diff --git a/src/arch/x86/isa.cc b/src/arch/x86/isa.cc
index f568f01..640422d 100644
--- a/src/arch/x86/isa.cc
+++ b/src/arch/x86/isa.cc
@@ -30,6 +30,10 @@
#include "arch/x86/decoder.hh"
#include "arch/x86/mmu.hh"
+#include "arch/x86/registers.hh"
+#include "arch/x86/regs/ccr.hh"
+#include "arch/x86/regs/int.hh"
+#include "arch/x86/regs/misc.hh"
#include "cpu/base.hh"
#include "cpu/thread_context.hh"
#include "params/X86ISA.hh"
@@ -104,7 +108,7 @@
{
// Blank everything. 0 might not be an appropriate value for some
things,
// but it is for most.
- memset(regVal, 0, NumMiscRegs * sizeof(RegVal));
+ memset(regVal, 0, NUM_MISCREGS * sizeof(RegVal));
// If some state should be non-zero after a reset, set those values
here.
regVal[MISCREG_CR0] = 0x0000000060000010ULL;
@@ -134,6 +138,17 @@
{
fatal_if(vendorString.size() != 12,
"CPUID vendor string must be 12 characters\n");
+
+ _regClasses.insert(_regClasses.end(), {
+ { NumIntRegs },
+ { NumFloatRegs },
+ { 1 }, // Not applicable to X86
+ { 2 }, // Not applicable to X86
+ { 1 }, // Not applicable to X86
+ { NUM_CCREGS },
+ { NUM_MISCREGS },
+ });
+
clear();
}
@@ -409,13 +424,13 @@
void
ISA::serialize(CheckpointOut &cp) const
{
- SERIALIZE_ARRAY(regVal, NumMiscRegs);
+ SERIALIZE_ARRAY(regVal, NUM_MISCREGS);
}
void
ISA::unserialize(CheckpointIn &cp)
{
- UNSERIALIZE_ARRAY(regVal, NumMiscRegs);
+ UNSERIALIZE_ARRAY(regVal, NUM_MISCREGS);
updateHandyM5Reg(regVal[MISCREG_EFER],
regVal[MISCREG_CR0],
regVal[MISCREG_CS_ATTR],
diff --git a/src/arch/x86/registers.hh b/src/arch/x86/registers.hh
index a29f1b8..572fa3d 100644
--- a/src/arch/x86/registers.hh
+++ b/src/arch/x86/registers.hh
@@ -49,8 +49,6 @@
namespace X86ISA
{
-const int NumMiscRegs = NUM_MISCREGS;
-
const int NumIntArchRegs = NUM_INTREGS;
const int NumIntRegs = NumIntArchRegs + NumMicroIntRegs +
NumImplicitIntRegs;
const int NumCCRegs = NUM_CCREGS;
@@ -68,14 +66,9 @@
FP_Reg_Base = 128,
CC_Reg_Base = FP_Reg_Base + NumFloatRegs,
Misc_Reg_Base = CC_Reg_Base + NumCCRegs,
- Max_Reg_Index = Misc_Reg_Base + NumMiscRegs
+ Max_Reg_Index = Misc_Reg_Base + NUM_MISCREGS
};
-const int NumVecRegs = 1; // Not applicable to x86
- // (1 to prevent warnings)
-const int NumVecPredRegs = 1; // Not applicable to x86
- // (1 to prevent warnings)
-
// semantically meaningful register indices
//There is no such register in X86
const int ZeroReg = NUM_INTREGS;
--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/41734
To unsubscribe, or for help writing mail filters, visit
https://gem5-review.googlesource.com/settings
Gerrit-Project: public/gem5
Gerrit-Branch: develop
Gerrit-Change-Id: I1d1589db3dd4c51a5ec11e32348d394261e36d17
Gerrit-Change-Number: 41734
Gerrit-PatchSet: 1
Gerrit-Owner: Gabe Black <[email protected]>
Gerrit-MessageType: newchange
_______________________________________________
gem5-dev mailing list -- [email protected]
To unsubscribe send an email to [email protected]
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s