From 019e3204ba54e23daf597becf36bb92f7272b0d3 Mon Sep 17 00:00:00 2001 From: Gabor Dozsa Date: Thu, 8 Feb 2018 15:07:46 +0000 Subject: [PATCH] cpu-o3: Increase LSQ buffer sizes to match max vector length Change-Id: I5890c7cfa147125ce3389001f85d56d4b5a9911d Signed-off-by: Gabor Dozsa Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/13525 Tested-by: kokoro Maintainer: Andreas Sandberg Reviewed-by: Michael LeBeane Reviewed-by: Jason Lowe-Power --- src/cpu/o3/lsq_unit.hh | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/cpu/o3/lsq_unit.hh b/src/cpu/o3/lsq_unit.hh index 5c64971c1..d3f1d0712 100644 --- a/src/cpu/o3/lsq_unit.hh +++ b/src/cpu/o3/lsq_unit.hh @@ -51,6 +51,7 @@ #include #include "arch/generic/debugfaults.hh" +#include "arch/generic/vec_reg.hh" #include "arch/isa_traits.hh" #include "arch/locked_mem.hh" #include "arch/mmapped_ipr.hh" @@ -80,6 +81,8 @@ template class LSQUnit { public: + static constexpr auto MaxDataBytes = MaxVecRegLenInBytes; + typedef typename Impl::O3CPU O3CPU; typedef typename Impl::DynInstPtr DynInstPtr; typedef typename Impl::CPUPol::IEW IEW; @@ -97,7 +100,7 @@ class LSQUnit /** The request. */ LSQRequest* req; /** The size of the operation. */ - uint8_t _size; + uint32_t _size; /** Valid entry. */ bool _valid; public: @@ -142,8 +145,8 @@ class LSQUnit /** Member accessors. */ /** @{ */ bool valid() const { return _valid; } - uint8_t& size() { return _size; } - const uint8_t& size() const { return _size; } + uint32_t& size() { return _size; } + const uint32_t& size() const { return _size; } const DynInstPtr& instruction() const { return inst; } /** @} */ }; @@ -152,7 +155,7 @@ class LSQUnit { private: /** The store data. */ - char _data[64]; // TODO: 64 should become a parameter + char _data[MaxDataBytes]; /** Whether or not the store can writeback. */ bool _canWB; /** Whether or not the store is committed. */ @@ -659,7 +662,7 @@ LSQUnit::read(LSQRequest *req, int load_idx) if (req->mainRequest()->isMmappedIpr()) { assert(!load_inst->memData); - load_inst->memData = new uint8_t[64]; + load_inst->memData = new uint8_t[MaxDataBytes]; ThreadContext *thread = cpu->tcBase(lsqID); PacketPtr main_pkt = new Packet(req->mainRequest(), MemCmd::ReadReq); -- 2.30.2