diff options
Diffstat (limited to 'clang/lib/Headers/xsaveintrin.h')
-rw-r--r-- | clang/lib/Headers/xsaveintrin.h | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/clang/lib/Headers/xsaveintrin.h b/clang/lib/Headers/xsaveintrin.h index 16f3a78d3f5..788f9e000b5 100644 --- a/clang/lib/Headers/xsaveintrin.h +++ b/clang/lib/Headers/xsaveintrin.h @@ -28,6 +28,10 @@ #ifndef __XSAVEINTRIN_H #define __XSAVEINTRIN_H +#ifndef _MSC_VER +#define _XCR_XFEATURE_ENABLED_MASK 0 +#endif + /* Define the default attributes for the functions in this file. */ #define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("xsave"))) @@ -41,6 +45,20 @@ _xrstor(void *__p, unsigned long long __m) { __builtin_ia32_xrstor(__p, __m); } +#ifndef _MSC_VER +#define _xgetbv(A) __builtin_ia32_xgetbv((long long)(A)) +#define _xsetbv(A, B) __builtin_ia32_xsetbv((unsigned int)(A), (unsigned long long)(B)); +#else +#ifdef __cplusplus +extern "C" { +#endif +unsigned __int64 __cdecl _xgetbv(unsigned int); +void __cdecl _xsetbv(unsigned int, unsigned __int64); +#ifdef __cplusplus +} +#endif +#endif /* _MSC_VER */ + #ifdef __x86_64__ static __inline__ void __DEFAULT_FN_ATTRS _xsave64(void *__p, unsigned long long __m) { @@ -51,6 +69,7 @@ static __inline__ void __DEFAULT_FN_ATTRS _xrstor64(void *__p, unsigned long long __m) { __builtin_ia32_xrstor64(__p, __m); } + #endif #undef __DEFAULT_FN_ATTRS |