mem-ruby: Getter/setter for atomic ops in WriteMask
authorMatthew Poremba <matthew.poremba@amd.com>
Tue, 14 Jul 2020 15:57:07 +0000 (10:57 -0500)
committerMatthew Poremba <matthew.poremba@amd.com>
Fri, 24 Jul 2020 18:30:08 +0000 (18:30 +0000)
Adding getter and setter methods for getting and setting the atomic ops
in the WriteMask class. This allows for message types with WriteMasks to
get or set the atomic ops without explicitly modifying the constructor
for the message type. This will beused by the DMASequencer which uses the
SequencerMsg type where the constructor is auto generated via SLICC.

Change-Id: I71787d294c1b89547618e9a13e386b65bb3e1021
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/31474
Reviewed-by: Bobby R. Bruce <bbruce@ucdavis.edu>
Reviewed-by: Anthony Gutierrez <anthony.gutierrez@amd.com>
Maintainer: Jason Lowe-Power <power.jg@gmail.com>
Tested-by: kokoro <noreply+kokoro@google.com>
src/mem/ruby/common/WriteMask.hh

index 0ba69891ad5683789359c810f14d5abbc13933fd..6a0a041e78fb9ccc123421b35a65c0540caf63a8 100644 (file)
@@ -40,6 +40,8 @@
 class WriteMask
 {
   public:
+    typedef std::vector<std::pair<int, AtomicOpFunctor* >> AtomicOpVector;
+
     WriteMask()
       : mSize(RubySystem::getBlockSizeBytes()), mMask(mSize, false),
         mAtomic(false)
@@ -53,8 +55,7 @@ class WriteMask
       : mSize(size), mMask(mask), mAtomic(false)
     {}
 
-    WriteMask(int size, std::vector<bool> &mask,
-              std::vector<std::pair<int, AtomicOpFunctor*> > atomicOp)
+    WriteMask(int size, std::vector<bool> &mask, AtomicOpVector atomicOp)
       : mSize(size), mMask(mask), mAtomic(true), mAtomicOp(atomicOp)
     {}
 
@@ -184,11 +185,25 @@ class WriteMask
             (*fnctr)(p);
         }
     }
+
+    const AtomicOpVector&
+    getAtomicOps() const
+    {
+        return mAtomicOp;
+    }
+
+    void
+    setAtomicOps(const AtomicOpVector& atomicOps)
+    {
+        mAtomic = true;
+        mAtomicOp = std::move(atomicOps);
+    }
+
   private:
     int mSize;
     std::vector<bool> mMask;
     bool mAtomic;
-    std::vector<std::pair<int, AtomicOpFunctor*> > mAtomicOp;
+    AtomicOpVector mAtomicOp;
 };
 
 inline std::ostream&