1 // Copyright 2021 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef QUICHE_COMMON_PLATFORM_DEFAULT_QUICHE_PLATFORM_IMPL_QUICHE_PREFETCH_IMPL_H_
6 #define QUICHE_COMMON_PLATFORM_DEFAULT_QUICHE_PLATFORM_IMPL_QUICHE_PREFETCH_IMPL_H_
7 
8 #if defined(_MSC_VER)
9 #include <intrin.h>
10 #endif
11 
12 namespace quiche {
13 
QuichePrefetchT0Impl(const void * addr)14 inline void QuichePrefetchT0Impl(const void* addr) {
15 #if !defined(DISABLE_BUILTIN_PREFETCH)
16 #if defined(__GNUC__) || (defined(_M_ARM64) && defined(__clang__))
17   __builtin_prefetch(addr, 0, 3);
18 #elif defined(_MSC_VER)
19   _mm_prefetch(reinterpret_cast<const char*>(addr), _MM_HINT_T0);
20 #else
21   (void*)addr;
22 #endif
23 #endif  // !defined(DISABLE_BUILTIN_PREFETCH)
24 }
25 
26 }  // namespace quiche
27 
28 #endif  // QUICHE_COMMON_PLATFORM_DEFAULT_QUICHE_PLATFORM_IMPL_QUICHE_PREFETCH_IMPL_H_
29