zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

xsaveintrin.h (1678B) - Raw


      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