changeset 710ee116eb68 in /z/repo/gem5
details: http://repo.gem5.org/gem5?cmd=changeset;node=710ee116eb68
description:
        arch: Use const StaticInstPtr references where possible

        This patch optimises the passing of StaticInstPtr by avoiding copying
        the reference-counting pointer. This avoids first incrementing and
        then decrementing the reference-counting pointer.

diffstat:

 src/arch/alpha/faults.cc          |  12 +++++-----
 src/arch/alpha/faults.hh          |  24 ++++++++++----------
 src/arch/alpha/stacktrace.cc      |   2 +-
 src/arch/alpha/stacktrace.hh      |   6 ++--
 src/arch/alpha/utility.hh         |   2 +-
 src/arch/arm/faults.cc            |  24 ++++++++++----------
 src/arch/arm/faults.hh            |  46 +++++++++++++++++++-------------------
 src/arch/arm/stacktrace.cc        |   2 +-
 src/arch/arm/stacktrace.hh        |   6 ++--
 src/arch/arm/utility.hh           |   2 +-
 src/arch/generic/debugfaults.hh   |   4 +-
 src/arch/mips/faults.cc           |   8 +++---
 src/arch/mips/faults.hh           |  28 +++++++++++-----------
 src/arch/mips/stacktrace.cc       |   2 +-
 src/arch/mips/stacktrace.hh       |   6 ++--
 src/arch/mips/utility.hh          |   2 +-
 src/arch/power/stacktrace.cc      |   2 +-
 src/arch/power/stacktrace.hh      |   6 ++--
 src/arch/power/utility.hh         |   2 +-
 src/arch/sparc/faults.cc          |  15 ++++++-----
 src/arch/sparc/faults.hh          |  28 +++++++++++-----------
 src/arch/sparc/stacktrace.hh      |   2 +-
 src/arch/sparc/utility.hh         |   2 +-
 src/arch/x86/faults.cc            |  14 +++++-----
 src/arch/x86/faults.hh            |  32 +++++++++++++-------------
 src/arch/x86/stacktrace.cc        |   2 +-
 src/arch/x86/stacktrace.hh        |   6 ++--
 src/arch/x86/utility.hh           |   2 +-
 src/cpu/base_dyn_inst.hh          |   8 +++---
 src/cpu/base_dyn_inst_impl.hh     |   8 +++---
 src/cpu/checker/cpu_impl.hh       |   2 +-
 src/cpu/exetrace.cc               |   2 +-
 src/cpu/exetrace.hh               |   2 +-
 src/cpu/minor/func_unit.cc        |   2 +-
 src/cpu/minor/func_unit.hh        |   2 +-
 src/cpu/o3/cpu.cc                 |   5 ++-
 src/cpu/o3/cpu.hh                 |   2 +-
 src/cpu/o3/dyn_inst.hh            |   5 ++-
 src/cpu/o3/dyn_inst_impl.hh       |   8 +++---
 src/cpu/pred/bpred_unit.hh        |   4 +-
 src/cpu/pred/bpred_unit_impl.hh   |   4 +-
 src/cpu/profile.hh                |   4 +-
 src/cpu/simple/probes/simpoint.cc |   2 +-
 src/cpu/timing_expr.cc            |   2 +-
 src/cpu/timing_expr.hh            |   4 +-
 src/sim/faults.cc                 |  10 ++++----
 src/sim/faults.hh                 |  20 ++++++++--------
 47 files changed, 194 insertions(+), 191 deletions(-)

diffs (truncated from 1487 to 300 lines):

diff -r dd64a2984966 -r 710ee116eb68 src/arch/alpha/faults.cc
--- a/src/arch/alpha/faults.cc  Sat Sep 27 09:08:34 2014 -0400
+++ b/src/arch/alpha/faults.cc  Sat Sep 27 09:08:36 2014 -0400
@@ -106,7 +106,7 @@
 FaultStat IntegerOverflowFault::_count;
 
 void
-AlphaFault::invoke(ThreadContext *tc, StaticInstPtr inst)
+AlphaFault::invoke(ThreadContext *tc, const StaticInstPtr &inst)
 {
     FaultBase::invoke(tc);
     if (!FullSystem)
@@ -130,7 +130,7 @@
 }
 
 void
-ArithmeticFault::invoke(ThreadContext *tc, StaticInstPtr inst)
+ArithmeticFault::invoke(ThreadContext *tc, const StaticInstPtr &inst)
 {
     FaultBase::invoke(tc);
     if (!FullSystem)
@@ -139,7 +139,7 @@
 }
 
 void
-DtbFault::invoke(ThreadContext *tc, StaticInstPtr inst)
+DtbFault::invoke(ThreadContext *tc, const StaticInstPtr &inst)
 {
     if (FullSystem) {
         // Set fault address and flags.  Even though we're modeling an
@@ -169,7 +169,7 @@
 }
 
 void
-ItbFault::invoke(ThreadContext *tc, StaticInstPtr inst)
+ItbFault::invoke(ThreadContext *tc, const StaticInstPtr &inst)
 {
     if (FullSystem) {
         if (!tc->misspeculating()) {
@@ -183,7 +183,7 @@
 }
 
 void
-ItbPageFault::invoke(ThreadContext *tc, StaticInstPtr inst)
+ItbPageFault::invoke(ThreadContext *tc, const StaticInstPtr &inst)
 {
     if (FullSystem) {
         ItbFault::invoke(tc);
@@ -202,7 +202,7 @@
 }
 
 void
-NDtbMissFault::invoke(ThreadContext *tc, StaticInstPtr inst)
+NDtbMissFault::invoke(ThreadContext *tc, const StaticInstPtr &inst)
 {
     if (FullSystem) {
         DtbFault::invoke(tc, inst);
diff -r dd64a2984966 -r 710ee116eb68 src/arch/alpha/faults.hh
--- a/src/arch/alpha/faults.hh  Sat Sep 27 09:08:34 2014 -0400
+++ b/src/arch/alpha/faults.hh  Sat Sep 27 09:08:36 2014 -0400
@@ -48,8 +48,8 @@
     virtual bool skipFaultingInstruction() {return false;}
     virtual bool setRestartAddress() {return true;}
   public:
-    void invoke(ThreadContext * tc,
-            StaticInstPtr inst = StaticInst::nullStaticInstPtr);
+    void invoke(ThreadContext * tc, const StaticInstPtr &inst =
+                StaticInst::nullStaticInstPtr);
     virtual FaultVect vect() = 0;
     virtual FaultStat & countStat() = 0;
 };
@@ -108,8 +108,8 @@
     FaultName name() const {return _name;}
     FaultVect vect() {return _vect;}
     FaultStat & countStat() {return _count;}
-    void invoke(ThreadContext * tc,
-            StaticInstPtr inst = StaticInst::nullStaticInstPtr);
+    void invoke(ThreadContext * tc, const StaticInstPtr &inst =
+                StaticInst::nullStaticInstPtr);
 };
 
 class InterruptFault : public AlphaFault
@@ -142,8 +142,8 @@
     FaultName name() const = 0;
     FaultVect vect() = 0;
     FaultStat & countStat() = 0;
-    void invoke(ThreadContext * tc,
-            StaticInstPtr inst = StaticInst::nullStaticInstPtr);
+    void invoke(ThreadContext * tc, const StaticInstPtr &inst =
+                StaticInst::nullStaticInstPtr);
 };
 
 class NDtbMissFault : public DtbFault
@@ -160,8 +160,8 @@
     FaultName name() const {return _name;}
     FaultVect vect() {return _vect;}
     FaultStat & countStat() {return _count;}
-    void invoke(ThreadContext * tc,
-            StaticInstPtr inst = StaticInst::nullStaticInstPtr);
+    void invoke(ThreadContext * tc, const StaticInstPtr &inst =
+                StaticInst::nullStaticInstPtr);
 };
 
 class PDtbMissFault : public DtbFault
@@ -238,8 +238,8 @@
     FaultName name() const = 0;
     FaultVect vect() = 0;
     FaultStat & countStat() = 0;
-    void invoke(ThreadContext * tc,
-            StaticInstPtr inst = StaticInst::nullStaticInstPtr);
+    void invoke(ThreadContext * tc, const StaticInstPtr &inst =
+                StaticInst::nullStaticInstPtr);
 };
 
 class ItbPageFault : public ItbFault
@@ -254,8 +254,8 @@
     FaultName name() const {return _name;}
     FaultVect vect() {return _vect;}
     FaultStat & countStat() {return _count;}
-    void invoke(ThreadContext * tc,
-            StaticInstPtr inst = StaticInst::nullStaticInstPtr);
+    void invoke(ThreadContext * tc, const StaticInstPtr &inst =
+                StaticInst::nullStaticInstPtr);
 };
 
 class ItbAcvFault : public ItbFault
diff -r dd64a2984966 -r 710ee116eb68 src/arch/alpha/stacktrace.cc
--- a/src/arch/alpha/stacktrace.cc      Sat Sep 27 09:08:34 2014 -0400
+++ b/src/arch/alpha/stacktrace.cc      Sat Sep 27 09:08:36 2014 -0400
@@ -122,7 +122,7 @@
 {
 }
 
-StackTrace::StackTrace(ThreadContext *_tc, StaticInstPtr inst)
+StackTrace::StackTrace(ThreadContext *_tc, const StaticInstPtr &inst)
     : tc(0), stack(64)
 {
     trace(_tc, inst);
diff -r dd64a2984966 -r 710ee116eb68 src/arch/alpha/stacktrace.hh
--- a/src/arch/alpha/stacktrace.hh      Sat Sep 27 09:08:34 2014 -0400
+++ b/src/arch/alpha/stacktrace.hh      Sat Sep 27 09:08:36 2014 -0400
@@ -76,7 +76,7 @@
 
   public:
     StackTrace();
-    StackTrace(ThreadContext *tc, StaticInstPtr inst);
+    StackTrace(ThreadContext *tc, const StaticInstPtr &inst);
     ~StackTrace();
 
     void
@@ -87,7 +87,7 @@
     }
 
     bool valid() const { return tc != NULL; }
-    bool trace(ThreadContext *tc, StaticInstPtr inst);
+    bool trace(ThreadContext *tc, const StaticInstPtr &inst);
 
   public:
     const std::vector<Addr> &getstack() const { return stack; }
@@ -111,7 +111,7 @@
 };
 
 inline bool
-StackTrace::trace(ThreadContext *tc, StaticInstPtr inst)
+StackTrace::trace(ThreadContext *tc, const StaticInstPtr &inst)
 {
     if (!inst->isCall() && !inst->isReturn())
         return false;
diff -r dd64a2984966 -r 710ee116eb68 src/arch/alpha/utility.hh
--- a/src/arch/alpha/utility.hh Sat Sep 27 09:08:34 2014 -0400
+++ b/src/arch/alpha/utility.hh Sat Sep 27 09:08:36 2014 -0400
@@ -105,7 +105,7 @@
 void skipFunction(ThreadContext *tc);
 
 inline void
-advancePC(PCState &pc, const StaticInstPtr inst)
+advancePC(PCState &pc, const StaticInstPtr &inst)
 {
     pc.advance();
 }
diff -r dd64a2984966 -r 710ee116eb68 src/arch/arm/faults.cc
--- a/src/arch/arm/faults.cc    Sat Sep 27 09:08:34 2014 -0400
+++ b/src/arch/arm/faults.cc    Sat Sep 27 09:08:36 2014 -0400
@@ -426,7 +426,7 @@
 }
 
 void
-ArmFault::invoke(ThreadContext *tc, StaticInstPtr inst)
+ArmFault::invoke(ThreadContext *tc, const StaticInstPtr &inst)
 {
     CPSR cpsr = tc->readMiscReg(MISCREG_CPSR);
 
@@ -587,7 +587,7 @@
 }
 
 void
-ArmFault::invoke64(ThreadContext *tc, StaticInstPtr inst)
+ArmFault::invoke64(ThreadContext *tc, const StaticInstPtr &inst)
 {
     // Determine actual misc. register indices for ELR_ELx and SPSR_ELx
     MiscRegIndex elr_idx, spsr_idx;
@@ -678,7 +678,7 @@
 }
 
 void
-Reset::invoke(ThreadContext *tc, StaticInstPtr inst)
+Reset::invoke(ThreadContext *tc, const StaticInstPtr &inst)
 {
     if (FullSystem) {
         tc->getCpuPtr()->clearInterrupts();
@@ -706,7 +706,7 @@
 }
 
 void
-UndefinedInstruction::invoke(ThreadContext *tc, StaticInstPtr inst)
+UndefinedInstruction::invoke(ThreadContext *tc, const StaticInstPtr &inst)
 {
     if (FullSystem) {
         ArmFault::invoke(tc, inst);
@@ -767,7 +767,7 @@
 }
 
 void
-SupervisorCall::invoke(ThreadContext *tc, StaticInstPtr inst)
+SupervisorCall::invoke(ThreadContext *tc, const StaticInstPtr &inst)
 {
     if (FullSystem) {
         ArmFault::invoke(tc, inst);
@@ -884,7 +884,7 @@
 // }
 
 void
-SecureMonitorCall::invoke(ThreadContext *tc, StaticInstPtr inst)
+SecureMonitorCall::invoke(ThreadContext *tc, const StaticInstPtr &inst)
 {
     if (FullSystem) {
         ArmFault::invoke(tc, inst);
@@ -913,7 +913,7 @@
 
 template<class T>
 void
-AbortFault<T>::invoke(ThreadContext *tc, StaticInstPtr inst)
+AbortFault<T>::invoke(ThreadContext *tc, const StaticInstPtr &inst)
 {
     if (tranMethod == ArmFault::UnknownTran) {
         tranMethod = longDescFormatInUse(tc) ? ArmFault::LpaeTran
@@ -1237,7 +1237,7 @@
 }
 
 void
-VirtualDataAbort::invoke(ThreadContext *tc, StaticInstPtr inst)
+VirtualDataAbort::invoke(ThreadContext *tc, const StaticInstPtr &inst)
 {
     AbortFault<VirtualDataAbort>::invoke(tc, inst);
     HCR hcr = tc->readMiscRegNoEffect(MISCREG_HCR);
@@ -1336,7 +1336,7 @@
 {}
 
 void
-PCAlignmentFault::invoke(ThreadContext *tc, StaticInstPtr inst)
+PCAlignmentFault::invoke(ThreadContext *tc, const StaticInstPtr &inst)
 {
     ArmFaultVals<PCAlignmentFault>::invoke(tc, inst);
     assert(from64);
@@ -1351,7 +1351,7 @@
 {}
 
 void
-SystemError::invoke(ThreadContext *tc, StaticInstPtr inst)
+SystemError::invoke(ThreadContext *tc, const StaticInstPtr &inst)
 {
     tc->getCpuPtr()->clearInterrupt(INT_ABT, 0);
     ArmFault::invoke(tc, inst);
@@ -1382,7 +1382,7 @@
 }
 
 void
-FlushPipe::invoke(ThreadContext *tc, StaticInstPtr inst) {
+FlushPipe::invoke(ThreadContext *tc, const StaticInstPtr &inst) {
     DPRINTF(Faults, "Invoking FlushPipe Fault\n");
 
     // Set the PC to the next instruction of the faulting instruction.
@@ -1395,7 +1395,7 @@
 }
 
 void
-ArmSev::invoke(ThreadContext *tc, StaticInstPtr inst) {
+ArmSev::invoke(ThreadContext *tc, const StaticInstPtr &inst) {
     DPRINTF(Faults, "Invoking ArmSev Fault\n");
     if (!FullSystem)
         return;
diff -r dd64a2984966 -r 710ee116eb68 src/arch/arm/faults.hh
--- a/src/arch/arm/faults.hh    Sat Sep 27 09:08:34 2014 -0400
+++ b/src/arch/arm/faults.hh    Sat Sep 27 09:08:36 2014 -0400
@@ -181,10 +181,10 @@
     // exception level
     MiscRegIndex getFaultAddrReg64() const;
 
-    void invoke(ThreadContext *tc,
-            StaticInstPtr inst = StaticInst::nullStaticInstPtr);
_______________________________________________
gem5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/gem5-dev

Reply via email to