From edec5da87ca9cb27a9bc4cdd1eca7c28544fef3b Mon Sep 17 00:00:00 2001 From: FunkyFr3sh Date: Mon, 19 Sep 2022 13:59:02 +0200 Subject: [PATCH] tweak avx copy --- src/blt.c | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/src/blt.c b/src/blt.c index 846f034..395bb4a 100644 --- a/src/blt.c +++ b/src/blt.c @@ -14,27 +14,29 @@ void blt_copy( #ifdef __AVX__ if (size >= 1024 * 4096 && g_blt_use_avx && !((DWORD)dst % 32) && !((DWORD)src % 32)) { + _mm_prefetch((const char*)(src), _MM_HINT_NTA); + while (size >= 256) { __m256i c0 = _mm256_load_si256(((const __m256i*)src) + 0); __m256i c1 = _mm256_load_si256(((const __m256i*)src) + 1); __m256i c2 = _mm256_load_si256(((const __m256i*)src) + 2); __m256i c3 = _mm256_load_si256(((const __m256i*)src) + 3); + __m256i c4 = _mm256_load_si256(((const __m256i*)src) + 4); + __m256i c5 = _mm256_load_si256(((const __m256i*)src) + 5); + __m256i c6 = _mm256_load_si256(((const __m256i*)src) + 6); + __m256i c7 = _mm256_load_si256(((const __m256i*)src) + 7); + + _mm_prefetch((const char*)(src + 512), _MM_HINT_NTA); _mm256_stream_si256((((__m256i*)dst) + 0), c0); _mm256_stream_si256((((__m256i*)dst) + 1), c1); _mm256_stream_si256((((__m256i*)dst) + 2), c2); _mm256_stream_si256((((__m256i*)dst) + 3), c3); - - c0 = _mm256_load_si256(((const __m256i*)src) + 4); - c1 = _mm256_load_si256(((const __m256i*)src) + 5); - c2 = _mm256_load_si256(((const __m256i*)src) + 6); - c3 = _mm256_load_si256(((const __m256i*)src) + 7); - - _mm256_stream_si256((((__m256i*)dst) + 4), c0); - _mm256_stream_si256((((__m256i*)dst) + 5), c1); - _mm256_stream_si256((((__m256i*)dst) + 6), c2); - _mm256_stream_si256((((__m256i*)dst) + 7), c3); + _mm256_stream_si256((((__m256i*)dst) + 4), c4); + _mm256_stream_si256((((__m256i*)dst) + 5), c5); + _mm256_stream_si256((((__m256i*)dst) + 6), c6); + _mm256_stream_si256((((__m256i*)dst) + 7), c7); src += 256; dst += 256;