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: 12461dbd6a]
This commit is contained in:
Jatin Chaudhary
2023-11-27 11:31:24 +00:00
committed by Jatin Jaikishan Chaudhary
orang tua 761f932275
melakukan 1114efcc0d
@@ -43,8 +43,14 @@
#include <string>
#include <thread>
#include <vector>
#include <immintrin.h>
#if defined(__AVX__)
#if defined(__MINGW64__)
#include <intrin.h>
#else
#include <immintrin.h>
#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<const __m512i* __restrict&>(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<const __m512i* __restrict&>(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<const __m256i* __restrict&>(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<const __m256i* __restrict&>(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<int* __restrict&>(dst)++,
*reinterpret_cast<const int* __restrict&>(src)++);
}
#else
amd::Os::fastMemcpy(dst, src, size);
#endif
}
// ================================================================================================