1*bed243d3SAndroid Build Coastguard Worker /*===----------------------- clzerointrin.h - CLZERO ----------------------=== 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 #ifndef __X86INTRIN_H 10*bed243d3SAndroid Build Coastguard Worker #error "Never use <clzerointrin.h> directly; include <x86intrin.h> instead." 11*bed243d3SAndroid Build Coastguard Worker #endif 12*bed243d3SAndroid Build Coastguard Worker 13*bed243d3SAndroid Build Coastguard Worker #ifndef __CLZEROINTRIN_H 14*bed243d3SAndroid Build Coastguard Worker #define __CLZEROINTRIN_H 15*bed243d3SAndroid Build Coastguard Worker 16*bed243d3SAndroid Build Coastguard Worker /* Define the default attributes for the functions in this file. */ 17*bed243d3SAndroid Build Coastguard Worker #define __DEFAULT_FN_ATTRS \ 18*bed243d3SAndroid Build Coastguard Worker __attribute__((__always_inline__, __nodebug__, __target__("clzero"))) 19*bed243d3SAndroid Build Coastguard Worker 20*bed243d3SAndroid Build Coastguard Worker /// Zeroes out the cache line for the address \a __line. This uses a 21*bed243d3SAndroid Build Coastguard Worker /// non-temporal store. Calling \c _mm_sfence() afterward might be needed 22*bed243d3SAndroid Build Coastguard Worker /// to enforce ordering. 23*bed243d3SAndroid Build Coastguard Worker /// 24*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h> 25*bed243d3SAndroid Build Coastguard Worker /// 26*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the \c CLZERO instruction. 27*bed243d3SAndroid Build Coastguard Worker /// 28*bed243d3SAndroid Build Coastguard Worker /// \param __line 29*bed243d3SAndroid Build Coastguard Worker /// An address within the cache line to zero out. 30*bed243d3SAndroid Build Coastguard Worker static __inline__ void __DEFAULT_FN_ATTRS _mm_clzero(void * __line)31*bed243d3SAndroid Build Coastguard Worker_mm_clzero (void * __line) 32*bed243d3SAndroid Build Coastguard Worker { 33*bed243d3SAndroid Build Coastguard Worker __builtin_ia32_clzero ((void *)__line); 34*bed243d3SAndroid Build Coastguard Worker } 35*bed243d3SAndroid Build Coastguard Worker 36*bed243d3SAndroid Build Coastguard Worker #undef __DEFAULT_FN_ATTRS 37*bed243d3SAndroid Build Coastguard Worker 38*bed243d3SAndroid Build Coastguard Worker #endif /* __CLZEROINTRIN_H */ 39