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