xref: /dpdk/lib/eal/x86/include/rte_rtm.h (revision d92745a99b17ab7599eb43e14e0d8f476ddf8d92)
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 Richardson unsigned 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 Richardson void 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 Richardson int 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