Commit | Line | Data |
---|---|---|
ebac4655 JA |
1 | #ifndef ARCH_H |
2 | #define ARCH_H | |
3 | ||
33ab6905 KC |
4 | #ifdef __cplusplus |
5 | #include <atomic> | |
6 | #else | |
3932f8be | 7 | #include <stdatomic.h> |
33ab6905 | 8 | #endif |
3932f8be | 9 | |
24575392 JA |
10 | #include "../lib/types.h" |
11 | ||
ebac4655 | 12 | enum { |
cca84643 | 13 | arch_x86_64 = 1, |
e12f4ede | 14 | arch_x86, |
ebac4655 JA |
15 | arch_ppc, |
16 | arch_ia64, | |
17 | arch_s390, | |
18 | arch_alpha, | |
697a606c JA |
19 | arch_sparc, |
20 | arch_sparc64, | |
a1ea676e | 21 | arch_arm, |
29721c9c | 22 | arch_sh, |
85a86319 | 23 | arch_hppa, |
5499f7ff | 24 | arch_mips, |
78c8831e | 25 | arch_aarch64, |
9496e398 | 26 | arch_loongarch64, |
21540653 | 27 | arch_riscv64, |
fa77073a JA |
28 | |
29 | arch_generic, | |
cca84643 JA |
30 | |
31 | arch_nr, | |
ebac4655 JA |
32 | }; |
33 | ||
5f739e0e NI |
34 | enum { |
35 | ARCH_FLAG_1 = 1 << 0, | |
36 | ARCH_FLAG_2 = 1 << 1, | |
37 | ARCH_FLAG_3 = 1 << 2, | |
38 | ARCH_FLAG_4 = 1 << 3, | |
39 | }; | |
40 | ||
4247d1a9 JA |
41 | extern unsigned long arch_flags; |
42 | ||
96170421 CE |
43 | #define ARCH_CPU_CLOCK_WRAPS |
44 | ||
33ab6905 KC |
45 | #ifdef __cplusplus |
46 | #define atomic_add(p, v) \ | |
47 | std::atomic_fetch_add(p, (v)) | |
48 | #define atomic_sub(p, v) \ | |
49 | std::atomic_fetch_sub(p, (v)) | |
50 | #define atomic_load_relaxed(p) \ | |
51 | std::atomic_load_explicit(p, \ | |
52 | std::memory_order_relaxed) | |
53 | #define atomic_load_acquire(p) \ | |
54 | std::atomic_load_explicit(p, \ | |
55 | std::memory_order_acquire) | |
56 | #define atomic_store_release(p, v) \ | |
57 | std::atomic_store_explicit(p, (v), \ | |
58 | std::memory_order_release) | |
59 | #else | |
d4e74fda DB |
60 | #define atomic_add(p, v) \ |
61 | atomic_fetch_add((_Atomic typeof(*(p)) *)(p), v) | |
62 | #define atomic_sub(p, v) \ | |
63 | atomic_fetch_sub((_Atomic typeof(*(p)) *)(p), v) | |
64 | #define atomic_load_relaxed(p) \ | |
65 | atomic_load_explicit((_Atomic typeof(*(p)) *)(p), \ | |
66 | memory_order_relaxed) | |
3932f8be BVA |
67 | #define atomic_load_acquire(p) \ |
68 | atomic_load_explicit((_Atomic typeof(*(p)) *)(p), \ | |
69 | memory_order_acquire) | |
70 | #define atomic_store_release(p, v) \ | |
71 | atomic_store_explicit((_Atomic typeof(*(p)) *)(p), (v), \ | |
72 | memory_order_release) | |
33ab6905 | 73 | #endif |
3932f8be | 74 | |
c473a9bd | 75 | /* IWYU pragma: begin_exports */ |
ebac4655 JA |
76 | #if defined(__i386__) |
77 | #include "arch-x86.h" | |
78 | #elif defined(__x86_64__) | |
79 | #include "arch-x86_64.h" | |
2afd826b | 80 | #elif defined(__powerpc__) || defined(__powerpc64__) || defined(__ppc__) |
ebac4655 JA |
81 | #include "arch-ppc.h" |
82 | #elif defined(__ia64__) | |
83 | #include "arch-ia64.h" | |
84 | #elif defined(__alpha__) | |
85 | #include "arch-alpha.h" | |
86 | #elif defined(__s390x__) || defined(__s390__) | |
87 | #include "arch-s390.h" | |
697a606c JA |
88 | #elif defined(__sparc__) |
89 | #include "arch-sparc.h" | |
90 | #elif defined(__sparc64__) | |
91 | #include "arch-sparc64.h" | |
a1ea676e KS |
92 | #elif defined(__arm__) |
93 | #include "arch-arm.h" | |
c28b912f JA |
94 | #elif defined(__mips__) || defined(__mips64__) |
95 | #include "arch-mips.h" | |
29721c9c NI |
96 | #elif defined(__sh__) |
97 | #include "arch-sh.h" | |
85a86319 JA |
98 | #elif defined(__hppa__) |
99 | #include "arch-hppa.h" | |
78c8831e DK |
100 | #elif defined(__aarch64__) |
101 | #include "arch-aarch64.h" | |
9496e398 JH |
102 | #elif defined(__loongarch64) |
103 | #include "arch-loongarch64.h" | |
21540653 MB |
104 | #elif defined(__riscv) && __riscv_xlen == 64 |
105 | #include "arch-riscv64.h" | |
ebac4655 | 106 | #else |
fa77073a JA |
107 | #warning "Unknown architecture, attempting to use generic model." |
108 | #include "arch-generic.h" | |
ebac4655 JA |
109 | #endif |
110 | ||
5ae4f422 VF |
111 | #if !defined(__x86_64__) && defined(CONFIG_SYNC_SYNC) |
112 | static inline void tsc_barrier(void) | |
113 | { | |
114 | __sync_synchronize(); | |
115 | } | |
116 | #endif | |
117 | ||
8f7e39dd | 118 | #include "../lib/ffz.h" |
c473a9bd | 119 | /* IWYU pragma: end_exports */ |
8f7e39dd | 120 | |
d3cc4ebf JA |
121 | #ifndef ARCH_HAVE_INIT |
122 | static inline int arch_init(char *envp[]) | |
123 | { | |
124 | return 0; | |
125 | } | |
126 | #endif | |
127 | ||
bfed648c JA |
128 | #ifdef __alpha__ |
129 | /* | |
130 | * alpha is the only exception, all other architectures | |
131 | * have common numbers for new system calls. | |
132 | */ | |
133 | # ifndef __NR_io_uring_setup | |
134 | # define __NR_io_uring_setup 535 | |
135 | # endif | |
136 | # ifndef __NR_io_uring_enter | |
137 | # define __NR_io_uring_enter 536 | |
138 | # endif | |
139 | # ifndef __NR_io_uring_register | |
140 | # define __NR_io_uring_register 537 | |
141 | # endif | |
142 | #else /* !__alpha__ */ | |
143 | # ifndef __NR_io_uring_setup | |
144 | # define __NR_io_uring_setup 425 | |
145 | # endif | |
146 | # ifndef __NR_io_uring_enter | |
147 | # define __NR_io_uring_enter 426 | |
148 | # endif | |
149 | # ifndef __NR_io_uring_register | |
150 | # define __NR_io_uring_register 427 | |
151 | # endif | |
152 | #endif | |
153 | ||
154 | #define ARCH_HAVE_IOURING | |
155 | ||
ebac4655 | 156 | #endif |