@@ -21,11 +21,23 @@ std::atomic<uint32_t> clFlushCounter(0u);
21
21
std::atomic<uint32_t > pauseCounter (0u );
22
22
std::atomic<uint32_t > sfenceCounter (0u );
23
23
24
+ std::atomic<uint64_t > lastUmwaitCounter (0u );
25
+ std::atomic<unsigned int > lastUmwaitControl (0u );
26
+ std::atomic<uint32_t > umwaitCounter (0u );
27
+
28
+ std::atomic<uintptr_t > lastUmonitorPtr (0u );
29
+ std::atomic<uint32_t > umonitorCounter (0u );
30
+
31
+ std::atomic<uint32_t > rdtscCounter (0u );
32
+
24
33
volatile TagAddressType *pauseAddress = nullptr ;
25
34
TaskCountType pauseValue = 0u ;
26
35
uint32_t pauseOffset = 0u ;
36
+ uint64_t rdtscRetValue = 0 ;
37
+ unsigned char umwaitRetValue = 0 ;
27
38
28
39
std::function<void ()> setupPauseAddress;
40
+ std::function<unsigned char ()> controlUmwait;
29
41
} // namespace CpuIntrinsicsTests
30
42
31
43
namespace NEO {
@@ -56,5 +68,26 @@ void pause() {
56
68
}
57
69
}
58
70
71
+ unsigned char umwait (unsigned int ctrl, uint64_t counter) {
72
+ CpuIntrinsicsTests::lastUmwaitControl = ctrl;
73
+ CpuIntrinsicsTests::lastUmwaitCounter = counter;
74
+ CpuIntrinsicsTests::umwaitCounter++;
75
+ if (CpuIntrinsicsTests::controlUmwait) {
76
+ return CpuIntrinsicsTests::controlUmwait ();
77
+ } else {
78
+ return CpuIntrinsicsTests::umwaitRetValue;
79
+ }
80
+ }
81
+
82
+ void umonitor (void *a) {
83
+ CpuIntrinsicsTests::lastUmonitorPtr = reinterpret_cast <uintptr_t >(a);
84
+ CpuIntrinsicsTests::umonitorCounter++;
85
+ }
86
+
87
+ uint64_t rdtsc () {
88
+ CpuIntrinsicsTests::rdtscCounter++;
89
+ return CpuIntrinsicsTests::rdtscRetValue;
90
+ }
91
+
59
92
} // namespace CpuIntrinsics
60
93
} // namespace NEO
0 commit comments