summaryrefslogtreecommitdiff
path: root/src/cpu/checker/cpu.hh
diff options
context:
space:
mode:
Diffstat (limited to 'src/cpu/checker/cpu.hh')
-rw-r--r--src/cpu/checker/cpu.hh35
1 files changed, 34 insertions, 1 deletions
diff --git a/src/cpu/checker/cpu.hh b/src/cpu/checker/cpu.hh
index 4468689bd..9d6061ad8 100644
--- a/src/cpu/checker/cpu.hh
+++ b/src/cpu/checker/cpu.hh
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, 2016 ARM Limited
+ * Copyright (c) 2011, 2016-2017 ARM Limited
* Copyright (c) 2013 Advanced Micro Devices, Inc.
* All rights reserved
*
@@ -304,6 +304,22 @@ class CheckerCPU : public BaseCPU, public ExecContext
return thread->readVecElem(reg);
}
+ const VecPredRegContainer&
+ readVecPredRegOperand(const StaticInst *si, int idx) const override
+ {
+ const RegId& reg = si->srcRegIdx(idx);
+ assert(reg.isVecPredReg());
+ return thread->readVecPredReg(reg);
+ }
+
+ VecPredRegContainer&
+ getWritableVecPredRegOperand(const StaticInst *si, int idx) override
+ {
+ const RegId& reg = si->destRegIdx(idx);
+ assert(reg.isVecPredReg());
+ return thread->getWritableVecPredReg(reg);
+ }
+
CCReg
readCCRegOperand(const StaticInst *si, int idx) override
{
@@ -336,6 +352,14 @@ class CheckerCPU : public BaseCPU, public ExecContext
InstResult::ResultType::VecElem));
}
+ template<typename T>
+ void
+ setVecPredResult(T&& t)
+ {
+ result.push(InstResult(std::forward<T>(t),
+ InstResult::ResultType::VecPredReg));
+ }
+
void
setIntRegOperand(const StaticInst *si, int idx, RegVal val) override
{
@@ -383,6 +407,15 @@ class CheckerCPU : public BaseCPU, public ExecContext
setVecElemResult(val);
}
+ void setVecPredRegOperand(const StaticInst *si, int idx,
+ const VecPredRegContainer& val) override
+ {
+ const RegId& reg = si->destRegIdx(idx);
+ assert(reg.isVecPredReg());
+ thread->setVecPredReg(reg, val);
+ setVecPredResult(val);
+ }
+
bool readPredicate() const override { return thread->readPredicate(); }
void