cpu: add a new instruction type 'Atomic'
authorTuan Ta <qtt2@cornell.edu>
Tue, 13 Feb 2018 04:19:50 +0000 (23:19 -0500)
committerTuan Ta <qtt2@cornell.edu>
Thu, 14 Jun 2018 22:41:30 +0000 (22:41 +0000)
This patch adds a new flag named 'Atomic' to support ISA implementations
that use AtomicOpFunctor to handle atomic instructions instead of a
pair of locking load and unlocking store.

Change-Id: I1fbee6e54432396cb49dfc59ad9006b75812d115
Reviewed-on: https://gem5-review.googlesource.com/8187
Reviewed-by: Anthony Gutierrez <anthony.gutierrez@amd.com>
Maintainer: Anthony Gutierrez <anthony.gutierrez@amd.com>

src/cpu/StaticInstFlags.py
src/cpu/base_dyn_inst.hh
src/cpu/static_inst.hh

index 55ef456ce4a218af6303aa34908e5a5297e73589..170ca6d09e86a853f4070a609cb30af8b00aec9d 100644 (file)
@@ -64,6 +64,7 @@ class StaticInstFlags(Enum):
         'IsMemRef',         # References memory (load, store, or prefetch)
         'IsLoad',           # Reads from memory (load or prefetch).
         'IsStore',          # Writes to memory.
+        'IsAtomic',         # Does atomic RMW to memory.
         'IsStoreConditional',   # Store conditional instruction.
         'IsIndexed',        # Accesses memory with an indexed address
                             # computation
index 2c08a3c67e11549ad8e77ee6b4d83c2db53f473b..93cafd6942de0ef9fce024d818b98f23b43a907b 100644 (file)
@@ -505,6 +505,7 @@ class BaseDynInst : public ExecContext, public RefCounted
     bool isMemRef()       const { return staticInst->isMemRef(); }
     bool isLoad()         const { return staticInst->isLoad(); }
     bool isStore()        const { return staticInst->isStore(); }
+    bool isAtomic()       const { return staticInst->isAtomic(); }
     bool isStoreConditional() const
     { return staticInst->isStoreConditional(); }
     bool isInstPrefetch() const { return staticInst->isInstPrefetch(); }
index 84b3525027aedcd9307999f2a4949c46d00a1b8a..16b5ffd3c2d4343ae7846dc1dce41328609ed616 100644 (file)
@@ -144,6 +144,7 @@ class StaticInst : public RefCounted, public StaticInstFlags
     bool isMemRef()       const { return flags[IsMemRef]; }
     bool isLoad()         const { return flags[IsLoad]; }
     bool isStore()        const { return flags[IsStore]; }
+    bool isAtomic()       const { return flags[IsAtomic]; }
     bool isStoreConditional()     const { return flags[IsStoreConditional]; }
     bool isInstPrefetch() const { return flags[IsInstPrefetch]; }
     bool isDataPrefetch() const { return flags[IsDataPrefetch]; }