1 /*===---- xsaveintrin.h - XSAVE intrinsic ----------------------------------=== 2 * 3 * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 * See https://llvm.org/LICENSE.txt for license information. 5 * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 * 7 *===-----------------------------------------------------------------------=== 8 */ 9 10 #ifndef __IMMINTRIN_H 11 #error "Never use <xsaveintrin.h> directly; include <immintrin.h> instead." 12 #endif 13 14 #ifndef __XSAVEINTRIN_H 15 #define __XSAVEINTRIN_H 16 17 #ifdef _MSC_VER 18 #define _XCR_XFEATURE_ENABLED_MASK 0 19 #endif 20 21 /* Define the default attributes for the functions in this file. */ 22 #define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("xsave"))) 23 24 static __inline__ void __DEFAULT_FN_ATTRS 25 _xsave(void *__p, unsigned long long __m) { 26 __builtin_ia32_xsave(__p, __m); 27 } 28 29 static __inline__ void __DEFAULT_FN_ATTRS 30 _xrstor(void *__p, unsigned long long __m) { 31 __builtin_ia32_xrstor(__p, __m); 32 } 33 34 #ifndef _MSC_VER 35 #define _xgetbv(A) __builtin_ia32_xgetbv((long long)(A)) 36 #define _xsetbv(A, B) __builtin_ia32_xsetbv((unsigned int)(A), (unsigned long long)(B)) 37 #else 38 #ifdef __cplusplus 39 extern "C" { 40 #endif 41 unsigned __int64 __cdecl _xgetbv(unsigned int); 42 void __cdecl _xsetbv(unsigned int, unsigned __int64); 43 #ifdef __cplusplus 44 } 45 #endif 46 #endif /* _MSC_VER */ 47 48 #ifdef __x86_64__ 49 static __inline__ void __DEFAULT_FN_ATTRS 50 _xsave64(void *__p, unsigned long long __m) { 51 __builtin_ia32_xsave64(__p, __m); 52 } 53 54 static __inline__ void __DEFAULT_FN_ATTRS 55 _xrstor64(void *__p, unsigned long long __m) { 56 __builtin_ia32_xrstor64(__p, __m); 57 } 58 59 #endif 60 61 #undef __DEFAULT_FN_ATTRS 62 63 #endif 64