150
|
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
|