From 470939fa848b149faf4119fcf46738681f8e9eff Mon Sep 17 00:00:00 2001 From: Giacomo Travaglini Date: Fri, 22 Oct 2021 14:41:48 +0100 Subject: [PATCH] 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 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/51947 Maintainer: Bobby R. Bruce Maintainer: Jason Lowe-Power Tested-by: kokoro Reviewed-by: Jason Lowe-Power --- src/arch/generic/vec_reg.hh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/arch/generic/vec_reg.hh b/src/arch/generic/vec_reg.hh index 1bc9099da2..34ba554115 100644 --- a/src/arch/generic/vec_reg.hh +++ b/src/arch/generic/vec_reg.hh @@ -238,7 +238,7 @@ struct ParseParam> 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()[i] = b; }