Nugget
third_party
EASTL
include
EASTL
internal
atomic
arch
arm
arch_arm_memory_barrier.h
1
// Copyright (c) Electronic Arts Inc. All rights reserved.
4
5
6
#ifndef EASTL_ATOMIC_INTERNAL_ARCH_ARM_MEMORY_BARRIER_H
7
#define EASTL_ATOMIC_INTERNAL_ARCH_ARM_MEMORY_BARRIER_H
8
9
#if defined(EA_PRAGMA_ONCE_SUPPORTED)
10
#pragma once
11
#endif
12
13
14
#if defined(EA_COMPILER_MSVC) && !defined(EA_COMPILER_CLANG_CL)
15
16
#if defined(EA_PROCESSOR_ARM32)
17
18
#define EASTL_ARM_DMB_ISH _ARM_BARRIER_ISH
19
20
#define EASTL_ARM_DMB_ISHST _ARM_BARRIER_ISHST
21
22
#define EASTL_ARM_DMB_ISHLD _ARM_BARRIER_ISH
23
24
#elif defined(EA_PROCESSOR_ARM64)
25
26
#define EASTL_ARM_DMB_ISH _ARM64_BARRIER_ISH
27
28
#define EASTL_ARM_DMB_ISHST _ARM64_BARRIER_ISHST
29
30
#define EASTL_ARM_DMB_ISHLD _ARM64_BARRIER_ISHLD
31
32
#endif
33
34
43
#define EASTL_ARCH_ATOMIC_ARM_EMIT_DMB(option) \
44
EASTL_ATOMIC_COMPILER_BARRIER(); \
45
__dmb(option); \
46
EASTL_ATOMIC_COMPILER_BARRIER()
47
48
49
#elif defined(EA_COMPILER_GNUC) || defined(__clang__)
50
51
#define EASTL_ARM_DMB_ISH ish
52
53
#define EASTL_ARM_DMB_ISHST ishst
54
55
#if defined(EA_PROCESSOR_ARM32)
56
57
#define EASTL_ARM_DMB_ISHLD ish
58
59
#elif defined(EA_PROCESSOR_ARM64)
60
61
#define EASTL_ARM_DMB_ISHLD ishld
62
63
#endif
64
65
66
#define EASTL_ARCH_ATOMIC_ARM_EMIT_DMB(option) \
67
__asm__ __volatile__ ("dmb "
EA_STRINGIFY(option) ::: "memory")
68
69
70
#endif
71
72
74
//
75
// void EASTL_ARCH_ATOMIC_CPU_MB()
76
//
77
#define EASTL_ARCH_ATOMIC_CPU_MB() \
78
EASTL_ARCH_ATOMIC_ARM_EMIT_DMB(EASTL_ARM_DMB_ISH)
79
80
82
//
83
// void EASTL_ARCH_ATOMIC_CPU_WMB()
84
//
85
#define EASTL_ARCH_ATOMIC_CPU_WMB() \
86
EASTL_ARCH_ATOMIC_ARM_EMIT_DMB(EASTL_ARM_DMB_ISHST)
87
88
90
//
91
// void EASTL_ARCH_ATOMIC_CPU_RMB()
92
//
93
#define EASTL_ARCH_ATOMIC_CPU_RMB() \
94
EASTL_ARCH_ATOMIC_ARM_EMIT_DMB(EASTL_ARM_DMB_ISHLD)
95
96
97
#endif
/* EASTL_ATOMIC_INTERNAL_ARCH_ARM_MEMORY_BARRIER_H */
Generated by
1.9.1