forked from UoB-HPC/SimEng
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMockInstruction.hh
69 lines (51 loc) · 2.46 KB
/
MockInstruction.hh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#pragma once
#include "gmock/gmock.h"
#include "simeng/Instruction.hh"
namespace simeng {
/** Mock implementation of the `Instruction` interface. */
class MockInstruction : public Instruction {
public:
MOCK_CONST_METHOD0(getSourceRegisters, const span<Register>());
MOCK_CONST_METHOD0(getSourceOperands, const span<RegisterValue>());
MOCK_CONST_METHOD0(getDestinationRegisters, const span<Register>());
MOCK_METHOD2(renameSource, void(uint16_t i, Register renamed));
MOCK_METHOD2(renameDestination, void(uint16_t i, Register renamed));
MOCK_METHOD2(supplyOperand, void(uint16_t i, const RegisterValue& value));
MOCK_CONST_METHOD1(isOperandReady, bool(int i));
MOCK_CONST_METHOD0(canExecute, bool());
MOCK_METHOD0(execute, void());
MOCK_CONST_METHOD0(getResults, const span<RegisterValue>());
MOCK_METHOD0(generateAddresses, span<const memory::MemoryAccessTarget>());
MOCK_METHOD2(supplyData, void(uint64_t address, const RegisterValue& data));
MOCK_CONST_METHOD0(getGeneratedAddresses,
span<const memory::MemoryAccessTarget>());
MOCK_CONST_METHOD0(hasAllData, bool());
MOCK_CONST_METHOD0(getData, span<const RegisterValue>());
MOCK_CONST_METHOD0(checkEarlyBranchMisprediction,
std::tuple<bool, uint64_t>());
MOCK_CONST_METHOD0(getBranchType, BranchType());
MOCK_CONST_METHOD0(getKnownOffset, int64_t());
MOCK_CONST_METHOD0(isStoreAddress, bool());
MOCK_CONST_METHOD0(isStoreData, bool());
MOCK_CONST_METHOD0(isLoad, bool());
MOCK_CONST_METHOD0(isBranch, bool());
MOCK_CONST_METHOD0(getGroup, uint16_t());
MOCK_CONST_METHOD0(getLSQLatency, uint16_t());
MOCK_METHOD0(getSupportedPorts, const std::vector<uint16_t>&());
MOCK_METHOD1(setExecutionInfo, void(const ExecutionInfo& info));
void setBranchResults(bool wasTaken, uint64_t targetAddress) {
branchTaken_ = wasTaken;
branchAddress_ = targetAddress;
}
void setExecuted(bool executed) { executed_ = executed; }
void setExceptionEncountered(bool exceptionEncountered) {
exceptionEncountered_ = exceptionEncountered;
}
void setDataPending(uint8_t value) { dataPending_ = value; }
void setLatency(uint16_t cycles) { latency_ = cycles; }
void setLSQLatency(uint16_t cycles) { lsqExecutionLatency_ = cycles; }
void setStallCycles(uint16_t cycles) { stallCycles_ = cycles; }
void setIsMicroOp(bool isMicroOp) { isMicroOp_ = isMicroOp; }
void setIsLastMicroOp(bool isLastOp) { isLastMicroOp_ = isLastOp; }
};
} // namespace simeng