arch,sim: Merge initCPU and startupCPU.
authorGabe Black <gabeblack@google.com>
Wed, 29 Jan 2020 23:41:59 +0000 (15:41 -0800)
committerGabe Black <gabeblack@google.com>
Sat, 1 Feb 2020 12:31:40 +0000 (12:31 +0000)
These two functions were called in exactly one place one right after
the other, and served similar purposes.

This change merges them together, and cleans them up slightly. It also
removes checks for FullSystem, since those functions are only called
in full system to begin with.

Change-Id: I214f7d2d3f88960dccb5895c1241f61cd78716a8
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/24904
Reviewed-by: Gabe Black <gabeblack@google.com>
Maintainer: Gabe Black <gabeblack@google.com>
Tested-by: kokoro <noreply+kokoro@google.com>
16 files changed:
src/arch/alpha/ev5.cc
src/arch/alpha/utility.hh
src/arch/arm/utility.cc
src/arch/arm/utility.hh
src/arch/mips/utility.cc
src/arch/mips/utility.hh
src/arch/null/utility.hh
src/arch/power/utility.hh
src/arch/riscv/utility.cc
src/arch/riscv/utility.hh
src/arch/sparc/faults.hh
src/arch/sparc/utility.cc
src/arch/sparc/utility.hh
src/arch/x86/utility.cc
src/arch/x86/utility.hh
src/sim/system.cc

index 29910caa61c3a8b864d8b0c68553c886dc1f9d2d..4e2420dc950531274bdb55a5243382d7ab56c3ab 100644 (file)
@@ -73,11 +73,12 @@ initCPU(ThreadContext *tc, int cpuId)
     tc->setIntReg(16, cpuId);
     tc->setIntReg(0, cpuId);
 
-    AlphaFault *reset = new ResetFault;
+    Addr base = tc->readMiscRegNoEffect(IPR_PAL_BASE);
+    Addr offset = ResetFault().vect();
 
-    tc->pcState(tc->readMiscRegNoEffect(IPR_PAL_BASE) + reset->vect());
+    tc->pcState(base + offset);
 
-    delete reset;
+    tc->activate();
 }
 
 ////////////////////////////////////////////////////////////////////////
index 46af1217ee5e60de2807df716d9f88f7c4074ee4..a0f70a331bd83ace46b3f5c21111fa3aa443ff94 100644 (file)
@@ -60,8 +60,6 @@ inUserMode(ThreadContext *tc)
 
 // Alpha IPR register accessors
 inline bool PcPAL(Addr addr) { return addr & 0x3; }
-inline void startupCPU(ThreadContext *tc, int cpuId)
-{ tc->activate(); }
 
 ////////////////////////////////////////////////////////////////////////
 //
index e3d64fadf3000c0ca91865042689be5ff0fec9cb..627fc5357f00ec8e7172385d07a0f21e1643ea0f 100644 (file)
@@ -61,8 +61,8 @@ initCPU(ThreadContext *tc, int cpuId)
 
     // FPEXC.EN = 0
 
-    static Fault reset = std::make_shared<Reset>();
-    reset->invoke(tc);
+    Reset().invoke(tc);
+    tc->activate();
 }
 
 uint64_t
index 538c83173edc0b08407a831b9f0cf53e05c5ce9c..d209664cb0bb6865f9bcd325fbbf881258dbdf9e 100644 (file)
@@ -95,11 +95,6 @@ testPredicate(uint32_t nz, uint32_t c, uint32_t v, ConditionCode code)
     }
 }
 
-inline void startupCPU(ThreadContext *tc, int cpuId)
-{
-    tc->activate();
-}
-
 void copyRegs(ThreadContext *src, ThreadContext *dest);
 
 static inline void
index 24c451d3eab7e785ae6bd1286bb2e6dd1d83416c..a98b58e311681a1b2cb577aa3cc14dd0f0ff342a 100644 (file)
@@ -218,15 +218,11 @@ isSnan(void *val_ptr, int size)
 }
 
 void
-startupCPU(ThreadContext *tc, int cpuId)
+initCPU(ThreadContext *tc, int cpuId)
 {
     tc->activate();
 }
 
-void
-initCPU(ThreadContext *tc, int cpuId)
-{}
-
 void
 copyRegs(ThreadContext *src, ThreadContext *dest)
 {
index 0cd066f3ee5f3bc0badbfc07e9ebbc798e337699..67fe3a45b61cf59ea0e0d86cd801c5696e377148 100644 (file)
@@ -103,7 +103,6 @@ RoundPage(Addr addr)
 //
 // CPU Utility
 //
-void startupCPU(ThreadContext *tc, int cpuId);
 void initCPU(ThreadContext *tc, int cpuId);
 
 void copyRegs(ThreadContext *src, ThreadContext *dest);
index d92e55221e7b60b7037b1265fab21192a7561dba..69055c706d047289bc0193ede8c187d26798a7ad 100644 (file)
 #include "base/types.hh"
 #include "cpu/thread_context.hh"
 
-namespace NullISA {
+namespace NullISA
+{
 
-inline uint64_t getArgument(ThreadContext *tc, int &number, uint16_t size,
-                            bool fp) { return 0; }
+static inline uint64_t
+getArgument(ThreadContext *tc, int &number, uint16_t size, bool fp)
+{
+    return 0;
+}
 
 inline void initCPU(ThreadContext *tc, int cpuId) {}
-inline void startupCPU(ThreadContext *tc, int cpuId) {}
 
 }
 
index b41533e659bc107fe39e8b8ac79d902e5a11e21b..3ae1d82f7c787f7882c5c9ae2b68889035928e3c 100644 (file)
@@ -49,14 +49,7 @@ buildRetPC(const PCState &curPC, const PCState &callPC)
     return retPC;
 }
 
-inline void
-startupCPU(ThreadContext *tc, int cpuId)
-{
-    tc->activate();
-}
-
-void
-copyRegs(ThreadContext *src, ThreadContext *dest);
+void copyRegs(ThreadContext *src, ThreadContext *dest);
 
 static inline void
 copyMiscRegs(ThreadContext *src, ThreadContext *dest)
index 6e21a0484c3b69490f58d51b9afad144580bb982..949d7c66f95ea5e78b88cb2a3f87f6f0f677013a 100644 (file)
@@ -37,8 +37,8 @@ namespace RiscvISA
 
 void initCPU(ThreadContext *tc, int cpuId)
 {
-    static Fault reset = std::make_shared<Reset>();
-    reset->invoke(tc);
+    Reset().invoke(tc);
+    tc->activate();
 }
 
-}
\ No newline at end of file
+}
index 6c0fcc130f583a483732594d9092d18b031febe8..f6e1f348ab6b683b5a63f6b6ccb4d7d284d1d346 100644 (file)
@@ -117,11 +117,6 @@ getArgument(ThreadContext *tc, int &number, uint16_t size, bool fp)
     return 0;
 }
 
-inline void startupCPU(ThreadContext *tc, int cpuId)
-{
-    tc->activate();
-}
-
 inline void
 copyRegs(ThreadContext *src, ThreadContext *dest)
 {
index 2c44d51d45509bdf492b212aaf3c929b59dcee91..b3827fc779b939f00f071a925efacc5a01b84a04 100644 (file)
@@ -99,7 +99,8 @@ class SparcFault : public SparcFaultBase
 
 class PowerOnReset : public SparcFault<PowerOnReset>
 {
-    void invoke(ThreadContext * tc, const StaticInstPtr &inst =
+  public:
+    void invoke(ThreadContext *tc, const StaticInstPtr &inst =
                 StaticInst::nullStaticInstPtr);
 };
 
index 5b05eaf71b45b4ccfeeed2ed2032a044836ffd54..245f455e4424e96b68c3c0ebc4e2552418c5234c 100644 (file)
@@ -257,9 +257,12 @@ skipFunction(ThreadContext *tc)
 void
 initCPU(ThreadContext *tc, int cpuId)
 {
-    static Fault por = std::make_shared<PowerOnReset>();
-    if (cpuId == 0)
-        por->invoke(tc);
+    // Other CPUs will get activated by IPIs.
+    if (cpuId != 0)
+        return;
+
+    PowerOnReset().invoke(tc);
+    tc->activate();
 }
 
 } // namespace SPARC_ISA
index 48476cb044f66661c1ac52564178588412c69d8f..74e0c11b86179c24bb36bc8b8d6b392c005c710e 100644 (file)
@@ -64,14 +64,6 @@ inUserMode(ThreadContext *tc)
 
 void initCPU(ThreadContext *tc, int cpuId);
 
-inline void
-startupCPU(ThreadContext *tc, int cpuId)
-{
-    // Other CPUs will get activated by IPIs
-    if (cpuId == 0 || !FullSystem)
-        tc->activate();
-}
-
 void copyRegs(ThreadContext *src, ThreadContext *dest);
 
 void copyMiscRegs(ThreadContext *src, ThreadContext *dest);
index 75f242d83e0b6dfc0d9c9b1a5263d97f6674d8d3..21765ceae32fb2ce5abec43aa8c1b0199f1d3011 100644 (file)
@@ -75,11 +75,8 @@ void
 initCPU(ThreadContext *tc, int cpuId)
 {
     InitInterrupt(0).invoke(tc);
-}
 
-void startupCPU(ThreadContext *tc, int cpuId)
-{
-    if (cpuId == 0 || !FullSystem) {
+    if (cpuId == 0) {
         tc->activate();
     } else {
         // This is an application processor (AP). It should be initialized to
index c88a4c7771fb6b2a8e1f93ee50f3393142b33e88..88c7a17e41c8dee246bdc040d9f17ab421ca1966 100644 (file)
@@ -71,8 +71,6 @@ namespace X86ISA
 
     void initCPU(ThreadContext *tc, int cpuId);
 
-    void startupCPU(ThreadContext *tc, int cpuId);
-
     void copyRegs(ThreadContext *src, ThreadContext *dest);
 
     void copyMiscRegs(ThreadContext *src, ThreadContext *dest);
index e59c4047798919dc793e197e8cc220e5c242545d..368eb5419d3af8abebc8105d72e848db29f79fa8 100644 (file)
@@ -349,10 +349,8 @@ void
 System::initState()
 {
     if (FullSystem) {
-        for (auto *tc: threadContexts) {
+        for (auto *tc: threadContexts)
             TheISA::initCPU(tc, tc->contextId());
-            TheISA::startupCPU(tc, tc->contextId());
-        }
         // Moved from the constructor to here since it relies on the
         // address map being resolved in the interconnect
         /**