1 /*
2  * Copyright (c) 2023 Carlo Caione <ccaione@baylibre.com>
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 
7 #ifndef ZEPHYR_INCLUDE_SYS_BARRIER_BUILTIN_H_
8 #define ZEPHYR_INCLUDE_SYS_BARRIER_BUILTIN_H_
9 
10 #ifndef ZEPHYR_INCLUDE_SYS_BARRIER_H_
11 #error Please include <zephyr/sys/barrier.h>
12 #endif
13 
14 #include <zephyr/toolchain.h>
15 
16 #ifdef __cplusplus
17 extern "C" {
18 #endif
19 
z_barrier_dmem_fence_full(void)20 static ALWAYS_INLINE void z_barrier_dmem_fence_full(void)
21 {
22 #if defined(__GNUC__)
23 	/* GCC-ism */
24 	__atomic_thread_fence(__ATOMIC_SEQ_CST);
25 #else
26 	atomic_thread_fence(memory_order_seq_cst);
27 #endif
28 }
29 
z_barrier_dsync_fence_full(void)30 static ALWAYS_INLINE void z_barrier_dsync_fence_full(void)
31 {
32 #if defined(__GNUC__)
33 	/* GCC-ism */
34 	__atomic_thread_fence(__ATOMIC_SEQ_CST);
35 #else
36 	atomic_thread_fence(memory_order_seq_cst);
37 #endif
38 }
39 
z_barrier_isync_fence_full(void)40 static ALWAYS_INLINE void z_barrier_isync_fence_full(void)
41 {
42 	__asm__ volatile("" : : : "memory");
43 }
44 
45 #ifdef __cplusplus
46 }
47 #endif
48 
49 #endif /* ZEPHYR_INCLUDE_SYS_BARRIER_BUILTIN_H_ */
50