fastmodel: Ensure unset vec reg bits are zero/false.
authorGabe Black <gabeblack@google.com>
Tue, 14 Jan 2020 01:00:41 +0000 (17:00 -0800)
committerGabe Black <gabeblack@google.com>
Thu, 6 Feb 2020 04:46:31 +0000 (04:46 +0000)
These bits won't be overwritten with values from IRIS, and so we should
make sure they're cleared and don't have old values or junk.

Change-Id: Ib81780ab523f00d6a4d31841d68a3d83924982a9
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/24327
Reviewed-by: Giacomo Travaglini <giacomo.travaglini@arm.com>
Maintainer: Gabe Black <gabeblack@google.com>
Tested-by: kokoro <noreply+kokoro@google.com>
src/arch/arm/fastmodel/iris/thread_context.cc

index f487ebc7ce9f651b4036808ba0d626738a198bd9..f3b4c95afb618c49846e2e9e941052700e7270da 100644 (file)
@@ -572,12 +572,14 @@ const ArmISA::VecRegContainer &
 ThreadContext::readVecReg(const RegId &reg_id) const
 {
     const RegIndex idx = reg_id.index();
+    ArmISA::VecRegContainer &reg = vecRegs.at(idx);
+    reg.zero();
+
     // Ignore accesses to registers which aren't architected. gem5 defines a
     // few extra registers which it uses internally in the implementation of
     // some instructions.
     if (idx >= vecRegIds.size())
-        return vecRegs.at(idx);
-    ArmISA::VecRegContainer &reg = vecRegs.at(idx);
+        return reg;
 
     iris::ResourceReadResult result;
     call().resource_read(_instId, result, vecRegIds.at(idx));
@@ -598,10 +600,12 @@ const ArmISA::VecPredRegContainer &
 ThreadContext::readVecPredReg(const RegId &reg_id) const
 {
     RegIndex idx = reg_id.index();
-    if (idx >= vecPredRegIds.size())
-        return vecPredRegs.at(idx);
 
     ArmISA::VecPredRegContainer &reg = vecPredRegs.at(idx);
+    reg.reset();
+
+    if (idx >= vecPredRegIds.size())
+        return reg;
 
     iris::ResourceReadResult result;
     call().resource_read(_instId, result, vecPredRegIds.at(idx));