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
21static __inline__ void __DEFAULT_FN_ATTRS _incsspd(int __a) {
22  __builtin_ia32_incsspd(__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((int)__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
45#ifdef __x86_64__
46static __inline__ unsigned long long __DEFAULT_FN_ATTRS _rdsspq(unsigned long long __a) {
47  return __builtin_ia32_rdsspq(__a);
48}
49#endif /* __x86_64__ */
50
51#ifdef __x86_64__
52static __inline__ unsigned long long __DEFAULT_FN_ATTRS _get_ssp(void) {
53  return __builtin_ia32_rdsspq(0);
54}
55#else /* __x86_64__ */
56static __inline__ unsigned int __DEFAULT_FN_ATTRS _get_ssp(void) {
57  return __builtin_ia32_rdsspd(0);
58}
59#endif /* __x86_64__ */
60
61static __inline__ void __DEFAULT_FN_ATTRS _saveprevssp() {
62  __builtin_ia32_saveprevssp();
63}
64
65static __inline__ void __DEFAULT_FN_ATTRS _rstorssp(void * __p) {
66  __builtin_ia32_rstorssp(__p);
67}
68
69static __inline__ void __DEFAULT_FN_ATTRS _wrssd(unsigned int __a, void * __p) {
70  __builtin_ia32_wrssd(__a, __p);
71}
72
73#ifdef __x86_64__
74static __inline__ void __DEFAULT_FN_ATTRS _wrssq(unsigned long long __a, void * __p) {
75  __builtin_ia32_wrssq(__a, __p);
76}
77#endif /* __x86_64__ */
78
79static __inline__ void __DEFAULT_FN_ATTRS _wrussd(unsigned int __a, void * __p) {
80  __builtin_ia32_wrussd(__a, __p);
81}
82
83#ifdef __x86_64__
84static __inline__ void __DEFAULT_FN_ATTRS _wrussq(unsigned long long __a, void * __p) {
85  __builtin_ia32_wrussq(__a, __p);
86}
87#endif /* __x86_64__ */
88
89static __inline__ void __DEFAULT_FN_ATTRS _setssbsy() {
90  __builtin_ia32_setssbsy();
91}
92
93static __inline__ void __DEFAULT_FN_ATTRS _clrssbsy(void * __p) {
94  __builtin_ia32_clrssbsy(__p);
95}
96
97#undef __DEFAULT_FN_ATTRS
98
99#endif /* __CETINTRIN_H */
100