10b57cec5SDimitry Andric /*===---- cetintrin.h - CET intrinsic --------------------------------------=== 20b57cec5SDimitry Andric * 30b57cec5SDimitry Andric * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 40b57cec5SDimitry Andric * See https://llvm.org/LICENSE.txt for license information. 50b57cec5SDimitry Andric * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 60b57cec5SDimitry Andric * 70b57cec5SDimitry Andric *===-----------------------------------------------------------------------=== 80b57cec5SDimitry Andric */ 90b57cec5SDimitry Andric 100b57cec5SDimitry Andric #ifndef __IMMINTRIN_H 110b57cec5SDimitry Andric #error "Never use <cetintrin.h> directly; include <immintrin.h> instead." 120b57cec5SDimitry Andric #endif 130b57cec5SDimitry Andric 140b57cec5SDimitry Andric #ifndef __CETINTRIN_H 150b57cec5SDimitry Andric #define __CETINTRIN_H 160b57cec5SDimitry Andric 170b57cec5SDimitry Andric /* Define the default attributes for the functions in this file. */ 180b57cec5SDimitry Andric #define __DEFAULT_FN_ATTRS \ 190b57cec5SDimitry Andric __attribute__((__always_inline__, __nodebug__, __target__("shstk"))) 200b57cec5SDimitry Andric 210b57cec5SDimitry Andric static __inline__ void __DEFAULT_FN_ATTRS _incsspd(int __a) { 220b57cec5SDimitry Andric __builtin_ia32_incsspd(__a); 230b57cec5SDimitry Andric } 240b57cec5SDimitry Andric 250b57cec5SDimitry Andric #ifdef __x86_64__ 260b57cec5SDimitry Andric static __inline__ void __DEFAULT_FN_ATTRS _incsspq(unsigned long long __a) { 270b57cec5SDimitry Andric __builtin_ia32_incsspq(__a); 280b57cec5SDimitry Andric } 290b57cec5SDimitry Andric #endif /* __x86_64__ */ 300b57cec5SDimitry Andric 310b57cec5SDimitry Andric #ifdef __x86_64__ 320b57cec5SDimitry Andric static __inline__ void __DEFAULT_FN_ATTRS _inc_ssp(unsigned int __a) { 330b57cec5SDimitry Andric __builtin_ia32_incsspq(__a); 340b57cec5SDimitry Andric } 350b57cec5SDimitry Andric #else /* __x86_64__ */ 360b57cec5SDimitry Andric static __inline__ void __DEFAULT_FN_ATTRS _inc_ssp(unsigned int __a) { 370b57cec5SDimitry Andric __builtin_ia32_incsspd((int)__a); 380b57cec5SDimitry Andric } 390b57cec5SDimitry Andric #endif /* __x86_64__ */ 400b57cec5SDimitry Andric 410b57cec5SDimitry Andric static __inline__ unsigned int __DEFAULT_FN_ATTRS _rdsspd(unsigned int __a) { 420b57cec5SDimitry Andric return __builtin_ia32_rdsspd(__a); 430b57cec5SDimitry Andric } 440b57cec5SDimitry Andric 45*04eeddc0SDimitry Andric static __inline__ unsigned int __DEFAULT_FN_ATTRS _rdsspd_i32() { 46*04eeddc0SDimitry Andric unsigned int t; 47*04eeddc0SDimitry Andric return __builtin_ia32_rdsspd(t); 48*04eeddc0SDimitry Andric } 49*04eeddc0SDimitry Andric 500b57cec5SDimitry Andric #ifdef __x86_64__ 510b57cec5SDimitry Andric static __inline__ unsigned long long __DEFAULT_FN_ATTRS _rdsspq(unsigned long long __a) { 520b57cec5SDimitry Andric return __builtin_ia32_rdsspq(__a); 530b57cec5SDimitry Andric } 54*04eeddc0SDimitry Andric 55*04eeddc0SDimitry Andric static __inline__ unsigned long long __DEFAULT_FN_ATTRS _rdsspq_i64() { 56*04eeddc0SDimitry Andric unsigned long long t; 57*04eeddc0SDimitry Andric return __builtin_ia32_rdsspq(t); 58*04eeddc0SDimitry Andric } 590b57cec5SDimitry Andric #endif /* __x86_64__ */ 600b57cec5SDimitry Andric 610b57cec5SDimitry Andric #ifdef __x86_64__ 620b57cec5SDimitry Andric static __inline__ unsigned long long __DEFAULT_FN_ATTRS _get_ssp(void) { 630b57cec5SDimitry Andric return __builtin_ia32_rdsspq(0); 640b57cec5SDimitry Andric } 650b57cec5SDimitry Andric #else /* __x86_64__ */ 660b57cec5SDimitry Andric static __inline__ unsigned int __DEFAULT_FN_ATTRS _get_ssp(void) { 670b57cec5SDimitry Andric return __builtin_ia32_rdsspd(0); 680b57cec5SDimitry Andric } 690b57cec5SDimitry Andric #endif /* __x86_64__ */ 700b57cec5SDimitry Andric 710b57cec5SDimitry Andric static __inline__ void __DEFAULT_FN_ATTRS _saveprevssp() { 720b57cec5SDimitry Andric __builtin_ia32_saveprevssp(); 730b57cec5SDimitry Andric } 740b57cec5SDimitry Andric 750b57cec5SDimitry Andric static __inline__ void __DEFAULT_FN_ATTRS _rstorssp(void * __p) { 760b57cec5SDimitry Andric __builtin_ia32_rstorssp(__p); 770b57cec5SDimitry Andric } 780b57cec5SDimitry Andric 790b57cec5SDimitry Andric static __inline__ void __DEFAULT_FN_ATTRS _wrssd(unsigned int __a, void * __p) { 800b57cec5SDimitry Andric __builtin_ia32_wrssd(__a, __p); 810b57cec5SDimitry Andric } 820b57cec5SDimitry Andric 830b57cec5SDimitry Andric #ifdef __x86_64__ 840b57cec5SDimitry Andric static __inline__ void __DEFAULT_FN_ATTRS _wrssq(unsigned long long __a, void * __p) { 850b57cec5SDimitry Andric __builtin_ia32_wrssq(__a, __p); 860b57cec5SDimitry Andric } 870b57cec5SDimitry Andric #endif /* __x86_64__ */ 880b57cec5SDimitry Andric 890b57cec5SDimitry Andric static __inline__ void __DEFAULT_FN_ATTRS _wrussd(unsigned int __a, void * __p) { 900b57cec5SDimitry Andric __builtin_ia32_wrussd(__a, __p); 910b57cec5SDimitry Andric } 920b57cec5SDimitry Andric 930b57cec5SDimitry Andric #ifdef __x86_64__ 940b57cec5SDimitry Andric static __inline__ void __DEFAULT_FN_ATTRS _wrussq(unsigned long long __a, void * __p) { 950b57cec5SDimitry Andric __builtin_ia32_wrussq(__a, __p); 960b57cec5SDimitry Andric } 970b57cec5SDimitry Andric #endif /* __x86_64__ */ 980b57cec5SDimitry Andric 990b57cec5SDimitry Andric static __inline__ void __DEFAULT_FN_ATTRS _setssbsy() { 1000b57cec5SDimitry Andric __builtin_ia32_setssbsy(); 1010b57cec5SDimitry Andric } 1020b57cec5SDimitry Andric 1030b57cec5SDimitry Andric static __inline__ void __DEFAULT_FN_ATTRS _clrssbsy(void * __p) { 1040b57cec5SDimitry Andric __builtin_ia32_clrssbsy(__p); 1050b57cec5SDimitry Andric } 1060b57cec5SDimitry Andric 1070b57cec5SDimitry Andric #undef __DEFAULT_FN_ATTRS 1080b57cec5SDimitry Andric 1090b57cec5SDimitry Andric #endif /* __CETINTRIN_H */ 110