From dae843d4d6cba8593a0426c9a2f7418a3c76d7f8 Mon Sep 17 00:00:00 2001 From: Marco Costalba Date: Mon, 8 Oct 2012 11:19:50 +0200 Subject: [PATCH 1/1] Rearrange prefetch code No functional change. --- src/misc.cpp | 12 ++++-------- src/types.h | 4 ++++ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/misc.cpp b/src/misc.cpp index 1e1b220c..608d7725 100644 --- a/src/misc.cpp +++ b/src/misc.cpp @@ -227,21 +227,17 @@ void prefetch(char*) {} #else -# if defined(__INTEL_COMPILER) || defined(__ICL) || defined(_MSC_VER) -# include -# endif - void prefetch(char* addr) { -# if defined(__INTEL_COMPILER) || defined(__ICL) +# if defined(__INTEL_COMPILER) // This hack prevents prefetches to be optimized away by // Intel compiler. Both MSVC and gcc seems not affected. __asm__ (""); # endif -# if defined(__INTEL_COMPILER) || defined(__ICL) || defined(_MSC_VER) - _mm_prefetch(addr, _MM_HINT_T2); - _mm_prefetch(addr+64, _MM_HINT_T2); // 64 bytes ahead +# if defined(__INTEL_COMPILER) || defined(_MSC_VER) + _mm_prefetch(addr, _MM_HINT_T0); + _mm_prefetch(addr+64, _MM_HINT_T0); // 64 bytes ahead # else __builtin_prefetch(addr); __builtin_prefetch(addr+64); diff --git a/src/types.h b/src/types.h index 59d051ec..0774557e 100644 --- a/src/types.h +++ b/src/types.h @@ -51,6 +51,10 @@ # include // Intel header for _mm_popcnt_u64() intrinsic #endif +# if !defined(NO_PREFETCH) && (defined(__INTEL_COMPILER) || defined(_MSC_VER)) +# include // Intel and Microsoft header for _mm_prefetch() +# endif + #if defined(_MSC_VER) || defined(__INTEL_COMPILER) # define CACHE_LINE_ALIGNMENT __declspec(align(64)) #else -- 2.39.2