/* * Copyright (C) 2020-2022 Intel Corporation * * SPDX-License-Identifier: MIT * */ #include "shared/source/utilities/cpuintrinsics.h" #include "shared/source/command_stream/task_count_helper.h" #include "shared/source/helpers/ptr_math.h" #include #include #include namespace CpuIntrinsicsTests { // std::atomic is used for sake of sanitation in MT tests std::atomic lastClFlushedPtr(0u); std::atomic clFlushCounter(0u); std::atomic pauseCounter(0u); std::atomic sfenceCounter(0u); volatile TagAddressType *pauseAddress = nullptr; TaskCountType pauseValue = 0u; uint32_t pauseOffset = 0u; std::function setupPauseAddress; } // namespace CpuIntrinsicsTests namespace NEO { namespace CpuIntrinsics { void clFlush(void const *ptr) { CpuIntrinsicsTests::clFlushCounter++; CpuIntrinsicsTests::lastClFlushedPtr = reinterpret_cast(ptr); } void sfence() { CpuIntrinsicsTests::sfenceCounter++; } void pause() { CpuIntrinsicsTests::pauseCounter++; if (CpuIntrinsicsTests::pauseAddress != nullptr) { *CpuIntrinsicsTests::pauseAddress = CpuIntrinsicsTests::pauseValue; if (CpuIntrinsicsTests::setupPauseAddress) { CpuIntrinsicsTests::setupPauseAddress(); } else { CpuIntrinsicsTests::pauseAddress = ptrOffset(CpuIntrinsicsTests::pauseAddress, CpuIntrinsicsTests::pauseOffset); } } } } // namespace CpuIntrinsics } // namespace NEO