diff options
author | Giacomo Gabrielli <giacomo.gabrielli@arm.com> | 2017-07-07 14:13:11 +0100 |
---|---|---|
committer | Giacomo Gabrielli <giacomo.gabrielli@arm.com> | 2019-05-11 12:48:58 +0000 |
commit | c58cb8c9dbeef377da180f1fdaaa1c0eadf85550 (patch) | |
tree | 7591abeb888d8c8e645332749bcaea627628f9bf /src/cpu/base_dyn_inst.hh | |
parent | d0e4cdc9c36466a3dbef8c9f9f509cce8f1a6c34 (diff) | |
download | gem5-c58cb8c9dbeef377da180f1fdaaa1c0eadf85550.tar.xz |
cpu,mem: Add support for partial loads/stores and wide mem. accesses
This changeset adds support for partial (or masked) loads/stores, i.e.
loads/stores that can disable accesses to individual bytes within the
target address range. In addition, this changeset extends the code to
crack memory accesses across most CPU models (TimingSimpleCPU still
TBD), so that arbitrarily wide memory accesses are supported. These
changes are required for supporting ISAs with wide vectors.
Additional authors:
- Gabor Dozsa <gabor.dozsa@arm.com>
- Tiago Muck <tiago.muck@arm.com>
Change-Id: Ibad33541c258ad72925c0b1d5abc3e5e8bf92d92
Signed-off-by: Giacomo Gabrielli <giacomo.gabrielli@arm.com>
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/13518
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Nikos Nikoleris <nikos.nikoleris@arm.com>
Maintainer: Nikos Nikoleris <nikos.nikoleris@arm.com>
Diffstat (limited to 'src/cpu/base_dyn_inst.hh')
-rw-r--r-- | src/cpu/base_dyn_inst.hh | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/src/cpu/base_dyn_inst.hh b/src/cpu/base_dyn_inst.hh index 4084241bd..22a32ec10 100644 --- a/src/cpu/base_dyn_inst.hh +++ b/src/cpu/base_dyn_inst.hh @@ -298,10 +298,12 @@ class BaseDynInst : public ExecContext, public RefCounted cpu->demapPage(vaddr, asn); } - Fault initiateMemRead(Addr addr, unsigned size, Request::Flags flags); + Fault initiateMemRead(Addr addr, unsigned size, Request::Flags flags, + const std::vector<bool>& byteEnable = std::vector<bool>()); Fault writeMem(uint8_t *data, unsigned size, Addr addr, - Request::Flags flags, uint64_t *res); + Request::Flags flags, uint64_t *res, + const std::vector<bool>& byteEnable = std::vector<bool>()); Fault initiateMemAMO(Addr addr, unsigned size, Request::Flags flags, AtomicOpFunctor *amo_op); @@ -918,21 +920,24 @@ class BaseDynInst : public ExecContext, public RefCounted template<class Impl> Fault BaseDynInst<Impl>::initiateMemRead(Addr addr, unsigned size, - Request::Flags flags) + Request::Flags flags, + const std::vector<bool>& byteEnable) { return cpu->pushRequest( dynamic_cast<typename DynInstPtr::PtrType>(this), - /* ld */ true, nullptr, size, addr, flags, nullptr); + /* ld */ true, nullptr, size, addr, flags, nullptr, nullptr, + byteEnable); } template<class Impl> Fault BaseDynInst<Impl>::writeMem(uint8_t *data, unsigned size, Addr addr, - Request::Flags flags, uint64_t *res) + Request::Flags flags, uint64_t *res, + const std::vector<bool>& byteEnable) { return cpu->pushRequest( dynamic_cast<typename DynInstPtr::PtrType>(this), - /* st */ false, data, size, addr, flags, res); + /* st */ false, data, size, addr, flags, res, nullptr, byteEnable); } template<class Impl> |