/* * Copyright (C) 2020-2023 Intel Corporation * * SPDX-License-Identifier: MIT * */ #include "shared/source/utilities/cpuintrinsics.h" #if defined(_WIN32) #include #include #pragma intrinsic(__rdtsc) #else #include #include #endif #if defined(__ARM_ARCH) #include #else #include #endif namespace NEO { namespace CpuIntrinsics { void clFlush(void const *ptr) { _mm_clflush(ptr); } void clFlushOpt(void *ptr) { #ifdef SUPPORTS_CLFLUSHOPT _mm_clflushopt(ptr); #else _mm_clflush(ptr); #endif } void sfence() { _mm_sfence(); } void pause() { _mm_pause(); } unsigned char umwait(unsigned int ctrl, uint64_t counter) { #ifdef SUPPORTS_WAITPKG return _umwait(ctrl, counter); #else return 0; #endif } void umonitor(void *a) { #ifdef SUPPORTS_WAITPKG _umonitor(a); #endif } uint64_t rdtsc() { return __rdtsc(); } } // namespace CpuIntrinsics } // namespace NEO