summaryrefslogtreecommitdiff
path: root/src/cpu/thread_context.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/cpu/thread_context.cc')
-rw-r--r--src/cpu/thread_context.cc26
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)