arch: Fix serialization/deserialization of Vector registers
This bug has been introduced by [1]. Without this fix a vector register is only partially unserialized, effectively breaking checkpoiting for vectored applications. For example if I am initializing a vector register with the following checkpointed value: 0xaaaaaaaa_aaaaaaaa_aaaaaaaa_aaaaaaaa The ParseParam logic will produce instead 0xaaaaaaaa_aaaaaaaa_00000000_00000000 [1]: https://gem5-review.googlesource.com/c/public/gem5/+/41994 Change-Id: I5010d9f39d57fcee390e7419a64dbcd293e51fa0 Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com> Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/51947 Maintainer: Bobby R. Bruce <bbruce@ucdavis.edu> Maintainer: Jason Lowe-Power <power.jg@gmail.com> Tested-by: kokoro <noreply+kokoro@google.com> Reviewed-by: Jason Lowe-Power <power.jg@gmail.com>
This commit is contained in:
@@ -238,7 +238,7 @@ struct ParseParam<VecRegContainer<Sz>>
|
||||
|
||||
for (int i = 0; i < Sz; i++) {
|
||||
uint8_t b = 0;
|
||||
if (2 * i < value.size())
|
||||
if (2 * i < str.size())
|
||||
b = stoul(str.substr(i * 2, 2), nullptr, 16);
|
||||
value.template as<uint8_t>()[i] = b;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user