From: Tuan Ta Date: Tue, 13 Feb 2018 04:19:50 +0000 (-0500) Subject: cpu: add a new instruction type 'Atomic' X-Git-Tag: v19.0.0.0~2051 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=7341f14f147337810325b19bac20db095b162911;p=gem5.git 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 Maintainer: Anthony Gutierrez --- 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]; }