arch: Fixed Packed register view for VecPredReg

A bug in the VecPredRegContainer::as method was introduced by
a past commit [1]. The commit was not properly handling the case of
a Packed representation

If Packed == true -> NumElement = NumBits instead of
NumElements = NumBits / sizeof(VecElem)

This patch is fixing it

[1]: https://gem5-review.googlesource.com/c/public/gem5/+/42000

Change-Id: I308769c3938d0fac84316936f732a6c383146484
Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com>
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/51867
Reviewed-by: Jason Lowe-Power <power.jg@gmail.com>
Maintainer: Jason Lowe-Power <power.jg@gmail.com>
Tested-by: kokoro <noreply+kokoro@google.com>
This commit is contained in:
Giacomo Travaglini
2021-10-21 09:56:23 +01:00
parent 645e315180
commit 16253e494e

View File

@@ -1,4 +1,4 @@
// Copyright (c) 2017 ARM Limited
// Copyright (c) 2017, 2021 Arm Limited
// All rights reserved
//
// The license below extends only to copyright in the software and shall
@@ -344,23 +344,25 @@ class VecPredRegContainer
/// @tparam VecElem Type of the vector elements.
/// @{
template <typename VecElem>
VecPredRegT<VecElem, NumBits / sizeof(VecElem), Packed, true>
auto
as() const
{
static_assert(NumBits % sizeof(VecElem) == 0,
"Container size incompatible with view size.");
return VecPredRegT<VecElem, NumBits / sizeof(VecElem), Packed, true>(
*this);
return VecPredRegT<VecElem,
Packed ? NumBits : (NumBits / sizeof(VecElem)),
Packed, true>(*this);
}
template <typename VecElem>
VecPredRegT<VecElem, NumBits / sizeof(VecElem), Packed, false>
auto
as()
{
static_assert(NumBits % sizeof(VecElem) == 0,
"Container size incompatible with view size.");
return VecPredRegT<VecElem, NumBits / sizeof(VecElem), Packed, false>(
*this);
return VecPredRegT<VecElem,
Packed ? NumBits : (NumBits / sizeof(VecElem)),
Packed, false>(*this);
}
/// @}
};