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:
Giacomo Travaglini
2021-10-22 14:41:48 +01:00
parent 0d64ec9a29
commit 470939fa84

View File

@@ -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;
}