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