arch,cpu: Add a setThreadContext method to the ISA class.
authorGabe Black <gabeblack@google.com>
Mon, 18 May 2020 08:59:40 +0000 (01:59 -0700)
committerGabe Black <gabeblack@google.com>
Fri, 12 Jun 2020 05:41:41 +0000 (05:41 +0000)
Also remove ThreadContext pointer parameters to some of the methods in
the ISA classes.

Change-Id: I8e502b1857d299cb2e759a9734a1df4f65f31efe
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/29233
Reviewed-by: Brandon Potter <Brandon.Potter@amd.com>
Maintainer: Gabe Black <gabeblack@google.com>
Tested-by: kokoro <noreply+kokoro@google.com>
26 files changed:
src/arch/arm/insts/static_inst.cc
src/arch/arm/isa.cc
src/arch/arm/isa.hh
src/arch/generic/isa.hh
src/arch/mips/isa.cc
src/arch/mips/isa.hh
src/arch/power/isa.hh
src/arch/riscv/isa.cc
src/arch/riscv/isa.hh
src/arch/sparc/isa.cc
src/arch/sparc/isa.hh
src/arch/sparc/ua2005.cc
src/arch/x86/isa.cc
src/arch/x86/isa.hh
src/cpu/SConscript
src/cpu/base.cc
src/cpu/cpuevent.cc [deleted file]
src/cpu/cpuevent.hh [deleted file]
src/cpu/kvm/base.cc
src/cpu/minor/cpu.cc
src/cpu/o3/cpu.cc
src/cpu/o3/thread_context_impl.hh
src/cpu/simple/base.cc
src/cpu/simple/base.hh
src/cpu/simple_thread.cc
src/cpu/simple_thread.hh

index 9c686f6cacb40c7419cc4aa0405df15939c81fed..9966b9ee522544775fb3bceb684b7c5010db0761 100644 (file)
@@ -1171,7 +1171,7 @@ unsigned
 ArmStaticInst::getCurSveVecLenInBits(ThreadContext *tc)
 {
     auto *isa = static_cast<ArmISA::ISA *>(tc->getIsaPtr());
-    return isa->getCurSveVecLenInBits(tc);
+    return isa->getCurSveVecLenInBits();
 }
 
 }
index b3ea91ef40cae5bd2e9de7529129251f231b123d..29c5538782f482f8be713862287268aaefa1e225 100644 (file)
@@ -119,20 +119,17 @@ ISA::params() const
     return dynamic_cast<const Params *>(_params);
 }
 
-void
-ISA::clear(ThreadContext *tc)
-{
-    clear();
-    // Invalidate cached copies of miscregs in the TLBs
-    getITBPtr(tc)->invalidateMiscReg();
-    getDTBPtr(tc)->invalidateMiscReg();
-}
-
 void
 ISA::clear()
 {
     const Params *p(params());
 
+    // Invalidate cached copies of miscregs in the TLBs
+    if (tc) {
+        getITBPtr(tc)->invalidateMiscReg();
+        getDTBPtr(tc)->invalidateMiscReg();
+    }
+
     SCTLR sctlr_rst = miscRegs[MISCREG_SCTLR_RST];
     memset(miscRegs, 0, sizeof(miscRegs));
 
@@ -421,31 +418,40 @@ ISA::initID64(const ArmISAParams *p)
 }
 
 void
-ISA::startup(ThreadContext *tc)
+ISA::startup()
 {
-    pmu->setThreadContext(tc);
+    BaseISA::startup();
 
-    if (system) {
-        Gicv3 *gicv3 = dynamic_cast<Gicv3 *>(system->getGIC());
-        if (gicv3) {
-            gicv3CpuInterface.reset(gicv3->getCPUInterface(tc->contextId()));
-            gicv3CpuInterface->setISA(this);
-            gicv3CpuInterface->setThreadContext(tc);
-        }
-    }
+    if (tc)
+        setupThreadContext();
 
     afterStartup = true;
 }
 
 void
-ISA::takeOverFrom(ThreadContext *new_tc, ThreadContext *old_tc)
+ISA::setupThreadContext()
 {
-    pmu->setThreadContext(new_tc);
+    pmu->setThreadContext(tc);
 
-    if (system && gicv3CpuInterface) {
-        gicv3CpuInterface->setISA(this);
-        gicv3CpuInterface->setThreadContext(new_tc);
-    }
+    if (!system)
+        return;
+
+    Gicv3 *gicv3 = dynamic_cast<Gicv3 *>(system->getGIC());
+    if (!gicv3)
+        return;
+
+    if (!gicv3CpuInterface)
+        gicv3CpuInterface.reset(gicv3->getCPUInterface(tc->contextId()));
+
+    gicv3CpuInterface->setISA(this);
+    gicv3CpuInterface->setThreadContext(tc);
+}
+
+void
+ISA::takeOverFrom(ThreadContext *new_tc, ThreadContext *old_tc)
+{
+    tc = new_tc;
+    setupThreadContext();
 }
 
 RegVal
@@ -473,7 +479,7 @@ ISA::readMiscRegNoEffect(int misc_reg) const
 
 
 RegVal
-ISA::readMiscReg(int misc_reg, ThreadContext *tc)
+ISA::readMiscReg(int misc_reg)
 {
     CPSR cpsr = 0;
     PCState pc = 0;
@@ -760,12 +766,12 @@ ISA::readMiscReg(int misc_reg, ThreadContext *tc)
       // Generic Timer registers
       case MISCREG_CNTFRQ ... MISCREG_CNTVOFF:
       case MISCREG_CNTFRQ_EL0 ... MISCREG_CNTVOFF_EL2:
-        return getGenericTimer(tc).readMiscReg(misc_reg);
+        return getGenericTimer().readMiscReg(misc_reg);
 
       case MISCREG_ICC_AP0R0 ... MISCREG_ICH_LRC15:
       case MISCREG_ICC_PMR_EL1 ... MISCREG_ICC_IGRPEN1_EL3:
       case MISCREG_ICH_AP0R0_EL2 ... MISCREG_ICH_LR15_EL2:
-        return getGICv3CPUInterface(tc).readMiscReg(misc_reg);
+        return getGICv3CPUInterface().readMiscReg(misc_reg);
 
       default:
         break;
@@ -797,7 +803,7 @@ ISA::setMiscRegNoEffect(int misc_reg, RegVal val)
 }
 
 void
-ISA::setMiscReg(int misc_reg, RegVal val, ThreadContext *tc)
+ISA::setMiscReg(int misc_reg, RegVal val)
 {
 
     RegVal newVal = val;
@@ -827,7 +833,7 @@ ISA::setMiscReg(int misc_reg, RegVal val, ThreadContext *tc)
         pc.nextJazelle(cpsr.j);
         pc.illegalExec(cpsr.il == 1);
 
-        tc->getDecoderPtr()->setSveLen((getCurSveVecLenInBits(tc) >> 7) - 1);
+        tc->getDecoderPtr()->setSveLen((getCurSveVecLenInBits() >> 7) - 1);
 
         // Follow slightly different semantics if a CheckerCPU object
         // is connected
@@ -1132,8 +1138,8 @@ ISA::setMiscReg(int misc_reg, RegVal val, ThreadContext *tc)
           // TLB Invalidate All
           case MISCREG_TLBIALL: // TLBI all entries, EL0&1,
             {
-                assert32(tc);
-                scr = readMiscReg(MISCREG_SCR, tc);
+                assert32();
+                scr = readMiscReg(MISCREG_SCR);
 
                 TLBIALL tlbiOp(EL1, haveSecurity && !scr.ns);
                 tlbiOp(tc);
@@ -1142,8 +1148,8 @@ ISA::setMiscReg(int misc_reg, RegVal val, ThreadContext *tc)
           // TLB Invalidate All, Inner Shareable
           case MISCREG_TLBIALLIS:
             {
-                assert32(tc);
-                scr = readMiscReg(MISCREG_SCR, tc);
+                assert32();
+                scr = readMiscReg(MISCREG_SCR);
 
                 TLBIALL tlbiOp(EL1, haveSecurity && !scr.ns);
                 tlbiOp.broadcast(tc);
@@ -1152,8 +1158,8 @@ ISA::setMiscReg(int misc_reg, RegVal val, ThreadContext *tc)
           // Instruction TLB Invalidate All
           case MISCREG_ITLBIALL:
             {
-                assert32(tc);
-                scr = readMiscReg(MISCREG_SCR, tc);
+                assert32();
+                scr = readMiscReg(MISCREG_SCR);
 
                 ITLBIALL tlbiOp(EL1, haveSecurity && !scr.ns);
                 tlbiOp(tc);
@@ -1162,8 +1168,8 @@ ISA::setMiscReg(int misc_reg, RegVal val, ThreadContext *tc)
           // Data TLB Invalidate All
           case MISCREG_DTLBIALL:
             {
-                assert32(tc);
-                scr = readMiscReg(MISCREG_SCR, tc);
+                assert32();
+                scr = readMiscReg(MISCREG_SCR);
 
                 DTLBIALL tlbiOp(EL1, haveSecurity && !scr.ns);
                 tlbiOp(tc);
@@ -1176,8 +1182,8 @@ ISA::setMiscReg(int misc_reg, RegVal val, ThreadContext *tc)
           case MISCREG_TLBIMVA:
           case MISCREG_TLBIMVAL:
             {
-                assert32(tc);
-                scr = readMiscReg(MISCREG_SCR, tc);
+                assert32();
+                scr = readMiscReg(MISCREG_SCR);
 
                 TLBIMVA tlbiOp(EL1,
                                haveSecurity && !scr.ns,
@@ -1191,8 +1197,8 @@ ISA::setMiscReg(int misc_reg, RegVal val, ThreadContext *tc)
           case MISCREG_TLBIMVAIS:
           case MISCREG_TLBIMVALIS:
             {
-                assert32(tc);
-                scr = readMiscReg(MISCREG_SCR, tc);
+                assert32();
+                scr = readMiscReg(MISCREG_SCR);
 
                 TLBIMVA tlbiOp(EL1,
                                haveSecurity && !scr.ns,
@@ -1205,8 +1211,8 @@ ISA::setMiscReg(int misc_reg, RegVal val, ThreadContext *tc)
           // TLB Invalidate by ASID match
           case MISCREG_TLBIASID:
             {
-                assert32(tc);
-                scr = readMiscReg(MISCREG_SCR, tc);
+                assert32();
+                scr = readMiscReg(MISCREG_SCR);
 
                 TLBIASID tlbiOp(EL1,
                                 haveSecurity && !scr.ns,
@@ -1218,8 +1224,8 @@ ISA::setMiscReg(int misc_reg, RegVal val, ThreadContext *tc)
           // TLB Invalidate by ASID match, Inner Shareable
           case MISCREG_TLBIASIDIS:
             {
-                assert32(tc);
-                scr = readMiscReg(MISCREG_SCR, tc);
+                assert32();
+                scr = readMiscReg(MISCREG_SCR);
 
                 TLBIASID tlbiOp(EL1,
                                 haveSecurity && !scr.ns,
@@ -1235,8 +1241,8 @@ ISA::setMiscReg(int misc_reg, RegVal val, ThreadContext *tc)
           case MISCREG_TLBIMVAA:
           case MISCREG_TLBIMVAAL:
             {
-                assert32(tc);
-                scr = readMiscReg(MISCREG_SCR, tc);
+                assert32();
+                scr = readMiscReg(MISCREG_SCR);
 
                 TLBIMVAA tlbiOp(EL1, haveSecurity && !scr.ns,
                                 mbits(newVal, 31,12));
@@ -1248,8 +1254,8 @@ ISA::setMiscReg(int misc_reg, RegVal val, ThreadContext *tc)
           case MISCREG_TLBIMVAAIS:
           case MISCREG_TLBIMVAALIS:
             {
-                assert32(tc);
-                scr = readMiscReg(MISCREG_SCR, tc);
+                assert32();
+                scr = readMiscReg(MISCREG_SCR);
 
                 TLBIMVAA tlbiOp(EL1, haveSecurity && !scr.ns,
                                 mbits(newVal, 31,12));
@@ -1264,8 +1270,8 @@ ISA::setMiscReg(int misc_reg, RegVal val, ThreadContext *tc)
           case MISCREG_TLBIMVAH:
           case MISCREG_TLBIMVALH:
             {
-                assert32(tc);
-                scr = readMiscReg(MISCREG_SCR, tc);
+                assert32();
+                scr = readMiscReg(MISCREG_SCR);
 
                 TLBIMVAA tlbiOp(EL2, haveSecurity && !scr.ns,
                                 mbits(newVal, 31,12));
@@ -1277,8 +1283,8 @@ ISA::setMiscReg(int misc_reg, RegVal val, ThreadContext *tc)
           case MISCREG_TLBIMVAHIS:
           case MISCREG_TLBIMVALHIS:
             {
-                assert32(tc);
-                scr = readMiscReg(MISCREG_SCR, tc);
+                assert32();
+                scr = readMiscReg(MISCREG_SCR);
 
                 TLBIMVAA tlbiOp(EL2, haveSecurity && !scr.ns,
                                 mbits(newVal, 31,12));
@@ -1293,8 +1299,8 @@ ISA::setMiscReg(int misc_reg, RegVal val, ThreadContext *tc)
           case MISCREG_TLBIIPAS2:
           case MISCREG_TLBIIPAS2L:
             {
-                assert32(tc);
-                scr = readMiscReg(MISCREG_SCR, tc);
+                assert32();
+                scr = readMiscReg(MISCREG_SCR);
 
                 TLBIIPA tlbiOp(EL1,
                                haveSecurity && !scr.ns,
@@ -1308,8 +1314,8 @@ ISA::setMiscReg(int misc_reg, RegVal val, ThreadContext *tc)
           case MISCREG_TLBIIPAS2IS:
           case MISCREG_TLBIIPAS2LIS:
             {
-                assert32(tc);
-                scr = readMiscReg(MISCREG_SCR, tc);
+                assert32();
+                scr = readMiscReg(MISCREG_SCR);
 
                 TLBIIPA tlbiOp(EL1,
                                haveSecurity && !scr.ns,
@@ -1321,8 +1327,8 @@ ISA::setMiscReg(int misc_reg, RegVal val, ThreadContext *tc)
           // Instruction TLB Invalidate by VA
           case MISCREG_ITLBIMVA:
             {
-                assert32(tc);
-                scr = readMiscReg(MISCREG_SCR, tc);
+                assert32();
+                scr = readMiscReg(MISCREG_SCR);
 
                 ITLBIMVA tlbiOp(EL1,
                                 haveSecurity && !scr.ns,
@@ -1335,8 +1341,8 @@ ISA::setMiscReg(int misc_reg, RegVal val, ThreadContext *tc)
           // Data TLB Invalidate by VA
           case MISCREG_DTLBIMVA:
             {
-                assert32(tc);
-                scr = readMiscReg(MISCREG_SCR, tc);
+                assert32();
+                scr = readMiscReg(MISCREG_SCR);
 
                 DTLBIMVA tlbiOp(EL1,
                                 haveSecurity && !scr.ns,
@@ -1349,8 +1355,8 @@ ISA::setMiscReg(int misc_reg, RegVal val, ThreadContext *tc)
           // Instruction TLB Invalidate by ASID match
           case MISCREG_ITLBIASID:
             {
-                assert32(tc);
-                scr = readMiscReg(MISCREG_SCR, tc);
+                assert32();
+                scr = readMiscReg(MISCREG_SCR);
 
                 ITLBIASID tlbiOp(EL1,
                                  haveSecurity && !scr.ns,
@@ -1362,8 +1368,8 @@ ISA::setMiscReg(int misc_reg, RegVal val, ThreadContext *tc)
           // Data TLB Invalidate by ASID match
           case MISCREG_DTLBIASID:
             {
-                assert32(tc);
-                scr = readMiscReg(MISCREG_SCR, tc);
+                assert32();
+                scr = readMiscReg(MISCREG_SCR);
 
                 DTLBIASID tlbiOp(EL1,
                                  haveSecurity && !scr.ns,
@@ -1375,7 +1381,7 @@ ISA::setMiscReg(int misc_reg, RegVal val, ThreadContext *tc)
           // TLB Invalidate All, Non-Secure Non-Hyp
           case MISCREG_TLBIALLNSNH:
             {
-                assert32(tc);
+                assert32();
 
                 TLBIALLN tlbiOp(EL1);
                 tlbiOp(tc);
@@ -1384,7 +1390,7 @@ ISA::setMiscReg(int misc_reg, RegVal val, ThreadContext *tc)
           // TLB Invalidate All, Non-Secure Non-Hyp, Inner Shareable
           case MISCREG_TLBIALLNSNHIS:
             {
-                assert32(tc);
+                assert32();
 
                 TLBIALLN tlbiOp(EL1);
                 tlbiOp.broadcast(tc);
@@ -1393,7 +1399,7 @@ ISA::setMiscReg(int misc_reg, RegVal val, ThreadContext *tc)
           // TLB Invalidate All, Hyp mode
           case MISCREG_TLBIALLH:
             {
-                assert32(tc);
+                assert32();
 
                 TLBIALLN tlbiOp(EL2);
                 tlbiOp(tc);
@@ -1402,7 +1408,7 @@ ISA::setMiscReg(int misc_reg, RegVal val, ThreadContext *tc)
           // TLB Invalidate All, Hyp mode, Inner Shareable
           case MISCREG_TLBIALLHIS:
             {
-                assert32(tc);
+                assert32();
 
                 TLBIALLN tlbiOp(EL2);
                 tlbiOp.broadcast(tc);
@@ -1411,7 +1417,7 @@ ISA::setMiscReg(int misc_reg, RegVal val, ThreadContext *tc)
           // AArch64 TLB Invalidate All, EL3
           case MISCREG_TLBI_ALLE3:
             {
-                assert64(tc);
+                assert64();
 
                 TLBIALL tlbiOp(EL3, true);
                 tlbiOp(tc);
@@ -1420,7 +1426,7 @@ ISA::setMiscReg(int misc_reg, RegVal val, ThreadContext *tc)
           // AArch64 TLB Invalidate All, EL3, Inner Shareable
           case MISCREG_TLBI_ALLE3IS:
             {
-                assert64(tc);
+                assert64();
 
                 TLBIALL tlbiOp(EL3, true);
                 tlbiOp.broadcast(tc);
@@ -1430,8 +1436,8 @@ ISA::setMiscReg(int misc_reg, RegVal val, ThreadContext *tc)
           case MISCREG_TLBI_ALLE2:
           case MISCREG_TLBI_ALLE2IS:
             {
-                assert64(tc);
-                scr = readMiscReg(MISCREG_SCR, tc);
+                assert64();
+                scr = readMiscReg(MISCREG_SCR);
 
                 TLBIALL tlbiOp(EL2, haveSecurity && !scr.ns);
                 tlbiOp(tc);
@@ -1443,8 +1449,8 @@ ISA::setMiscReg(int misc_reg, RegVal val, ThreadContext *tc)
           case MISCREG_TLBI_VMALLS12E1:
             // @todo: handle VMID and stage 2 to enable Virtualization
             {
-                assert64(tc);
-                scr = readMiscReg(MISCREG_SCR, tc);
+                assert64();
+                scr = readMiscReg(MISCREG_SCR);
 
                 TLBIALL tlbiOp(EL1, haveSecurity && !scr.ns);
                 tlbiOp(tc);
@@ -1456,8 +1462,8 @@ ISA::setMiscReg(int misc_reg, RegVal val, ThreadContext *tc)
           case MISCREG_TLBI_VMALLS12E1IS:
             // @todo: handle VMID and stage 2 to enable Virtualization
             {
-                assert64(tc);
-                scr = readMiscReg(MISCREG_SCR, tc);
+                assert64();
+                scr = readMiscReg(MISCREG_SCR);
 
                 TLBIALL tlbiOp(EL1, haveSecurity && !scr.ns);
                 tlbiOp.broadcast(tc);
@@ -1471,7 +1477,7 @@ ISA::setMiscReg(int misc_reg, RegVal val, ThreadContext *tc)
           case MISCREG_TLBI_VAE3_Xt:
           case MISCREG_TLBI_VALE3_Xt:
             {
-                assert64(tc);
+                assert64();
 
                 TLBIMVA tlbiOp(EL3, true,
                                static_cast<Addr>(bits(newVal, 43, 0)) << 12,
@@ -1483,7 +1489,7 @@ ISA::setMiscReg(int misc_reg, RegVal val, ThreadContext *tc)
           case MISCREG_TLBI_VAE3IS_Xt:
           case MISCREG_TLBI_VALE3IS_Xt:
             {
-                assert64(tc);
+                assert64();
 
                 TLBIMVA tlbiOp(EL3, true,
                                static_cast<Addr>(bits(newVal, 43, 0)) << 12,
@@ -1496,8 +1502,8 @@ ISA::setMiscReg(int misc_reg, RegVal val, ThreadContext *tc)
           case MISCREG_TLBI_VAE2_Xt:
           case MISCREG_TLBI_VALE2_Xt:
             {
-                assert64(tc);
-                scr = readMiscReg(MISCREG_SCR, tc);
+                assert64();
+                scr = readMiscReg(MISCREG_SCR);
 
                 TLBIMVA tlbiOp(EL2, haveSecurity && !scr.ns,
                                static_cast<Addr>(bits(newVal, 43, 0)) << 12,
@@ -1509,8 +1515,8 @@ ISA::setMiscReg(int misc_reg, RegVal val, ThreadContext *tc)
           case MISCREG_TLBI_VAE2IS_Xt:
           case MISCREG_TLBI_VALE2IS_Xt:
             {
-                assert64(tc);
-                scr = readMiscReg(MISCREG_SCR, tc);
+                assert64();
+                scr = readMiscReg(MISCREG_SCR);
 
                 TLBIMVA tlbiOp(EL2, haveSecurity && !scr.ns,
                                static_cast<Addr>(bits(newVal, 43, 0)) << 12,
@@ -1523,8 +1529,8 @@ ISA::setMiscReg(int misc_reg, RegVal val, ThreadContext *tc)
           case MISCREG_TLBI_VAE1_Xt:
           case MISCREG_TLBI_VALE1_Xt:
             {
-                assert64(tc);
-                scr = readMiscReg(MISCREG_SCR, tc);
+                assert64();
+                scr = readMiscReg(MISCREG_SCR);
                 auto asid = haveLargeAsid64 ? bits(newVal, 63, 48) :
                                               bits(newVal, 55, 48);
 
@@ -1539,8 +1545,8 @@ ISA::setMiscReg(int misc_reg, RegVal val, ThreadContext *tc)
           case MISCREG_TLBI_VAE1IS_Xt:
           case MISCREG_TLBI_VALE1IS_Xt:
             {
-                assert64(tc);
-                scr = readMiscReg(MISCREG_SCR, tc);
+                assert64();
+                scr = readMiscReg(MISCREG_SCR);
                 auto asid = haveLargeAsid64 ? bits(newVal, 63, 48) :
                                               bits(newVal, 55, 48);
 
@@ -1555,8 +1561,8 @@ ISA::setMiscReg(int misc_reg, RegVal val, ThreadContext *tc)
           // @todo: handle VMID to enable Virtualization
           case MISCREG_TLBI_ASIDE1_Xt:
             {
-                assert64(tc);
-                scr = readMiscReg(MISCREG_SCR, tc);
+                assert64();
+                scr = readMiscReg(MISCREG_SCR);
                 auto asid = haveLargeAsid64 ? bits(newVal, 63, 48) :
                                               bits(newVal, 55, 48);
 
@@ -1567,8 +1573,8 @@ ISA::setMiscReg(int misc_reg, RegVal val, ThreadContext *tc)
           // AArch64 TLB Invalidate by ASID, EL1, Inner Shareable
           case MISCREG_TLBI_ASIDE1IS_Xt:
             {
-                assert64(tc);
-                scr = readMiscReg(MISCREG_SCR, tc);
+                assert64();
+                scr = readMiscReg(MISCREG_SCR);
                 auto asid = haveLargeAsid64 ? bits(newVal, 63, 48) :
                                               bits(newVal, 55, 48);
 
@@ -1582,8 +1588,8 @@ ISA::setMiscReg(int misc_reg, RegVal val, ThreadContext *tc)
           case MISCREG_TLBI_VAAE1_Xt:
           case MISCREG_TLBI_VAALE1_Xt:
             {
-                assert64(tc);
-                scr = readMiscReg(MISCREG_SCR, tc);
+                assert64();
+                scr = readMiscReg(MISCREG_SCR);
 
                 TLBIMVAA tlbiOp(EL1, haveSecurity && !scr.ns,
                     static_cast<Addr>(bits(newVal, 43, 0)) << 12);
@@ -1595,8 +1601,8 @@ ISA::setMiscReg(int misc_reg, RegVal val, ThreadContext *tc)
           case MISCREG_TLBI_VAAE1IS_Xt:
           case MISCREG_TLBI_VAALE1IS_Xt:
             {
-                assert64(tc);
-                scr = readMiscReg(MISCREG_SCR, tc);
+                assert64();
+                scr = readMiscReg(MISCREG_SCR);
 
                 TLBIMVAA tlbiOp(EL1, haveSecurity && !scr.ns,
                     static_cast<Addr>(bits(newVal, 43, 0)) << 12);
@@ -1609,8 +1615,8 @@ ISA::setMiscReg(int misc_reg, RegVal val, ThreadContext *tc)
           case MISCREG_TLBI_IPAS2E1_Xt:
           case MISCREG_TLBI_IPAS2LE1_Xt:
             {
-                assert64(tc);
-                scr = readMiscReg(MISCREG_SCR, tc);
+                assert64();
+                scr = readMiscReg(MISCREG_SCR);
 
                 TLBIIPA tlbiOp(EL1, haveSecurity && !scr.ns,
                                static_cast<Addr>(bits(newVal, 35, 0)) << 12);
@@ -1623,8 +1629,8 @@ ISA::setMiscReg(int misc_reg, RegVal val, ThreadContext *tc)
           case MISCREG_TLBI_IPAS2E1IS_Xt:
           case MISCREG_TLBI_IPAS2LE1IS_Xt:
             {
-                assert64(tc);
-                scr = readMiscReg(MISCREG_SCR, tc);
+                assert64();
+                scr = readMiscReg(MISCREG_SCR);
 
                 TLBIIPA tlbiOp(EL1, haveSecurity && !scr.ns,
                                static_cast<Addr>(bits(newVal, 35, 0)) << 12);
@@ -2077,18 +2083,17 @@ ISA::setMiscReg(int misc_reg, RegVal val, ThreadContext *tc)
           // Generic Timer registers
           case MISCREG_CNTFRQ ... MISCREG_CNTVOFF:
           case MISCREG_CNTFRQ_EL0 ... MISCREG_CNTVOFF_EL2:
-            getGenericTimer(tc).setMiscReg(misc_reg, newVal);
+            getGenericTimer().setMiscReg(misc_reg, newVal);
             break;
           case MISCREG_ICC_AP0R0 ... MISCREG_ICH_LRC15:
           case MISCREG_ICC_PMR_EL1 ... MISCREG_ICC_IGRPEN1_EL3:
           case MISCREG_ICH_AP0R0_EL2 ... MISCREG_ICH_LR15_EL2:
-            getGICv3CPUInterface(tc).setMiscReg(misc_reg, newVal);
+            getGICv3CPUInterface().setMiscReg(misc_reg, newVal);
             return;
           case MISCREG_ZCR_EL3:
           case MISCREG_ZCR_EL2:
           case MISCREG_ZCR_EL1:
-            tc->getDecoderPtr()->setSveLen(
-                (getCurSveVecLenInBits(tc) >> 7) - 1);
+            tc->getDecoderPtr()->setSveLen((getCurSveVecLenInBits() >> 7) - 1);
             break;
         }
     }
@@ -2096,7 +2101,7 @@ ISA::setMiscReg(int misc_reg, RegVal val, ThreadContext *tc)
 }
 
 BaseISADevice &
-ISA::getGenericTimer(ThreadContext *tc)
+ISA::getGenericTimer()
 {
     // We only need to create an ISA interface the first time we try
     // to access the timer.
@@ -2117,14 +2122,14 @@ ISA::getGenericTimer(ThreadContext *tc)
 }
 
 BaseISADevice &
-ISA::getGICv3CPUInterface(ThreadContext *tc)
+ISA::getGICv3CPUInterface()
 {
     panic_if(!gicv3CpuInterface, "GICV3 cpu interface is not registered!");
     return *gicv3CpuInterface.get();
 }
 
 unsigned
-ISA::getCurSveVecLenInBits(ThreadContext *tc) const
+ISA::getCurSveVecLenInBits() const
 {
     if (!FullSystem) {
         return sveVL * 128;
index b4fbbbfcde0a1c77ca4874627c3a1c5ec667a735..e7c81802d8914de45d9c00287294a7c3935cdb29 100644 (file)
@@ -56,7 +56,6 @@
 
 struct ArmISAParams;
 struct DummyArmISADeviceParams;
-class ThreadContext;
 class Checkpoint;
 class EventManager;
 
@@ -446,26 +445,17 @@ namespace ArmISA
             }
         }
 
-        BaseISADevice &getGenericTimer(ThreadContext *tc);
-        BaseISADevice &getGICv3CPUInterface(ThreadContext *tc);
-
+        BaseISADevice &getGenericTimer();
+        BaseISADevice &getGICv3CPUInterface();
 
       private:
-        inline void assert32(ThreadContext *tc) {
-            CPSR cpsr M5_VAR_USED = readMiscReg(MISCREG_CPSR, tc);
-            assert(cpsr.width);
-        }
-
-        inline void assert64(ThreadContext *tc) {
-            CPSR cpsr M5_VAR_USED = readMiscReg(MISCREG_CPSR, tc);
-            assert(!cpsr.width);
-        }
+        void assert32() { assert(((CPSR)readMiscReg(MISCREG_CPSR)).width); }
+        void assert64() { assert(!((CPSR)readMiscReg(MISCREG_CPSR)).width); }
 
       public:
-        void clear(ThreadContext *tc);
+        void clear();
 
       protected:
-        void clear();
         void clear32(const ArmISAParams *p, const SCTLR &sctlr_rst);
         void clear64(const ArmISAParams *p);
         void initID32(const ArmISAParams *p);
@@ -473,9 +463,9 @@ namespace ArmISA
 
       public:
         RegVal readMiscRegNoEffect(int misc_reg) const;
-        RegVal readMiscReg(int misc_reg, ThreadContext *tc);
+        RegVal readMiscReg(int misc_reg);
         void setMiscRegNoEffect(int misc_reg, RegVal val);
-        void setMiscReg(int misc_reg, RegVal val, ThreadContext *tc);
+        void setMiscReg(int misc_reg, RegVal val);
 
         RegId
         flattenRegId(const RegId& regId) const
@@ -718,7 +708,7 @@ namespace ArmISA
             return std::make_pair(lower, upper);
         }
 
-        unsigned getCurSveVecLenInBits(ThreadContext *tc) const;
+        unsigned getCurSveVecLenInBits() const;
 
         unsigned getCurSveVecLenInBitsAtReset() const { return sveVL * 128; }
 
@@ -741,7 +731,9 @@ namespace ArmISA
             updateRegMap(tmp_cpsr);
         }
 
-        void startup(ThreadContext *tc);
+        void startup() override;
+
+        void setupThreadContext();
 
         void takeOverFrom(ThreadContext *new_tc,
                           ThreadContext *old_tc) override;
@@ -764,9 +756,6 @@ namespace ArmISA
             return _vecRegRenameMode;
         }
 
-        /// Explicitly import the otherwise hidden startup
-        using BaseISA::startup;
-
         typedef ArmISAParams Params;
 
         const Params *params() const;
index d4f6d9f8b890abef379df13a25e73986ed19d9cb..df07763aadc690a59fa390c0e58f077d1f9204d5 100644 (file)
@@ -49,10 +49,14 @@ class BaseISA : public SimObject
   protected:
     using SimObject::SimObject;
 
+    ThreadContext *tc = nullptr;
+
   public:
     virtual void
     takeOverFrom(ThreadContext *new_tc, ThreadContext *old_tc)
     {}
+
+    virtual void setThreadContext(ThreadContext *_tc) { tc = _tc; }
 };
 
 #endif // __ARCH_GENERIC_ISA_HH__
index d27f91cb91815e9679c4f852ac7492bb1a184b81..616876cebab6ff479a3f4516ef1d5956cc6d84af 100644 (file)
@@ -430,7 +430,7 @@ ISA::readMiscRegNoEffect(int misc_reg, ThreadID tid) const
 //       Status to TCStatus depending on current thread
 //template <class TC>
 RegVal
-ISA::readMiscReg(int misc_reg, ThreadContext *tc,  ThreadID tid)
+ISA::readMiscReg(int misc_reg, ThreadID tid)
 {
     unsigned reg_sel = (bankType[misc_reg] == perThreadContext)
         ? tid : getVPENum(tid);
@@ -471,7 +471,7 @@ ISA::setRegMask(int misc_reg, RegVal val, ThreadID tid)
 // be overwritten. Make sure to handle those particular registers
 // with care!
 void
-ISA::setMiscReg(int misc_reg, RegVal val, ThreadContext *tc, ThreadID tid)
+ISA::setMiscReg(int misc_reg, RegVal val, ThreadID tid)
 {
     int reg_sel = (bankType[misc_reg] == perThreadContext)
         ? tid : getVPENum(tid);
index 73cb0462ac366445e0d77025e0847bde67f076ad..301f573df58af4a604a02db61c5b7918c6e7e962 100644 (file)
@@ -72,9 +72,6 @@ namespace MipsISA
         std::vector<BankType> bankType;
 
       public:
-        void clear(ThreadContext *tc) { clear(); }
-
-      protected:
         void clear();
 
       public:
@@ -94,15 +91,14 @@ namespace MipsISA
         RegVal readMiscRegNoEffect(int misc_reg, ThreadID tid = 0) const;
 
         //template <class TC>
-        RegVal readMiscReg(int misc_reg, ThreadContext *tc, ThreadID tid = 0);
+        RegVal readMiscReg(int misc_reg, ThreadID tid = 0);
 
         RegVal filterCP0Write(int misc_reg, int reg_sel, RegVal val);
         void setRegMask(int misc_reg, RegVal val, ThreadID tid = 0);
         void setMiscRegNoEffect(int misc_reg, RegVal val, ThreadID tid=0);
 
         //template <class TC>
-        void setMiscReg(int misc_reg, RegVal val,
-                        ThreadContext *tc, ThreadID tid=0);
+        void setMiscReg(int misc_reg, RegVal val, ThreadID tid=0);
 
         //////////////////////////////////////////////////////////
         //
@@ -132,60 +128,20 @@ namespace MipsISA
         static std::string miscRegNames[NumMiscRegs];
 
       public:
-        void startup(ThreadContext *tc) {}
-
-        /// Explicitly import the otherwise hidden startup
-        using BaseISA::startup;
-
         const Params *params() const;
 
         ISA(Params *p);
 
         RegId flattenRegId(const RegId& regId) const { return regId; }
 
-        int
-        flattenIntIndex(int reg) const
-        {
-            return reg;
-        }
-
-        int
-        flattenFloatIndex(int reg) const
-        {
-            return reg;
-        }
-
-        int
-        flattenVecIndex(int reg) const
-        {
-            return reg;
-        }
-
-        int
-        flattenVecElemIndex(int reg) const
-        {
-            return reg;
-        }
-
-        int
-        flattenVecPredIndex(int reg) const
-        {
-            return reg;
-        }
-
+        int flattenIntIndex(int reg) const { return reg; }
+        int flattenFloatIndex(int reg) const { return reg; }
+        int flattenVecIndex(int reg) const { return reg; }
+        int flattenVecElemIndex(int reg) const { return reg; }
+        int flattenVecPredIndex(int reg) const { return reg; }
         // dummy
-        int
-        flattenCCIndex(int reg) const
-        {
-            return reg;
-        }
-
-        int
-        flattenMiscIndex(int reg) const
-        {
-            return reg;
-        }
-
+        int flattenCCIndex(int reg) const { return reg; }
+        int flattenMiscIndex(int reg) const { return reg; }
     };
 }
 
index c82b7bb4122f01ea3ad14581c731704f880d3a51..a0d4a4660113af65beaf4620253b4639d158cc18 100644 (file)
@@ -54,17 +54,7 @@ class ISA : public BaseISA
   public:
     typedef PowerISAParams Params;
 
-    void
-    clear(ThreadContext *tc)
-    {
-        clear();
-    }
-
-  protected:
-    void
-    clear()
-    {
-    }
+    void clear() {}
 
   public:
     RegVal
@@ -75,7 +65,7 @@ class ISA : public BaseISA
     }
 
     RegVal
-    readMiscReg(int misc_reg, ThreadContext *tc)
+    readMiscReg(int misc_reg)
     {
         fatal("Power does not currently have any misc regs defined\n");
         return dummy;
@@ -88,7 +78,7 @@ class ISA : public BaseISA
     }
 
     void
-    setMiscReg(int misc_reg, RegVal val, ThreadContext *tc)
+    setMiscReg(int misc_reg, RegVal val)
     {
         fatal("Power does not currently have any misc regs defined\n");
     }
@@ -138,11 +128,6 @@ class ISA : public BaseISA
         return reg;
     }
 
-    void startup(ThreadContext *tc) {}
-
-    /// Explicitly import the otherwise hidden startup
-    using BaseISA::startup;
-
     const Params *params() const;
 
     ISA(Params *p);
index 055c95b35225b60b2cbc84d2805fcd28b4dba047..87c4043a4d83309784d17c14cd835e6bd268ff43 100644 (file)
@@ -243,7 +243,7 @@ ISA::readMiscRegNoEffect(int misc_reg) const
 }
 
 RegVal
-ISA::readMiscReg(int misc_reg, ThreadContext *tc)
+ISA::readMiscReg(int misc_reg)
 {
     switch (misc_reg) {
       case MISCREG_HARTID:
@@ -330,7 +330,7 @@ ISA::setMiscRegNoEffect(int misc_reg, RegVal val)
 }
 
 void
-ISA::setMiscReg(int misc_reg, RegVal val, ThreadContext *tc)
+ISA::setMiscReg(int misc_reg, RegVal val)
 {
     if (misc_reg >= MISCREG_CYCLE && misc_reg <= MISCREG_HPMCOUNTER31) {
         // Ignore writes to HPM counters for now
index a6c77ce062ec524cf158184e51f8bfb5a2c5f20e..1ece3bdf91c516c2d5ed142c74877d225a80e753 100644 (file)
@@ -78,16 +78,13 @@ class ISA : public BaseISA
   public:
     typedef RiscvISAParams Params;
 
-    void clear(ThreadContext *tc) { clear(); }
-
-  protected:
     void clear();
 
   public:
     RegVal readMiscRegNoEffect(int misc_reg) const;
-    RegVal readMiscReg(int misc_reg, ThreadContext *tc);
+    RegVal readMiscReg(int misc_reg);
     void setMiscRegNoEffect(int misc_reg, RegVal val);
-    void setMiscReg(int misc_reg, RegVal val, ThreadContext *tc);
+    void setMiscReg(int misc_reg, RegVal val);
 
     RegId flattenRegId(const RegId &regId) const { return regId; }
     int flattenIntIndex(int reg) const { return reg; }
@@ -98,14 +95,9 @@ class ISA : public BaseISA
     int flattenCCIndex(int reg) const { return reg; }
     int flattenMiscIndex(int reg) const { return reg; }
 
-    void startup(ThreadContext *tc) {}
-
     void serialize(CheckpointOut &cp) const;
     void unserialize(CheckpointIn &cp);
 
-    /// Explicitly import the otherwise hidden startup
-    using BaseISA::startup;
-
     const Params *params() const;
 
     ISA(Params *p);
index 493c5c77194a04fbe825dc2fa2370a1a8d6450ac..4f2805f32c94ba2ee619f64f3d4e3e42c61398a9 100644 (file)
@@ -61,10 +61,6 @@ static const PSTATE PstateMask = buildPstateMask();
 
 ISA::ISA(Params *p) : BaseISA(p)
 {
-    tickCompare = NULL;
-    sTickCompare = NULL;
-    hSTickCompare = NULL;
-
     clear();
 }
 
@@ -333,7 +329,7 @@ ISA::readMiscRegNoEffect(int miscReg) const
 }
 
 RegVal
-ISA::readMiscReg(int miscReg, ThreadContext * tc)
+ISA::readMiscReg(int miscReg)
 {
     switch (miscReg) {
         // tick and stick are aliased to each other in niagra
@@ -375,7 +371,7 @@ ISA::readMiscReg(int miscReg, ThreadContext * tc)
       case MISCREG_QUEUE_NRES_ERROR_HEAD:
       case MISCREG_QUEUE_NRES_ERROR_TAIL:
       case MISCREG_HPSTATE:
-        return readFSReg(miscReg, tc);
+        return readFSReg(miscReg);
     }
     return readMiscRegNoEffect(miscReg);
 }
@@ -562,7 +558,7 @@ ISA::setMiscRegNoEffect(int miscReg, RegVal val)
 }
 
 void
-ISA::setMiscReg(int miscReg, RegVal val, ThreadContext * tc)
+ISA::setMiscReg(int miscReg, RegVal val)
 {
     RegVal new_val = val;
 
@@ -631,7 +627,7 @@ ISA::setMiscReg(int miscReg, RegVal val, ThreadContext * tc)
       case MISCREG_QUEUE_NRES_ERROR_HEAD:
       case MISCREG_QUEUE_NRES_ERROR_TAIL:
       case MISCREG_HPSTATE:
-        setFSReg(miscReg, val, tc);
+        setFSReg(miscReg, val);
         return;
     }
     setMiscRegNoEffect(miscReg, new_val);
@@ -678,39 +674,18 @@ ISA::serialize(CheckpointOut &cp) const
     SERIALIZE_SCALAR(res_error_tail);
     SERIALIZE_SCALAR(nres_error_head);
     SERIALIZE_SCALAR(nres_error_tail);
+
     Tick tick_cmp = 0, stick_cmp = 0, hstick_cmp = 0;
-    ThreadContext *tc = NULL;
-    BaseCPU *cpu = NULL;
-    int tc_num = 0;
-    bool tick_intr_sched = true;
-
-    if (tickCompare)
-        tc = tickCompare->getTC();
-    else if (sTickCompare)
-        tc = sTickCompare->getTC();
-    else if (hSTickCompare)
-        tc = hSTickCompare->getTC();
-    else
-        tick_intr_sched = false;
-
-    SERIALIZE_SCALAR(tick_intr_sched);
-
-    if (tc) {
-        cpu = tc->getCpuPtr();
-        tc_num = cpu->findContext(tc);
-        if (tickCompare && tickCompare->scheduled())
-            tick_cmp = tickCompare->when();
-        if (sTickCompare && sTickCompare->scheduled())
-            stick_cmp = sTickCompare->when();
-        if (hSTickCompare && hSTickCompare->scheduled())
-            hstick_cmp = hSTickCompare->when();
-
-        SERIALIZE_OBJPTR(cpu);
-        SERIALIZE_SCALAR(tc_num);
-        SERIALIZE_SCALAR(tick_cmp);
-        SERIALIZE_SCALAR(stick_cmp);
-        SERIALIZE_SCALAR(hstick_cmp);
-    }
+    if (tickCompare && tickCompare->scheduled())
+        tick_cmp = tickCompare->when();
+    if (sTickCompare && sTickCompare->scheduled())
+        stick_cmp = sTickCompare->when();
+    if (hSTickCompare && hSTickCompare->scheduled())
+        hstick_cmp = hSTickCompare->when();
+
+    SERIALIZE_SCALAR(tick_cmp);
+    SERIALIZE_SCALAR(stick_cmp);
+    SERIALIZE_SCALAR(hstick_cmp);
 }
 
 void
@@ -765,35 +740,22 @@ ISA::unserialize(CheckpointIn &cp)
     UNSERIALIZE_SCALAR(nres_error_tail);
 
     Tick tick_cmp = 0, stick_cmp = 0, hstick_cmp = 0;
-    ThreadContext *tc = NULL;
-    BaseCPU *cpu = NULL;
-    int tc_num;
-    bool tick_intr_sched;
-    UNSERIALIZE_SCALAR(tick_intr_sched);
-    if (tick_intr_sched) {
-        UNSERIALIZE_OBJPTR(cpu);
-        if (cpu) {
-            UNSERIALIZE_SCALAR(tc_num);
-            UNSERIALIZE_SCALAR(tick_cmp);
-            UNSERIALIZE_SCALAR(stick_cmp);
-            UNSERIALIZE_SCALAR(hstick_cmp);
-            tc = cpu->getContext(tc_num);
-
-            if (tick_cmp) {
-                tickCompare = new TickCompareEvent(this, tc);
-                schedule(tickCompare, tick_cmp);
-            }
-            if (stick_cmp)  {
-                sTickCompare = new STickCompareEvent(this, tc);
-                schedule(sTickCompare, stick_cmp);
-            }
-            if (hstick_cmp)  {
-                hSTickCompare = new HSTickCompareEvent(this, tc);
-                schedule(hSTickCompare, hstick_cmp);
-            }
-        }
-    }
+    UNSERIALIZE_SCALAR(tick_cmp);
+    UNSERIALIZE_SCALAR(stick_cmp);
+    UNSERIALIZE_SCALAR(hstick_cmp);
 
+    if (tick_cmp) {
+        tickCompare = new TickCompareEvent(this);
+        schedule(tickCompare, tick_cmp);
+    }
+    if (stick_cmp)  {
+        sTickCompare = new STickCompareEvent(this);
+        schedule(sTickCompare, stick_cmp);
+    }
+    if (hstick_cmp)  {
+        hSTickCompare = new HSTickCompareEvent(this);
+        schedule(hSTickCompare, hstick_cmp);
+    }
 }
 
 }
index 63eab2e2c0d3915bec828cad1ebcd6d43481d44d..c92855b0bc321eec12defd10add49308fb89c2d0 100644 (file)
@@ -35,7 +35,6 @@
 #include "arch/generic/isa.hh"
 #include "arch/sparc/registers.hh"
 #include "arch/sparc/types.hh"
-#include "cpu/cpuevent.hh"
 #include "cpu/reg_class.hh"
 #include "sim/sim_object.hh"
 
@@ -115,29 +114,26 @@ class ISA : public BaseISA
 
     // These need to check the int_dis field and if 0 then
     // set appropriate bit in softint and checkinterrutps on the cpu
-    void  setFSReg(int miscReg, RegVal val, ThreadContext *tc);
-    RegVal readFSReg(int miscReg, ThreadContext * tc);
+    void  setFSReg(int miscReg, RegVal val);
+    RegVal readFSReg(int miscReg);
 
     // Update interrupt state on softint or pil change
-    void checkSoftInt(ThreadContext *tc);
+    void checkSoftInt();
 
     /** Process a tick compare event and generate an interrupt on the cpu if
      * appropriate. */
-    void processTickCompare(ThreadContext *tc);
-    void processSTickCompare(ThreadContext *tc);
-    void processHSTickCompare(ThreadContext *tc);
+    void processTickCompare();
+    void processSTickCompare();
+    void processHSTickCompare();
 
-    typedef CpuEventWrapper<ISA,
-            &ISA::processTickCompare> TickCompareEvent;
-    TickCompareEvent *tickCompare;
+    typedef EventWrapper<ISA, &ISA::processTickCompare> TickCompareEvent;
+    TickCompareEvent *tickCompare = nullptr;
 
-    typedef CpuEventWrapper<ISA,
-            &ISA::processSTickCompare> STickCompareEvent;
-    STickCompareEvent *sTickCompare;
+    typedef EventWrapper<ISA, &ISA::processSTickCompare> STickCompareEvent;
+    STickCompareEvent *sTickCompare = nullptr;
 
-    typedef CpuEventWrapper<ISA,
-            &ISA::processHSTickCompare> HSTickCompareEvent;
-    HSTickCompareEvent *hSTickCompare;
+    typedef EventWrapper<ISA, &ISA::processHSTickCompare> HSTickCompareEvent;
+    HSTickCompareEvent *hSTickCompare = nullptr;
 
     static const int NumGlobalRegs = 8;
     static const int NumWindowedRegs = 24;
@@ -165,18 +161,12 @@ class ISA : public BaseISA
 
   public:
 
-    void clear(ThreadContext *tc) { clear(); }
+    void clear();
 
     void serialize(CheckpointOut &cp) const override;
     void unserialize(CheckpointIn &cp) override;
 
-    void startup(ThreadContext *tc) {}
-
-    /// Explicitly import the otherwise hidden startup
-    using BaseISA::startup;
-
   protected:
-    void clear();
     bool isHyperPriv() { return hpstate.hpriv; }
     bool isPriv() { return hpstate.hpriv || pstate.priv; }
     bool isNonPriv() { return !isPriv(); }
@@ -184,10 +174,10 @@ class ISA : public BaseISA
   public:
 
     RegVal readMiscRegNoEffect(int miscReg) const;
-    RegVal readMiscReg(int miscReg, ThreadContext *tc);
+    RegVal readMiscReg(int miscReg);
 
     void setMiscRegNoEffect(int miscReg, RegVal val);
-    void setMiscReg(int miscReg, RegVal val, ThreadContext *tc);
+    void setMiscReg(int miscReg, RegVal val);
 
     RegId
     flattenRegId(const RegId& regId) const
@@ -216,42 +206,14 @@ class ISA : public BaseISA
         return flatIndex;
     }
 
-    int
-    flattenFloatIndex(int reg) const
-    {
-        return reg;
-    }
-
-    int
-    flattenVecIndex(int reg) const
-    {
-        return reg;
-    }
-
-    int
-    flattenVecElemIndex(int reg) const
-    {
-        return reg;
-    }
-
-    int
-    flattenVecPredIndex(int reg) const
-    {
-        return reg;
-    }
+    int flattenFloatIndex(int reg) const { return reg; }
+    int flattenVecIndex(int reg) const { return reg; }
+    int flattenVecElemIndex(int reg) const { return reg; }
+    int flattenVecPredIndex(int reg) const { return reg; }
 
     // dummy
-    int
-    flattenCCIndex(int reg) const
-    {
-        return reg;
-    }
-
-    int
-    flattenMiscIndex(int reg) const
-    {
-        return reg;
-    }
+    int flattenCCIndex(int reg) const { return reg; }
+    int flattenMiscIndex(int reg) const { return reg; }
 
 
     typedef SparcISAParams Params;
index 3403451b5bd42447c599a94695e0d2776238ccf7..1c1dcc2b55ad14f9d45ccfef2d18828a3c9ad8d2 100644 (file)
@@ -44,7 +44,7 @@ using namespace std;
 
 
 void
-ISA::checkSoftInt(ThreadContext *tc)
+ISA::checkSoftInt()
 {
     BaseCPU *cpu = tc->getCpuPtr();
 
@@ -89,7 +89,7 @@ getMiscRegName(RegIndex index)
 }
 
 void
-ISA::setFSReg(int miscReg, RegVal val, ThreadContext *tc)
+ISA::setFSReg(int miscReg, RegVal val)
 {
     BaseCPU *cpu = tc->getCpuPtr();
 
@@ -97,17 +97,17 @@ ISA::setFSReg(int miscReg, RegVal val, ThreadContext *tc)
     switch (miscReg) {
         /* Full system only ASRs */
       case MISCREG_SOFTINT:
-        setMiscRegNoEffect(miscReg, val);;
-        checkSoftInt(tc);
+        setMiscRegNoEffect(miscReg, val);
+        checkSoftInt();
         break;
       case MISCREG_SOFTINT_CLR:
-        return setMiscReg(MISCREG_SOFTINT, ~val & softint, tc);
+        return setMiscReg(MISCREG_SOFTINT, ~val & softint);
       case MISCREG_SOFTINT_SET:
-        return setMiscReg(MISCREG_SOFTINT, val | softint, tc);
+        return setMiscReg(MISCREG_SOFTINT, val | softint);
 
       case MISCREG_TICK_CMPR:
         if (tickCompare == NULL)
-            tickCompare = new TickCompareEvent(this, tc);
+            tickCompare = new TickCompareEvent(this);
         setMiscRegNoEffect(miscReg, val);
         if ((tick_cmpr & ~mask(63)) && tickCompare->scheduled())
             cpu->deschedule(tickCompare);
@@ -122,7 +122,7 @@ ISA::setFSReg(int miscReg, RegVal val, ThreadContext *tc)
 
       case MISCREG_STICK_CMPR:
         if (sTickCompare == NULL)
-            sTickCompare = new STickCompareEvent(this, tc);
+            sTickCompare = new STickCompareEvent(this);
         setMiscRegNoEffect(miscReg, val);
         if ((stick_cmpr & ~mask(63)) && sTickCompare->scheduled())
             cpu->deschedule(sTickCompare);
@@ -142,7 +142,7 @@ ISA::setFSReg(int miscReg, RegVal val, ThreadContext *tc)
 
       case MISCREG_PIL:
         setMiscRegNoEffect(miscReg, val);
-        checkSoftInt(tc);
+        checkSoftInt();
         break;
 
       case MISCREG_HVER:
@@ -193,7 +193,7 @@ ISA::setFSReg(int miscReg, RegVal val, ThreadContext *tc)
 
       case MISCREG_HSTICK_CMPR:
         if (hSTickCompare == NULL)
-            hSTickCompare = new HSTickCompareEvent(this, tc);
+            hSTickCompare = new HSTickCompareEvent(this);
         setMiscRegNoEffect(miscReg, val);
         if ((hstick_cmpr & ~mask(63)) && hSTickCompare->scheduled())
             cpu->deschedule(hSTickCompare);
@@ -244,7 +244,7 @@ ISA::setFSReg(int miscReg, RegVal val, ThreadContext *tc)
 }
 
 RegVal
-ISA::readFSReg(int miscReg, ThreadContext * tc)
+ISA::readFSReg(int miscReg)
 {
     uint64_t temp;
 
@@ -318,13 +318,13 @@ ISA::readFSReg(int miscReg, ThreadContext * tc)
 }
 
 void
-ISA::processTickCompare(ThreadContext *tc)
+ISA::processTickCompare()
 {
     panic("tick compare not implemented\n");
 }
 
 void
-ISA::processSTickCompare(ThreadContext *tc)
+ISA::processSTickCompare()
 {
     BaseCPU *cpu = tc->getCpuPtr();
 
@@ -340,7 +340,7 @@ ISA::processSTickCompare(ThreadContext *tc)
         DPRINTF(Timer, "STick compare cycle reached at %#x\n",
                 (stick_cmpr & mask(63)));
         if (!(tc->readMiscRegNoEffect(MISCREG_STICK_CMPR) & (ULL(1) << 63))) {
-            setMiscReg(MISCREG_SOFTINT, softint | (ULL(1) << 16), tc);
+            setMiscReg(MISCREG_SOFTINT, softint | (ULL(1) << 16));
         }
     } else {
         cpu->schedule(sTickCompare, cpu->clockEdge(Cycles(delay)));
@@ -348,7 +348,7 @@ ISA::processSTickCompare(ThreadContext *tc)
 }
 
 void
-ISA::processHSTickCompare(ThreadContext *tc)
+ISA::processHSTickCompare()
 {
     BaseCPU *cpu = tc->getCpuPtr();
 
@@ -367,7 +367,7 @@ ISA::processHSTickCompare(ThreadContext *tc)
         DPRINTF(Timer, "HSTick compare cycle reached at %#x\n",
                 (stick_cmpr & mask(63)));
         if (!(tc->readMiscRegNoEffect(MISCREG_HSTICK_CMPR) & (ULL(1) << 63))) {
-            setMiscReg(MISCREG_HINTP, 1, tc);
+            setMiscReg(MISCREG_HINTP, 1);
         }
         // Need to do something to cause interrupt to happen here !!! @todo
     } else {
index 874d75b02144415f47885df0f59c18e4e279a867..a142bcf717c9c86168cf4065bcd20b287ff67216 100644 (file)
@@ -40,8 +40,7 @@ namespace X86ISA
 
 void
 ISA::updateHandyM5Reg(Efer efer, CR0 cr0,
-                      SegAttr csAttr, SegAttr ssAttr, RFLAGS rflags,
-                      ThreadContext *tc)
+                      SegAttr csAttr, SegAttr ssAttr, RFLAGS rflags)
 {
     HandyM5Reg m5reg = 0;
     if (efer.lma) {
@@ -154,7 +153,7 @@ ISA::readMiscRegNoEffect(int miscReg) const
 }
 
 RegVal
-ISA::readMiscReg(int miscReg, ThreadContext * tc)
+ISA::readMiscReg(int miscReg)
 {
     if (miscReg == MISCREG_TSC) {
         return regVal[MISCREG_TSC] + tc->getCpuPtr()->curCycle();
@@ -218,7 +217,7 @@ ISA::setMiscRegNoEffect(int miscReg, RegVal val)
 }
 
 void
-ISA::setMiscReg(int miscReg, RegVal val, ThreadContext * tc)
+ISA::setMiscReg(int miscReg, RegVal val)
 {
     RegVal newVal = val;
     switch(miscReg)
@@ -250,8 +249,7 @@ ISA::setMiscReg(int miscReg, RegVal val, ThreadContext * tc)
                              newCR0,
                              regVal[MISCREG_CS_ATTR],
                              regVal[MISCREG_SS_ATTR],
-                             regVal[MISCREG_RFLAGS],
-                             tc);
+                             regVal[MISCREG_RFLAGS]);
         }
         break;
       case MISCREG_CR2:
@@ -292,8 +290,7 @@ ISA::setMiscReg(int miscReg, RegVal val, ThreadContext * tc)
                              regVal[MISCREG_CR0],
                              newCSAttr,
                              regVal[MISCREG_SS_ATTR],
-                             regVal[MISCREG_RFLAGS],
-                             tc);
+                             regVal[MISCREG_RFLAGS]);
         }
         break;
       case MISCREG_SS_ATTR:
@@ -301,8 +298,7 @@ ISA::setMiscReg(int miscReg, RegVal val, ThreadContext * tc)
                          regVal[MISCREG_CR0],
                          regVal[MISCREG_CS_ATTR],
                          val,
-                         regVal[MISCREG_RFLAGS],
-                         tc);
+                         regVal[MISCREG_RFLAGS]);
         break;
       // These segments always actually use their bases, or in other words
       // their effective bases must stay equal to their actual bases.
@@ -409,8 +405,7 @@ ISA::setMiscReg(int miscReg, RegVal val, ThreadContext * tc)
                          regVal[MISCREG_CR0],
                          regVal[MISCREG_CS_ATTR],
                          regVal[MISCREG_SS_ATTR],
-                         regVal[MISCREG_RFLAGS],
-                         tc);
+                         regVal[MISCREG_RFLAGS]);
         return;
       default:
         break;
@@ -432,13 +427,13 @@ ISA::unserialize(CheckpointIn &cp)
                      regVal[MISCREG_CR0],
                      regVal[MISCREG_CS_ATTR],
                      regVal[MISCREG_SS_ATTR],
-                     regVal[MISCREG_RFLAGS],
-                     NULL);
+                     regVal[MISCREG_RFLAGS]);
 }
 
 void
-ISA::startup(ThreadContext *tc)
+ISA::setThreadContext(ThreadContext *_tc)
 {
+    BaseISA::setThreadContext(_tc);
     tc->getDecoderPtr()->setM5Reg(regVal[MISCREG_M5_REG]);
 }
 
index 774321ac3517de61251ebb44e286b524f0ef1630..855c8e7b3095120eddbcc6ebd5ab29d6eff0a7f1 100644 (file)
@@ -52,23 +52,21 @@ namespace X86ISA
       protected:
         RegVal regVal[NUM_MISCREGS];
         void updateHandyM5Reg(Efer efer, CR0 cr0,
-                SegAttr csAttr, SegAttr ssAttr, RFLAGS rflags,
-                ThreadContext *tc);
-        void clear();
+                SegAttr csAttr, SegAttr ssAttr, RFLAGS rflags);
 
       public:
-        typedef X86ISAParams Params;
+        void clear();
 
-        void clear(ThreadContext *tc) { clear(); }
+        typedef X86ISAParams Params;
 
         ISA(Params *p);
         const Params *params() const;
 
         RegVal readMiscRegNoEffect(int miscReg) const;
-        RegVal readMiscReg(int miscReg, ThreadContext *tc);
+        RegVal readMiscReg(int miscReg);
 
         void setMiscRegNoEffect(int miscReg, RegVal val);
-        void setMiscReg(int miscReg, RegVal val, ThreadContext *tc);
+        void setMiscReg(int miscReg, RegVal val);
 
         RegId
         flattenRegId(const RegId& regId) const
@@ -88,11 +86,7 @@ namespace X86ISA
             return regId;
         }
 
-        int
-        flattenIntIndex(int reg) const
-        {
-            return reg & ~IntFoldBit;
-        }
+        int flattenIntIndex(int reg) const { return reg & ~IntFoldBit; }
 
         int
         flattenFloatIndex(int reg) const
@@ -104,44 +98,16 @@ namespace X86ISA
             return reg;
         }
 
-        int
-        flattenVecIndex(int reg) const
-        {
-            return reg;
-        }
-
-        int
-        flattenVecElemIndex(int reg) const
-        {
-            return reg;
-        }
-
-        int
-        flattenVecPredIndex(int reg) const
-        {
-            return reg;
-        }
-
-        int
-        flattenCCIndex(int reg) const
-        {
-            return reg;
-        }
-
-        int
-        flattenMiscIndex(int reg) const
-        {
-            return reg;
-        }
+        int flattenVecIndex(int reg) const { return reg; }
+        int flattenVecElemIndex(int reg) const { return reg; }
+        int flattenVecPredIndex(int reg) const { return reg; }
+        int flattenCCIndex(int reg) const { return reg; }
+        int flattenMiscIndex(int reg) const { return reg; }
 
         void serialize(CheckpointOut &cp) const override;
         void unserialize(CheckpointIn &cp) override;
 
-        void startup(ThreadContext *tc);
-
-        /// Explicitly import the otherwise hidden startup
-        using BaseISA::startup;
-
+        void setThreadContext(ThreadContext *_tc) override;
     };
 }
 
index 6260bd9efd203fa4239c55548401082f56070b59..f1dc6bdeddf2c04cc0ec56527d0a35fd93a8ebac 100644 (file)
@@ -89,7 +89,6 @@ SimObject('TimingExpr.py')
 
 Source('activity.cc')
 Source('base.cc')
-Source('cpuevent.cc')
 Source('exetrace.cc')
 Source('exec_context.cc')
 Source('func_unit.cc')
index 2e8d7387100acf1e7e87385ba802014e121c5aec..c90314565430a266a6d7042321ce3cdfa9cb07cb 100644 (file)
@@ -54,7 +54,6 @@
 #include "base/output.hh"
 #include "base/trace.hh"
 #include "cpu/checker/cpu.hh"
-#include "cpu/cpuevent.hh"
 #include "cpu/profile.hh"
 #include "cpu/thread_context.hh"
 #include "debug/Mwait.hh"
@@ -440,6 +439,7 @@ BaseCPU::registerThreadContexts()
             tc->getProcessPtr()->assignThreadContext(tc->contextId());
 
         interrupts[tid]->setThreadContext(tc);
+        tc->getIsaPtr()->setThreadContext(tc);
     }
 }
 
@@ -569,9 +569,9 @@ BaseCPU::takeOverFrom(BaseCPU *oldCPU)
         ThreadContext *newTC = threadContexts[i];
         ThreadContext *oldTC = oldCPU->threadContexts[i];
 
-        newTC->takeOverFrom(oldTC);
+        newTC->getIsaPtr()->setThreadContext(newTC);
 
-        CpuEvent::replaceThreadContext(oldTC, newTC);
+        newTC->takeOverFrom(oldTC);
 
         assert(newTC->contextId() == oldTC->contextId());
         assert(newTC->threadId() == oldTC->threadId());
diff --git a/src/cpu/cpuevent.cc b/src/cpu/cpuevent.cc
deleted file mode 100644 (file)
index 13b4f68..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright (c) 2006 The Regents of The University of Michigan
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met: redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer;
- * redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution;
- * neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "cpu/cpuevent.hh"
-
-/** Static list of all CpuEvent objects so we can modify their thread
- * contexts as needed. */
-CpuEvent::CpuEventList CpuEvent::cpuEventList;
-
-CpuEvent::~CpuEvent()
-{
-    CpuEventList::iterator i;
-
-    // delete the event from the global list
-    for (i = cpuEventList.begin(); i != cpuEventList.end(); ) {
-        if (*i == this)
-            i = cpuEventList.erase(i);
-        else
-            i++;
-    }
-}
-
-void
-CpuEvent::replaceThreadContext(ThreadContext *oldTc, ThreadContext *newTc)
-{
-    CpuEventList::iterator i;
-
-    // Update any events that have the old thread context with the new thread
-    // context
-    for (i = cpuEventList.begin(); i != cpuEventList.end(); i++) {
-        if ((*i)->tc == oldTc)
-            (*i)->tc = newTc;
-    }
-}
diff --git a/src/cpu/cpuevent.hh b/src/cpu/cpuevent.hh
deleted file mode 100644 (file)
index 9da2ddd..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Copyright (c) 2006 The Regents of The University of Michigan
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met: redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer;
- * redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution;
- * neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef __CPU_CPUEVENT_HH__
-#define __CPU_CPUEVENT_HH__
-
-#include <vector>
-
-#include "sim/eventq.hh"
-
-class ThreadContext;
-
-/**
- * This class creates a global list of events that need a pointer to a
- * thread context. When a switchover takes place the events can be
- * migrated to the new thread context, otherwise you could have a wake
- * timer interrupt go off on a switched out cpu or other unfortunate
- * events. This object MUST be dynamically allocated to avoid it being
- * deleted after a cpu switch happens.
- */
-class CpuEvent : public Event
-{
-  protected:
-    /** type of global list of cpu events. */
-    typedef std::vector<CpuEvent *> CpuEventList;
-
-    /** Static list of cpu events that is searched every time a cpu switch
-     * happens. */
-    static CpuEventList cpuEventList;
-
-    /** The thread context that is switched to the new cpus. */
-    ThreadContext *tc;
-
-  public:
-    CpuEvent(ThreadContext *_tc, Priority p = Default_Pri)
-        : Event(p), tc(_tc)
-    { cpuEventList.push_back(this); }
-
-    /** delete the cpu event from the global list. */
-    ~CpuEvent();
-
-    /** Update all events switching old tc to new tc.
-     * @param oldTc the old thread context we are switching from
-     * @param newTc the new thread context we are switching to.
-     */
-    static void replaceThreadContext(ThreadContext *oldTc,
-                                     ThreadContext *newTc);
-    ThreadContext* getTC() { return tc; }
-};
-
-template <class T, void (T::* F)(ThreadContext *tc)>
-class CpuEventWrapper : public CpuEvent
-{
-  private:
-    T *object;
-
-  public:
-    CpuEventWrapper(T *obj, ThreadContext *_tc, Priority p = Default_Pri)
-        : CpuEvent(_tc, p), object(obj)
-    { }
-    void process() { (object->*F)(tc); }
-};
-
-#endif // __CPU_CPUEVENT_HH__
-
index d44bb3d23252d8c91eef19358c3ba64b31fdf79e..18aead84eec983221e48eae2a10c89b2c3999961 100644 (file)
@@ -155,8 +155,6 @@ BaseKvmCPU::startup()
         inform("KVM: Coalesced not supported by host OS\n");
     }
 
-    thread->startup();
-
     Event *startupEvent(
         new EventFunctionWrapper([this]{ startupThread(); }, name(), true));
     schedule(startupEvent, curTick());
index e0ebef61f35a22d99a98b7907eaf75717f96e3b6..a375e07be7a23648a7599425fe3b7a52ee2a99b8 100644 (file)
@@ -161,10 +161,8 @@ MinorCPU::startup()
 
     BaseCPU::startup();
 
-    for (ThreadID tid = 0; tid < numThreads; tid++) {
-        threads[tid]->startup();
+    for (ThreadID tid = 0; tid < numThreads; tid++)
         pipeline->wakeupFetch(tid);
-    }
 }
 
 DrainState
index befd162fb11973b8e4004c8cd6abd13ee51214ca..b3faf315d5c9cccb67d803001eaf6b48769a028c 100644 (file)
@@ -599,8 +599,6 @@ void
 FullO3CPU<Impl>::startup()
 {
     BaseCPU::startup();
-    for (int tid = 0; tid < numThreads; ++tid)
-        isa[tid]->startup(threadContexts[tid]);
 
     fetch.startupStage();
     decode.startupStage();
@@ -1180,7 +1178,7 @@ RegVal
 FullO3CPU<Impl>::readMiscReg(int misc_reg, ThreadID tid)
 {
     miscRegfileReads++;
-    return this->isa[tid]->readMiscReg(misc_reg, tcBase(tid));
+    return this->isa[tid]->readMiscReg(misc_reg);
 }
 
 template <class Impl>
@@ -1195,7 +1193,7 @@ void
 FullO3CPU<Impl>::setMiscReg(int misc_reg, RegVal val, ThreadID tid)
 {
     miscRegfileWrites++;
-    this->isa[tid]->setMiscReg(misc_reg, val, tcBase(tid));
+    this->isa[tid]->setMiscReg(misc_reg, val);
 }
 
 template <class Impl>
index 7a2c830707a8f496661ba4e8115a2c066ef018f0..d02be717b39dbc02e14423daeb7cb239aff67b2e 100644 (file)
@@ -200,7 +200,7 @@ template <class Impl>
 void
 O3ThreadContext<Impl>::clearArchRegs()
 {
-    cpu->isa[thread->threadId()]->clear(this);
+    cpu->isa[thread->threadId()]->clear();
 }
 
 template <class Impl>
index 2a7b00aca7ef3829cc0ff7d216b70383ea370c3f..c6d57616bb32a9ffe6f28a01d7c82f14fab0072c 100644 (file)
@@ -685,11 +685,3 @@ BaseSimpleCPU::advancePC(const Fault &fault)
         }
     }
 }
-
-void
-BaseSimpleCPU::startup()
-{
-    BaseCPU::startup();
-    for (auto& t_info : threadInfo)
-        t_info->thread->startup();
-}
index df17c26725516a9cfc170fef85fdcfeebca60702..323850ac51cebe61783970ecd42de96bbcd9ddee 100644 (file)
@@ -133,8 +133,6 @@ class BaseSimpleCPU : public BaseCPU
     void regStats() override;
     void resetStats() override;
 
-    void startup() override;
-
     virtual Fault readMem(Addr addr, uint8_t* data, unsigned size,
                           Request::Flags flags,
                           const std::vector<bool>& byte_enable =
index ef8e074e0b1cbb998019c3edceb95cd384a5fab2..d0c6bf4408a426574365c8f8676aa32b47a9535e 100644 (file)
@@ -156,12 +156,6 @@ SimpleThread::unserialize(CheckpointIn &cp)
     ::unserialize(*this, cp);
 }
 
-void
-SimpleThread::startup()
-{
-    isa->startup(this);
-}
-
 void
 SimpleThread::dumpFuncProfile()
 {
index d63bf0bf980db7e870f0fed82ac54e0507676ed6..6118541f266d4b5301a20fa78e31c3e01e0a422a 100644 (file)
@@ -158,7 +158,6 @@ class SimpleThread : public ThreadState, public ThreadContext
 
     void serialize(CheckpointOut &cp) const override;
     void unserialize(CheckpointIn &cp) override;
-    void startup();
 
     /***************************************************************
      *  SimpleThread functions to provide CPU with access to various
@@ -296,7 +295,7 @@ class SimpleThread : public ThreadState, public ThreadContext
         for (auto &pred_reg: vecPredRegs)
             pred_reg.reset();
         ccRegs.fill(0);
-        isa->clear(this);
+        isa->clear();
     }
 
     //
@@ -558,7 +557,7 @@ class SimpleThread : public ThreadState, public ThreadContext
     RegVal
     readMiscReg(RegIndex misc_reg) override
     {
-        return isa->readMiscReg(misc_reg, this);
+        return isa->readMiscReg(misc_reg);
     }
 
     void
@@ -570,7 +569,7 @@ class SimpleThread : public ThreadState, public ThreadContext
     void
     setMiscReg(RegIndex misc_reg, RegVal val) override
     {
-        return isa->setMiscReg(misc_reg, val, this);
+        return isa->setMiscReg(misc_reg, val);
     }
 
     RegId