Gabe Black has uploaded this change for review. (
https://gem5-review.googlesource.com/c/public/gem5/+/52040 )
Change subject: arch: Add a newPCState method to the ISA class.
......................................................................
arch: Add a newPCState method to the ISA class.
This method is the seed which creates a new PCState object of the
appropriate type. It can be used to initialize PCStateBase *s so that they
always point to something valid and can be manipulated without having to
first check if there's something there, as opposed to the alternative
where a pointer might be null until it's first pointed at something.
Change-Id: If06ee633846603acbfd2432f3d8bac6746a8b729
---
M src/arch/generic/isa.hh
M src/arch/riscv/isa.hh
M src/arch/sparc/isa.hh
M src/arch/power/isa.hh
M src/arch/arm/isa.hh
M src/arch/x86/isa.hh
M src/arch/mips/isa.hh
7 files changed, 59 insertions(+), 1 deletion(-)
diff --git a/src/arch/arm/isa.hh b/src/arch/arm/isa.hh
index ed97b54..156516e 100644
--- a/src/arch/arm/isa.hh
+++ b/src/arch/arm/isa.hh
@@ -43,6 +43,7 @@
#include "arch/arm/isa_device.hh"
#include "arch/arm/mmu.hh"
+#include "arch/arm/pcstate.hh"
#include "arch/arm/regs/int.hh"
#include "arch/arm/regs/misc.hh"
#include "arch/arm/self_debug.hh"
@@ -869,6 +870,12 @@
void setupThreadContext();
+ PCStateBase *
+ newPCState(Addr new_inst_addr=0) const override
+ {
+ return new PCState(new_inst_addr);
+ }
+
void takeOverFrom(ThreadContext *new_tc,
ThreadContext *old_tc) override;
diff --git a/src/arch/generic/isa.hh b/src/arch/generic/isa.hh
index 9c842e0..f660e08 100644
--- a/src/arch/generic/isa.hh
+++ b/src/arch/generic/isa.hh
@@ -42,6 +42,7 @@
#include <vector>
+#include "arch/generic/pcstate.hh"
#include "cpu/reg_class.hh"
#include "enums/VecRegRenameMode.hh"
#include "mem/packet.hh"
@@ -67,6 +68,7 @@
RegClasses _regClasses;
public:
+ virtual PCStateBase *newPCState(Addr new_inst_addr=0) const = 0;
virtual void takeOverFrom(ThreadContext *new_tc, ThreadContext
*old_tc) {}
virtual void setThreadContext(ThreadContext *_tc) { tc = _tc; }
diff --git a/src/arch/mips/isa.hh b/src/arch/mips/isa.hh
index 915039f..c7fbac7 100644
--- a/src/arch/mips/isa.hh
+++ b/src/arch/mips/isa.hh
@@ -34,6 +34,7 @@
#include <vector>
#include "arch/generic/isa.hh"
+#include "arch/mips/pcstate.hh"
#include "arch/mips/regs/misc.hh"
#include "arch/mips/types.hh"
#include "base/types.hh"
@@ -78,6 +79,12 @@
public:
void clear();
+ PCStateBase *
+ newPCState(Addr new_inst_addr=0) const override
+ {
+ return new PCState(new_inst_addr);
+ }
+
public:
void configCP();
diff --git a/src/arch/power/isa.hh b/src/arch/power/isa.hh
index d563ebe..6c42f32 100644
--- a/src/arch/power/isa.hh
+++ b/src/arch/power/isa.hh
@@ -32,6 +32,7 @@
#define __ARCH_POWER_ISA_HH__
#include "arch/generic/isa.hh"
+#include "arch/power/pcstate.hh"
#include "arch/power/regs/misc.hh"
#include "arch/power/types.hh"
#include "base/logging.hh"
@@ -58,6 +59,12 @@
public:
void clear() {}
+ PCStateBase *
+ newPCState(Addr new_inst_addr=0) const override
+ {
+ return new PCState(new_inst_addr);
+ }
+
public:
RegVal
readMiscRegNoEffect(int misc_reg) const
diff --git a/src/arch/riscv/isa.hh b/src/arch/riscv/isa.hh
index 4521c52..6435b74 100644
--- a/src/arch/riscv/isa.hh
+++ b/src/arch/riscv/isa.hh
@@ -37,6 +37,7 @@
#include <vector>
#include "arch/generic/isa.hh"
+#include "arch/riscv/pcstate.hh"
#include "arch/riscv/types.hh"
#include "base/types.hh"
@@ -76,6 +77,12 @@
void clear();
+ PCStateBase *
+ newPCState(Addr new_inst_addr=0) const override
+ {
+ return new PCState(new_inst_addr);
+ }
+
public:
RegVal readMiscRegNoEffect(int misc_reg) const;
RegVal readMiscReg(int misc_reg);
diff --git a/src/arch/sparc/isa.hh b/src/arch/sparc/isa.hh
index 4d2b15c..f26de40 100644
--- a/src/arch/sparc/isa.hh
+++ b/src/arch/sparc/isa.hh
@@ -33,6 +33,7 @@
#include <string>
#include "arch/generic/isa.hh"
+#include "arch/sparc/pcstate.hh"
#include "arch/sparc/regs/int.hh"
#include "arch/sparc/regs/misc.hh"
#include "arch/sparc/sparc_traits.hh"
@@ -166,9 +167,14 @@
void reloadRegMap();
public:
-
void clear();
+ PCStateBase *
+ newPCState(Addr new_inst_addr=0) const override
+ {
+ return new PCState(new_inst_addr);
+ }
+
void serialize(CheckpointOut &cp) const override;
void unserialize(CheckpointIn &cp) override;
diff --git a/src/arch/x86/isa.hh b/src/arch/x86/isa.hh
index eb4890c..ee5664a 100644
--- a/src/arch/x86/isa.hh
+++ b/src/arch/x86/isa.hh
@@ -33,6 +33,7 @@
#include <string>
#include "arch/generic/isa.hh"
+#include "arch/x86/pcstate.hh"
#include "arch/x86/regs/float.hh"
#include "arch/x86/regs/misc.hh"
#include "base/types.hh"
@@ -59,6 +60,12 @@
public:
void clear();
+ PCStateBase *
+ newPCState(Addr new_inst_addr=0) const override
+ {
+ return new PCState(new_inst_addr);
+ }
+
using Params = X86ISAParams;
ISA(const Params &p);
--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/52040
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: If06ee633846603acbfd2432f3d8bac6746a8b729
Gerrit-Change-Number: 52040
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