zig

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

cetintrin.h (3351B) - Raw


      1 /*===---- cetintrin.h - CET 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 <cetintrin.h> directly; include <immintrin.h> instead."
     12 #endif
     13 
     14 #ifndef __CETINTRIN_H
     15 #define __CETINTRIN_H
     16 
     17 /* Define the default attributes for the functions in this file. */
     18 #define __DEFAULT_FN_ATTRS                                                     \
     19   __attribute__((__always_inline__, __nodebug__, __target__("shstk")))
     20 
     21 static __inline__ void __DEFAULT_FN_ATTRS _incsspd(int __a) {
     22   __builtin_ia32_incsspd((unsigned int)__a);
     23 }
     24 
     25 #ifdef __x86_64__
     26 static __inline__ void __DEFAULT_FN_ATTRS _incsspq(unsigned long long __a) {
     27   __builtin_ia32_incsspq(__a);
     28 }
     29 #endif /* __x86_64__ */
     30 
     31 #ifdef __x86_64__
     32 static __inline__ void __DEFAULT_FN_ATTRS _inc_ssp(unsigned int __a) {
     33   __builtin_ia32_incsspq(__a);
     34 }
     35 #else /* __x86_64__ */
     36 static __inline__ void __DEFAULT_FN_ATTRS _inc_ssp(unsigned int __a) {
     37   __builtin_ia32_incsspd(__a);
     38 }
     39 #endif /* __x86_64__ */
     40 
     41 static __inline__ unsigned int __DEFAULT_FN_ATTRS _rdsspd(unsigned int __a) {
     42   return __builtin_ia32_rdsspd(__a);
     43 }
     44 
     45 static __inline__ unsigned int __DEFAULT_FN_ATTRS _rdsspd_i32(void) {
     46 #pragma clang diagnostic push
     47 #pragma clang diagnostic ignored "-Wuninitialized"
     48   unsigned int t;
     49   return __builtin_ia32_rdsspd(t);
     50 #pragma clang diagnostic pop
     51 }
     52 
     53 #ifdef __x86_64__
     54 static __inline__ unsigned long long __DEFAULT_FN_ATTRS _rdsspq(unsigned long long __a) {
     55   return __builtin_ia32_rdsspq(__a);
     56 }
     57 
     58 static __inline__ unsigned long long __DEFAULT_FN_ATTRS _rdsspq_i64(void) {
     59 #pragma clang diagnostic push
     60 #pragma clang diagnostic ignored "-Wuninitialized"
     61   unsigned long long t;
     62   return __builtin_ia32_rdsspq(t);
     63 #pragma clang diagnostic pop
     64 }
     65 #endif /* __x86_64__ */
     66 
     67 #ifdef __x86_64__
     68 static __inline__ unsigned long long __DEFAULT_FN_ATTRS _get_ssp(void) {
     69   return __builtin_ia32_rdsspq(0);
     70 }
     71 #else /* __x86_64__ */
     72 static __inline__ unsigned int __DEFAULT_FN_ATTRS _get_ssp(void) {
     73   return __builtin_ia32_rdsspd(0);
     74 }
     75 #endif /* __x86_64__ */
     76 
     77 static __inline__ void __DEFAULT_FN_ATTRS _saveprevssp(void) {
     78   __builtin_ia32_saveprevssp();
     79 }
     80 
     81 static __inline__ void __DEFAULT_FN_ATTRS _rstorssp(void * __p) {
     82   __builtin_ia32_rstorssp(__p);
     83 }
     84 
     85 static __inline__ void __DEFAULT_FN_ATTRS _wrssd(unsigned int __a, void * __p) {
     86   __builtin_ia32_wrssd(__a, __p);
     87 }
     88 
     89 #ifdef __x86_64__
     90 static __inline__ void __DEFAULT_FN_ATTRS _wrssq(unsigned long long __a, void * __p) {
     91   __builtin_ia32_wrssq(__a, __p);
     92 }
     93 #endif /* __x86_64__ */
     94 
     95 static __inline__ void __DEFAULT_FN_ATTRS _wrussd(unsigned int __a, void * __p) {
     96   __builtin_ia32_wrussd(__a, __p);
     97 }
     98 
     99 #ifdef __x86_64__
    100 static __inline__ void __DEFAULT_FN_ATTRS _wrussq(unsigned long long __a, void * __p) {
    101   __builtin_ia32_wrussq(__a, __p);
    102 }
    103 #endif /* __x86_64__ */
    104 
    105 static __inline__ void __DEFAULT_FN_ATTRS _setssbsy(void) {
    106   __builtin_ia32_setssbsy();
    107 }
    108 
    109 static __inline__ void __DEFAULT_FN_ATTRS _clrssbsy(void * __p) {
    110   __builtin_ia32_clrssbsy(__p);
    111 }
    112 
    113 #undef __DEFAULT_FN_ATTRS
    114 
    115 #endif /* __CETINTRIN_H */