1*bed243d3SAndroid Build Coastguard Worker /*===---- clflushoptintrin.h - CLFLUSHOPT intrinsic ------------------------=== 2*bed243d3SAndroid Build Coastguard Worker * 3*bed243d3SAndroid Build Coastguard Worker * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*bed243d3SAndroid Build Coastguard Worker * See https://llvm.org/LICENSE.txt for license information. 5*bed243d3SAndroid Build Coastguard Worker * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*bed243d3SAndroid Build Coastguard Worker * 7*bed243d3SAndroid Build Coastguard Worker *===-----------------------------------------------------------------------=== 8*bed243d3SAndroid Build Coastguard Worker */ 9*bed243d3SAndroid Build Coastguard Worker 10*bed243d3SAndroid Build Coastguard Worker #ifndef __IMMINTRIN_H 11*bed243d3SAndroid Build Coastguard Worker #error "Never use <clflushoptintrin.h> directly; include <immintrin.h> instead." 12*bed243d3SAndroid Build Coastguard Worker #endif 13*bed243d3SAndroid Build Coastguard Worker 14*bed243d3SAndroid Build Coastguard Worker #ifndef __CLFLUSHOPTINTRIN_H 15*bed243d3SAndroid Build Coastguard Worker #define __CLFLUSHOPTINTRIN_H 16*bed243d3SAndroid Build Coastguard Worker 17*bed243d3SAndroid Build Coastguard Worker /* Define the default attributes for the functions in this file. */ 18*bed243d3SAndroid Build Coastguard Worker #define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("clflushopt"))) 19*bed243d3SAndroid Build Coastguard Worker 20*bed243d3SAndroid Build Coastguard Worker /// Invalidates all levels of the cache hierarchy and flushes modified data to 21*bed243d3SAndroid Build Coastguard Worker /// memory for the cache line specified by the address \a __m. 22*bed243d3SAndroid Build Coastguard Worker /// 23*bed243d3SAndroid Build Coastguard Worker /// \headerfile <immintrin.h> 24*bed243d3SAndroid Build Coastguard Worker /// 25*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the \c CLFLUSHOPT instruction. 26*bed243d3SAndroid Build Coastguard Worker /// 27*bed243d3SAndroid Build Coastguard Worker /// \param __m 28*bed243d3SAndroid Build Coastguard Worker /// An address within the cache line to flush and invalidate. 29*bed243d3SAndroid Build Coastguard Worker static __inline__ void __DEFAULT_FN_ATTRS _mm_clflushopt(void const * __m)30*bed243d3SAndroid Build Coastguard Worker_mm_clflushopt(void const * __m) { 31*bed243d3SAndroid Build Coastguard Worker __builtin_ia32_clflushopt(__m); 32*bed243d3SAndroid Build Coastguard Worker } 33*bed243d3SAndroid Build Coastguard Worker 34*bed243d3SAndroid Build Coastguard Worker #undef __DEFAULT_FN_ATTRS 35*bed243d3SAndroid Build Coastguard Worker 36*bed243d3SAndroid Build Coastguard Worker #endif 37