From 1114efcc0d76a92870aa0f741c1e81d48ced6714 Mon Sep 17 00:00:00 2001 From: Jatin Chaudhary Date: Mon, 27 Nov 2023 11:31:24 +0000 Subject: [PATCH] SWDEV-431399 - use x86 intrinsics only x86 platforms This was highlighted by github issue: https://github.com/ROCm-Developer-Tools/clr/issues/32 On RISC-V platforms this header might not be present. Change-Id: I5f0959a7b281c760802e76541d50693d1a3902be [ROCm/clr commit: 12461dbd6a26e02d03b572399b6d629f44b0a318] --- .../clr/rocclr/device/rocm/rocvirtual.cpp | 44 ++++++++++++------- 1 file changed, 27 insertions(+), 17 deletions(-) diff --git a/projects/clr/rocclr/device/rocm/rocvirtual.cpp b/projects/clr/rocclr/device/rocm/rocvirtual.cpp index e3854538da..34a4e1a0b0 100644 --- a/projects/clr/rocclr/device/rocm/rocvirtual.cpp +++ b/projects/clr/rocclr/device/rocm/rocvirtual.cpp @@ -43,8 +43,14 @@ #include #include #include -#include +#if defined(__AVX__) +#if defined(__MINGW64__) +#include +#else +#include +#endif +#endif /** * HSA image object size in bytes (see HSAIL spec) @@ -2900,23 +2906,24 @@ bool VirtualGPU::createVirtualQueue(uint deviceQueueSize) // ================================================================================================ __attribute__((optimize("unroll-all-loops"), always_inline)) -static inline void nontemporalMemcpy(void* __restrict dst, const void* __restrict src, - uint16_t size) { - #if defined(__AVX512F__) - for (auto i = 0u; i != size / sizeof(__m512i); ++i) { - _mm512_stream_si512(reinterpret_cast<__m512i* __restrict&>(dst)++, - *reinterpret_cast(src)++); - } - size = size % sizeof(__m512i); - #endif +static inline void nontemporalMemcpy( + void* __restrict dst, const void* __restrict src, uint16_t size) { +#if defined(ATI_ARCH_X86) +#if defined(__AVX512F__) + for (auto i = 0u; i != size / sizeof(__m512i); ++i) { + _mm512_stream_si512(reinterpret_cast<__m512i* __restrict&>(dst)++, + *reinterpret_cast(src)++); + } + size = size % sizeof(__m512i); +#endif - #if defined(__AVX__) - for (auto i = 0u; i != size / sizeof(__m256i); ++i) { - _mm256_stream_si256(reinterpret_cast<__m256i* __restrict&>(dst)++, - *reinterpret_cast(src)++); - } - size = size % sizeof(__m256i); - #endif +#if defined(__AVX__) + for (auto i = 0u; i != size / sizeof(__m256i); ++i) { + _mm256_stream_si256(reinterpret_cast<__m256i* __restrict&>(dst)++, + *reinterpret_cast(src)++); + } + size = size % sizeof(__m256i); +#endif for (auto i = 0u; i != size / sizeof(__m128i); ++i) { _mm_stream_si128(reinterpret_cast<__m128i* __restrict&>(dst)++, @@ -2934,6 +2941,9 @@ static inline void nontemporalMemcpy(void* __restrict dst, const void* __restric _mm_stream_si32(reinterpret_cast(dst)++, *reinterpret_cast(src)++); } +#else + amd::Os::fastMemcpy(dst, src, size); +#endif } // ================================================================================================