blob: 4290e9d7355b9fa401d7508233dd0bbf0674a8a0 [file] [log] [blame]
Logan Chien55afb0a2018-10-15 10:42:14 +08001/*===---- cetintrin.h - CET intrinsic --------------------------------------===
2 *
Logan Chiendf4f7662019-09-04 16:45:23 -07003 * 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
Logan Chien55afb0a2018-10-15 10:42:14 +08006 *
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 */