116 lines · c
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-exception6 *7 *===-----------------------------------------------------------------------===8 */9 10#ifndef __IMMINTRIN_H11#error "Never use <cetintrin.h> directly; include <immintrin.h> instead."12#endif13 14#ifndef __CETINTRIN_H15#define __CETINTRIN_H16 17/* Define the default attributes for the functions in this file. */18#define __DEFAULT_FN_ATTRS \19 __attribute__((__always_inline__, __nodebug__, __target__("shstk")))20 21static __inline__ void __DEFAULT_FN_ATTRS _incsspd(int __a) {22 __builtin_ia32_incsspd((unsigned int)__a);23}24 25#ifdef __x86_64__26static __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__32static __inline__ void __DEFAULT_FN_ATTRS _inc_ssp(unsigned int __a) {33 __builtin_ia32_incsspq(__a);34}35#else /* __x86_64__ */36static __inline__ void __DEFAULT_FN_ATTRS _inc_ssp(unsigned int __a) {37 __builtin_ia32_incsspd(__a);38}39#endif /* __x86_64__ */40 41static __inline__ unsigned int __DEFAULT_FN_ATTRS _rdsspd(unsigned int __a) {42 return __builtin_ia32_rdsspd(__a);43}44 45static __inline__ unsigned int __DEFAULT_FN_ATTRS _rdsspd_i32(void) {46#pragma clang diagnostic push47#pragma clang diagnostic ignored "-Wuninitialized"48 unsigned int t;49 return __builtin_ia32_rdsspd(t);50#pragma clang diagnostic pop51}52 53#ifdef __x86_64__54static __inline__ unsigned long long __DEFAULT_FN_ATTRS _rdsspq(unsigned long long __a) {55 return __builtin_ia32_rdsspq(__a);56}57 58static __inline__ unsigned long long __DEFAULT_FN_ATTRS _rdsspq_i64(void) {59#pragma clang diagnostic push60#pragma clang diagnostic ignored "-Wuninitialized"61 unsigned long long t;62 return __builtin_ia32_rdsspq(t);63#pragma clang diagnostic pop64}65#endif /* __x86_64__ */66 67#ifdef __x86_64__68static __inline__ unsigned long long __DEFAULT_FN_ATTRS _get_ssp(void) {69 return __builtin_ia32_rdsspq(0);70}71#else /* __x86_64__ */72static __inline__ unsigned int __DEFAULT_FN_ATTRS _get_ssp(void) {73 return __builtin_ia32_rdsspd(0);74}75#endif /* __x86_64__ */76 77static __inline__ void __DEFAULT_FN_ATTRS _saveprevssp(void) {78 __builtin_ia32_saveprevssp();79}80 81static __inline__ void __DEFAULT_FN_ATTRS _rstorssp(void * __p) {82 __builtin_ia32_rstorssp(__p);83}84 85static __inline__ void __DEFAULT_FN_ATTRS _wrssd(unsigned int __a, void * __p) {86 __builtin_ia32_wrssd(__a, __p);87}88 89#ifdef __x86_64__90static __inline__ void __DEFAULT_FN_ATTRS _wrssq(unsigned long long __a, void * __p) {91 __builtin_ia32_wrssq(__a, __p);92}93#endif /* __x86_64__ */94 95static __inline__ void __DEFAULT_FN_ATTRS _wrussd(unsigned int __a, void * __p) {96 __builtin_ia32_wrussd(__a, __p);97}98 99#ifdef __x86_64__100static __inline__ void __DEFAULT_FN_ATTRS _wrussq(unsigned long long __a, void * __p) {101 __builtin_ia32_wrussq(__a, __p);102}103#endif /* __x86_64__ */104 105static __inline__ void __DEFAULT_FN_ATTRS _setssbsy(void) {106 __builtin_ia32_setssbsy();107}108 109static __inline__ void __DEFAULT_FN_ATTRS _clrssbsy(void * __p) {110 __builtin_ia32_clrssbsy(__p);111}112 113#undef __DEFAULT_FN_ATTRS114 115#endif /* __CETINTRIN_H */116