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 24static __inline__ void __DEFAULT_FN_ATTRS 25_xsave(void *__p, unsigned long long __m) { 26 __builtin_ia32_xsave(__p, __m); 27} 28 29static __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 39extern "C" { 40#endif 41unsigned __int64 __cdecl _xgetbv(unsigned int); 42void __cdecl _xsetbv(unsigned int, unsigned __int64); 43#ifdef __cplusplus 44} 45#endif 46#endif /* _MSC_VER */ 47 48#ifdef __x86_64__ 49static __inline__ void __DEFAULT_FN_ATTRS 50_xsave64(void *__p, unsigned long long __m) { 51 __builtin_ia32_xsave64(__p, __m); 52} 53 54static __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