diff options
Diffstat (limited to 'src/cpu/thread_context.cc')
-rw-r--r-- | src/cpu/thread_context.cc | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/src/cpu/thread_context.cc b/src/cpu/thread_context.cc index 2d907a055..7597dbfb2 100644 --- a/src/cpu/thread_context.cc +++ b/src/cpu/thread_context.cc @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2016 ARM Limited + * Copyright (c) 2012, 2016-2017 ARM Limited * Copyright (c) 2013 Advanced Micro Devices, Inc. * All rights reserved * @@ -43,6 +43,7 @@ #include "cpu/thread_context.hh" +#include "arch/generic/vec_pred_reg.hh" #include "arch/kernel_stats.hh" #include "base/logging.hh" #include "base/trace.hh" @@ -86,6 +87,17 @@ ThreadContext::compare(ThreadContext *one, ThreadContext *two) panic("Vec reg idx %d doesn't match, one: %#x, two: %#x", i, t1, t2); } + + // Then loop through the predicate registers. + for (int i = 0; i < TheISA::NumVecPredRegs; ++i) { + RegId rid(VecPredRegClass, i); + const TheISA::VecPredRegContainer& t1 = one->readVecPredReg(rid); + const TheISA::VecPredRegContainer& t2 = two->readVecPredReg(rid); + if (t1 != t2) + panic("Pred reg idx %d doesn't match, one: %#x, two: %#x", + i, t1, t2); + } + for (int i = 0; i < TheISA::NumMiscRegs; ++i) { RegVal t1 = one->readMiscRegNoEffect(i); RegVal t2 = two->readMiscRegNoEffect(i); @@ -168,6 +180,12 @@ serialize(ThreadContext &tc, CheckpointOut &cp) } SERIALIZE_CONTAINER(vecRegs); + std::vector<TheISA::VecPredRegContainer> vecPredRegs(NumVecPredRegs); + for (int i = 0; i < NumVecPredRegs; ++i) { + vecPredRegs[i] = tc.readVecPredRegFlat(i); + } + SERIALIZE_CONTAINER(vecPredRegs); + RegVal intRegs[NumIntRegs]; for (int i = 0; i < NumIntRegs; ++i) intRegs[i] = tc.readIntRegFlat(i); @@ -203,6 +221,12 @@ unserialize(ThreadContext &tc, CheckpointIn &cp) tc.setVecRegFlat(i, vecRegs[i]); } + std::vector<TheISA::VecPredRegContainer> vecPredRegs(NumVecPredRegs); + UNSERIALIZE_CONTAINER(vecPredRegs); + for (int i = 0; i < NumVecPredRegs; ++i) { + tc.setVecPredRegFlat(i, vecPredRegs[i]); + } + RegVal intRegs[NumIntRegs]; UNSERIALIZE_ARRAY(intRegs, NumIntRegs); for (int i = 0; i < NumIntRegs; ++i) |