summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTuan Ta <qtt2@cornell.edu>2018-02-12 23:19:50 -0500
committerTuan Ta <qtt2@cornell.edu>2018-06-14 22:41:30 +0000
commit7341f14f147337810325b19bac20db095b162911 (patch)
treef8c5e2795048a110d216b4ad7108456bdaead5f8
parent78fb2c1a5d5e422bf14f134d677a83e3022238f1 (diff)
downloadgem5-7341f14f147337810325b19bac20db095b162911.tar.xz
cpu: add a new instruction type 'Atomic'
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>
-rw-r--r--src/cpu/StaticInstFlags.py1
-rw-r--r--src/cpu/base_dyn_inst.hh1
-rw-r--r--src/cpu/static_inst.hh1
3 files changed, 3 insertions, 0 deletions
diff --git a/src/cpu/StaticInstFlags.py b/src/cpu/StaticInstFlags.py
index 55ef456ce..170ca6d09 100644
--- a/src/cpu/StaticInstFlags.py
+++ b/src/cpu/StaticInstFlags.py
@@ -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
diff --git a/src/cpu/base_dyn_inst.hh b/src/cpu/base_dyn_inst.hh
index 2c08a3c67..93cafd694 100644
--- a/src/cpu/base_dyn_inst.hh
+++ b/src/cpu/base_dyn_inst.hh
@@ -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(); }
diff --git a/src/cpu/static_inst.hh b/src/cpu/static_inst.hh
index 84b352502..16b5ffd3c 100644
--- a/src/cpu/static_inst.hh
+++ b/src/cpu/static_inst.hh
@@ -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]; }