15 #ifndef HIGHWAY_HWY_CACHE_CONTROL_H_
16 #define HIGHWAY_HWY_CACHE_CONTROL_H_
25 #if !defined(__SSE2__) || (HWY_COMPILER_CLANG && HWY_ARCH_X86_32)
26 #undef HWY_DISABLE_CACHE_CONTROL
27 #define HWY_DISABLE_CACHE_CONTROL
31 #if HWY_ARCH_X86 && !defined(HWY_DISABLE_CACHE_CONTROL) && !HWY_COMPILER_MSVC
32 #include <emmintrin.h>
38 #pragma push_macro("LoadFence")
39 #pragma push_macro("StoreFence")
46 #define HWY_STREAM_MULTIPLE 16
49 #if HWY_ARCH_X86 && !defined(HWY_DISABLE_CACHE_CONTROL) && !HWY_COMPILER_MSVC
50 #define HWY_ATTR_CACHE __attribute__((target("sse2")))
52 #define HWY_ATTR_CACHE
60 #if HWY_ARCH_X86 && !defined(HWY_DISABLE_CACHE_CONTROL)
70 #if HWY_ARCH_X86 && !defined(HWY_DISABLE_CACHE_CONTROL)
82 #if HWY_ARCH_X86 && !defined(HWY_DISABLE_CACHE_CONTROL)
83 _mm_prefetch(
reinterpret_cast<const char*
>(p), _MM_HINT_T0);
84 #elif HWY_COMPILER_GCC || HWY_COMPILER_CLANG
87 __builtin_prefetch(p, 0, 3);
95 #if HWY_ARCH_X86 && !defined(HWY_DISABLE_CACHE_CONTROL)
104 #if HWY_ARCH_X86 && !defined(HWY_DISABLE_CACHE_CONTROL)
112 #pragma pop_macro("StoreFence")
113 #pragma pop_macro("LoadFence")
#define HWY_INLINE
Definition: base.h:59
#define HWY_ATTR_CACHE
Definition: cache_control.h:52
Definition: aligned_allocator.h:23
HWY_INLINE HWY_ATTR_CACHE void FlushStream()
Definition: cache_control.h:69
HWY_INLINE HWY_ATTR_CACHE void Prefetch(const T *p)
Definition: cache_control.h:81
HWY_INLINE HWY_ATTR_CACHE void Pause()
Definition: cache_control.h:103
HWY_INLINE HWY_ATTR_CACHE void StoreFence()
Definition: cache_control.h:76
HWY_INLINE HWY_ATTR_CACHE void LoadFence()
Definition: cache_control.h:59
HWY_INLINE HWY_ATTR_CACHE void FlushCacheline(const void *p)
Definition: cache_control.h:94