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
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")))
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:62
#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