From cf20e8211e2c3f1b2085c949a1e992a1f5d1071c Mon Sep 17 00:00:00 2001 From: Giacomo Travaglini Date: Mon, 24 Sep 2018 16:45:30 +0100 Subject: sim: Extend (UN)SERIALIZE_ARRAY to BitUnions This patch is making it possible to use SERIALIZE_ARRAY and UNSERIALIZE array for serializing arrays of BitUnions. Change-Id: I682766b472585f70a89338f373fb94dff5db53c3 Signed-off-by: Giacomo Travaglini Reviewed-on: https://gem5-review.googlesource.com/12924 Reviewed-by: Gabe Black Maintainer: Gabe Black --- src/sim/serialize.hh | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) (limited to 'src/sim') diff --git a/src/sim/serialize.hh b/src/sim/serialize.hh index 024d29cbb..b3081ad5a 100644 --- a/src/sim/serialize.hh +++ b/src/sim/serialize.hh @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015 ARM Limited + * Copyright (c) 2015, 2018 ARM Limited * All rights reserved * * The license below extends only to copyright in the software and shall @@ -51,6 +51,7 @@ #define __SERIALIZE_HH__ +#include #include #include #include @@ -144,6 +145,31 @@ void arrayParamIn(CheckpointIn &cp, const std::string &name, void objParamIn(CheckpointIn &cp, const std::string &name, SimObject * ¶m); +template +static void +arrayParamOut(CheckpointOut &cp, const std::string &name, + const BitUnionType *param, unsigned size) +{ + // We copy the array into a vector. This is needed since we cannot + // directly typecast a pointer to BitUnionType into a pointer + // of BitUnionBaseType but we can typecast BitUnionType + // to BitUnionBaseType since we overloaded the typecast operator + std::vector> bitunion_vec(param, param + size); + + arrayParamOut(cp, name, bitunion_vec); +} + +template +static void +arrayParamIn(CheckpointIn &cp, const std::string &name, + BitUnionType *param, unsigned size) +{ + std::vector> bitunion_vec(size); + + arrayParamIn(cp, name, bitunion_vec); + std::copy(bitunion_vec.begin(), bitunion_vec.end(), param); +} + // // These macros are streamlined to use in serialize/unserialize // functions. It's assumed that serialize() has a parameter 'os' for -- cgit v1.2.3