199a2dd95SBruce Richardson /* SPDX-License-Identifier: BSD-3-Clause 299a2dd95SBruce Richardson * Copyright(c) 2012,2013 Intel Corporation 399a2dd95SBruce Richardson */ 499a2dd95SBruce Richardson 599a2dd95SBruce Richardson #ifndef _RTE_RTM_H_ 699a2dd95SBruce Richardson #define _RTE_RTM_H_ 1 799a2dd95SBruce Richardson 8*d92745a9STyler Retzlaff #include <immintrin.h> 999a2dd95SBruce Richardson 1099a2dd95SBruce Richardson /* Official RTM intrinsics interface matching gcc/icc, but works 1199a2dd95SBruce Richardson on older gcc compatible compilers and binutils. */ 1299a2dd95SBruce Richardson 1399a2dd95SBruce Richardson #include <rte_common.h> 1499a2dd95SBruce Richardson 1599a2dd95SBruce Richardson #ifdef __cplusplus 1699a2dd95SBruce Richardson extern "C" { 1799a2dd95SBruce Richardson #endif 1899a2dd95SBruce Richardson 1999a2dd95SBruce Richardson 2099a2dd95SBruce Richardson #define RTE_XBEGIN_STARTED (~0u) 2199a2dd95SBruce Richardson #define RTE_XABORT_EXPLICIT (1 << 0) 2299a2dd95SBruce Richardson #define RTE_XABORT_RETRY (1 << 1) 2399a2dd95SBruce Richardson #define RTE_XABORT_CONFLICT (1 << 2) 2499a2dd95SBruce Richardson #define RTE_XABORT_CAPACITY (1 << 3) 2599a2dd95SBruce Richardson #define RTE_XABORT_DEBUG (1 << 4) 2699a2dd95SBruce Richardson #define RTE_XABORT_NESTED (1 << 5) 2799a2dd95SBruce Richardson #define RTE_XABORT_CODE(x) (((x) >> 24) & 0xff) 2899a2dd95SBruce Richardson 2999a2dd95SBruce Richardson static __rte_always_inline rte_xbegin(void)3099a2dd95SBruce Richardsonunsigned int rte_xbegin(void) 3199a2dd95SBruce Richardson { 32*d92745a9STyler Retzlaff return _xbegin(); 3399a2dd95SBruce Richardson } 3499a2dd95SBruce Richardson 3599a2dd95SBruce Richardson static __rte_always_inline rte_xend(void)3699a2dd95SBruce Richardsonvoid rte_xend(void) 3799a2dd95SBruce Richardson { 38*d92745a9STyler Retzlaff _xend(); 3999a2dd95SBruce Richardson } 4099a2dd95SBruce Richardson 4199a2dd95SBruce Richardson /* not an inline function to workaround a clang bug with -O0 */ 42*d92745a9STyler Retzlaff #define rte_xabort(status) _xabort(status) 4399a2dd95SBruce Richardson 4499a2dd95SBruce Richardson static __rte_always_inline rte_xtest(void)4599a2dd95SBruce Richardsonint rte_xtest(void) 4699a2dd95SBruce Richardson { 47*d92745a9STyler Retzlaff return _xtest(); 4899a2dd95SBruce Richardson } 4999a2dd95SBruce Richardson 5099a2dd95SBruce Richardson #ifdef __cplusplus 5199a2dd95SBruce Richardson } 5299a2dd95SBruce Richardson #endif 5399a2dd95SBruce Richardson 5499a2dd95SBruce Richardson #endif /* _RTE_RTM_H_ */ 55