diff options
author | Tuan Ta <qtt2@cornell.edu> | 2018-02-12 23:19:50 -0500 |
---|---|---|
committer | Tuan Ta <qtt2@cornell.edu> | 2018-06-14 22:41:30 +0000 |
commit | 7341f14f147337810325b19bac20db095b162911 (patch) | |
tree | f8c5e2795048a110d216b4ad7108456bdaead5f8 | |
parent | 78fb2c1a5d5e422bf14f134d677a83e3022238f1 (diff) | |
download | gem5-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.py | 1 | ||||
-rw-r--r-- | src/cpu/base_dyn_inst.hh | 1 | ||||
-rw-r--r-- | src/cpu/static_inst.hh | 1 |
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]; } |