16 #ifndef HIGHWAY_HWY_CACHE_CONTROL_H_
17 #define HIGHWAY_HWY_CACHE_CONTROL_H_
26 #if !defined(__SSE2__) || (HWY_COMPILER_CLANG && HWY_ARCH_X86_32)
27 #undef HWY_DISABLE_CACHE_CONTROL
28 #define HWY_DISABLE_CACHE_CONTROL
32 #if HWY_ARCH_X86 && !defined(HWY_DISABLE_CACHE_CONTROL) && !HWY_COMPILER_MSVC
33 #include <emmintrin.h>
39 #pragma push_macro("LoadFence")
45 #define HWY_STREAM_MULTIPLE 16
48 #if HWY_ARCH_X86 && !defined(HWY_DISABLE_CACHE_CONTROL) && !HWY_COMPILER_MSVC
49 #define HWY_ATTR_CACHE __attribute__((target("sse2")))
51 #define HWY_ATTR_CACHE
59 #if HWY_ARCH_X86 && !defined(HWY_DISABLE_CACHE_CONTROL)
69 #if HWY_ARCH_X86 && !defined(HWY_DISABLE_CACHE_CONTROL)
78 #if HWY_ARCH_X86 && !defined(HWY_DISABLE_CACHE_CONTROL)
79 _mm_prefetch(
reinterpret_cast<const char*
>(p), _MM_HINT_T0);
80 #elif HWY_COMPILER_GCC || HWY_COMPILER_CLANG
83 __builtin_prefetch(p, 0, 3);
91 #if HWY_ARCH_X86 && !defined(HWY_DISABLE_CACHE_CONTROL)
100 #if HWY_ARCH_X86 && !defined(HWY_DISABLE_CACHE_CONTROL)
108 #pragma pop_macro("LoadFence")
#define HWY_INLINE
Definition: base.h:64
#define HWY_ATTR_CACHE
Definition: cache_control.h:51
Definition: aligned_allocator.h:27
HWY_INLINE HWY_ATTR_CACHE void FlushStream()
Definition: cache_control.h:68
HWY_INLINE HWY_ATTR_CACHE void Prefetch(const T *p)
Definition: cache_control.h:77
HWY_INLINE HWY_ATTR_CACHE void Pause()
Definition: cache_control.h:99
HWY_INLINE HWY_ATTR_CACHE void LoadFence()
Definition: cache_control.h:58
HWY_INLINE HWY_ATTR_CACHE void FlushCacheline(const void *p)
Definition: cache_control.h:90