xref: /dpdk/lib/eal/riscv/include/rte_pause.h (revision 719834a6849e1daf4a70ff7742bbcc3ae7e25607)
1f22e705eSMichal Mazurek /* SPDX-License-Identifier: BSD-3-Clause
2f22e705eSMichal Mazurek  * Copyright(c) 2022 StarFive
3f22e705eSMichal Mazurek  * Copyright(c) 2022 SiFive
4f22e705eSMichal Mazurek  * Copyright(c) 2022 Semihalf
5f22e705eSMichal Mazurek  */
6f22e705eSMichal Mazurek 
7f22e705eSMichal Mazurek #ifndef RTE_PAUSE_RISCV_H
8f22e705eSMichal Mazurek #define RTE_PAUSE_RISCV_H
9f22e705eSMichal Mazurek 
10f22e705eSMichal Mazurek #include "rte_atomic.h"
11f22e705eSMichal Mazurek 
12f22e705eSMichal Mazurek #include "generic/rte_pause.h"
13f22e705eSMichal Mazurek 
14*719834a6SMattias Rönnblom #ifdef __cplusplus
15*719834a6SMattias Rönnblom extern "C" {
16*719834a6SMattias Rönnblom #endif
17*719834a6SMattias Rönnblom 
18f22e705eSMichal Mazurek static inline void rte_pause(void)
19f22e705eSMichal Mazurek {
20f22e705eSMichal Mazurek 	/* Insert pause hint directly to be compatible with old compilers.
21f22e705eSMichal Mazurek 	 * This will work even on platforms without Zihintpause extension
22f22e705eSMichal Mazurek 	 * because this is a FENCE hint instruction which evaluates to NOP.
23f22e705eSMichal Mazurek 	 */
24f22e705eSMichal Mazurek 	asm volatile(".int 0x0100000F" : : : "memory");
25f22e705eSMichal Mazurek }
26f22e705eSMichal Mazurek 
27f22e705eSMichal Mazurek #ifdef __cplusplus
28f22e705eSMichal Mazurek }
29f22e705eSMichal Mazurek #endif
30f22e705eSMichal Mazurek 
31f22e705eSMichal Mazurek #endif /* RTE_PAUSE_RISCV_H */
32