@@ -21,11 +21,23 @@ std::atomic<uint32_t> clFlushCounter(0u);
2121std::atomic<uint32_t > pauseCounter (0u );
2222std::atomic<uint32_t > sfenceCounter (0u );
2323
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+
2433volatile TagAddressType *pauseAddress = nullptr ;
2534TaskCountType pauseValue = 0u ;
2635uint32_t pauseOffset = 0u ;
36+ uint64_t rdtscRetValue = 0 ;
37+ unsigned char umwaitRetValue = 0 ;
2738
2839std::function<void ()> setupPauseAddress;
40+ std::function<unsigned char ()> controlUmwait;
2941} // namespace CpuIntrinsicsTests
3042
3143namespace NEO {
@@ -56,5 +68,26 @@ void pause() {
5668 }
5769}
5870
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+
5992} // namespace CpuIntrinsics
6093} // namespace NEO
0 commit comments