1*06f32e7eSjoerg /*===----------------------- clzerointrin.h - CLZERO ----------------------===
2*06f32e7eSjoerg  *
3*06f32e7eSjoerg  * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*06f32e7eSjoerg  * See https://llvm.org/LICENSE.txt for license information.
5*06f32e7eSjoerg  * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*06f32e7eSjoerg  *
7*06f32e7eSjoerg  *===-----------------------------------------------------------------------===
8*06f32e7eSjoerg  */
9*06f32e7eSjoerg #if !defined __X86INTRIN_H && !defined __IMMINTRIN_H
10*06f32e7eSjoerg #error "Never use <clzerointrin.h> directly; include <x86intrin.h> instead."
11*06f32e7eSjoerg #endif
12*06f32e7eSjoerg 
13*06f32e7eSjoerg #ifndef __CLZEROINTRIN_H
14*06f32e7eSjoerg #define __CLZEROINTRIN_H
15*06f32e7eSjoerg 
16*06f32e7eSjoerg /* Define the default attributes for the functions in this file. */
17*06f32e7eSjoerg #define __DEFAULT_FN_ATTRS \
18*06f32e7eSjoerg   __attribute__((__always_inline__, __nodebug__,  __target__("clzero")))
19*06f32e7eSjoerg 
20*06f32e7eSjoerg /// Loads the cache line address and zero's out the cacheline
21*06f32e7eSjoerg ///
22*06f32e7eSjoerg /// \headerfile <clzerointrin.h>
23*06f32e7eSjoerg ///
24*06f32e7eSjoerg /// This intrinsic corresponds to the <c> CLZERO </c> instruction.
25*06f32e7eSjoerg ///
26*06f32e7eSjoerg /// \param __line
27*06f32e7eSjoerg ///    A pointer to a cacheline which needs to be zeroed out.
28*06f32e7eSjoerg static __inline__ void __DEFAULT_FN_ATTRS
_mm_clzero(void * __line)29*06f32e7eSjoerg _mm_clzero (void * __line)
30*06f32e7eSjoerg {
31*06f32e7eSjoerg   __builtin_ia32_clzero ((void *)__line);
32*06f32e7eSjoerg }
33*06f32e7eSjoerg 
34*06f32e7eSjoerg #undef __DEFAULT_FN_ATTRS
35*06f32e7eSjoerg 
36*06f32e7eSjoerg #endif /* __CLZEROINTRIN_H */
37