Skip to content

Commit 0cf31cb

Browse files
committed
gh-92810: Add atomic FT wrappers for uint64_t
1 parent cd4d0ae commit 0cf31cb

File tree

2 files changed

+13
-20
lines changed

2 files changed

+13
-20
lines changed

Include/internal/pycore_pyatomic_ft_wrappers.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ extern "C" {
4545
_Py_atomic_load_uint16_relaxed(&value)
4646
#define FT_ATOMIC_LOAD_UINT32_RELAXED(value) \
4747
_Py_atomic_load_uint32_relaxed(&value)
48+
#define FT_ATOMIC_LOAD_UINT64_RELAXED(value) \
49+
_Py_atomic_load_uint64_relaxed(&value)
4850
#define FT_ATOMIC_LOAD_ULONG_RELAXED(value) \
4951
_Py_atomic_load_ulong_relaxed(&value)
5052
#define FT_ATOMIC_STORE_PTR_RELAXED(value, new_value) \
@@ -61,6 +63,8 @@ extern "C" {
6163
_Py_atomic_store_uint16_relaxed(&value, new_value)
6264
#define FT_ATOMIC_STORE_UINT32_RELAXED(value, new_value) \
6365
_Py_atomic_store_uint32_relaxed(&value, new_value)
66+
#define FT_ATOMIC_STORE_UINT64_RELAXED(value, new_value) \
67+
_Py_atomic_store_uint64_relaxed(&value, new_value)
6468
#define FT_ATOMIC_STORE_CHAR_RELAXED(value, new_value) \
6569
_Py_atomic_store_char_relaxed(&value, new_value)
6670
#define FT_ATOMIC_LOAD_CHAR_RELAXED(value) \
@@ -115,6 +119,8 @@ extern "C" {
115119
_Py_atomic_load_ullong_relaxed(&value)
116120
#define FT_ATOMIC_ADD_SSIZE(value, new_value) \
117121
(void)_Py_atomic_add_ssize(&value, new_value)
122+
#define FT_ATOMIC_ADD_UINT64(value, new_value) \
123+
(void)_Py_atomic_add_uint64(&value, new_value)
118124
#define FT_MUTEX_LOCK(lock) PyMutex_Lock(lock)
119125
#define FT_MUTEX_UNLOCK(lock) PyMutex_Unlock(lock)
120126

@@ -132,6 +138,7 @@ extern "C" {
132138
#define FT_ATOMIC_LOAD_UINT8_RELAXED(value) value
133139
#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
134140
#define FT_ATOMIC_LOAD_UINT32_RELAXED(value) value
141+
#define FT_ATOMIC_LOAD_UINT64_RELAXED(value) value
135142
#define FT_ATOMIC_LOAD_ULONG_RELAXED(value) value
136143
#define FT_ATOMIC_STORE_PTR_RELAXED(value, new_value) value = new_value
137144
#define FT_ATOMIC_STORE_PTR_RELEASE(value, new_value) value = new_value
@@ -140,6 +147,7 @@ extern "C" {
140147
#define FT_ATOMIC_STORE_UINT8_RELAXED(value, new_value) value = new_value
141148
#define FT_ATOMIC_STORE_UINT16_RELAXED(value, new_value) value = new_value
142149
#define FT_ATOMIC_STORE_UINT32_RELAXED(value, new_value) value = new_value
150+
#define FT_ATOMIC_STORE_UINT64_RELAXED(value, new_value) value = new_value
143151
#define FT_ATOMIC_LOAD_CHAR_RELAXED(value) value
144152
#define FT_ATOMIC_STORE_CHAR_RELAXED(value, new_value) value = new_value
145153
#define FT_ATOMIC_LOAD_UCHAR_RELAXED(value) value
@@ -167,6 +175,7 @@ extern "C" {
167175
#define FT_ATOMIC_LOAD_ULLONG_RELAXED(value) value
168176
#define FT_ATOMIC_STORE_ULLONG_RELAXED(value, new_value) value = new_value
169177
#define FT_ATOMIC_ADD_SSIZE(value, new_value) (void)(value += new_value)
178+
#define FT_ATOMIC_ADD_UINT64(value, new_value) (void)(value += new_value)
170179
#define FT_MUTEX_LOCK(lock) do {} while (0)
171180
#define FT_MUTEX_UNLOCK(lock) do {} while (0)
172181

Modules/_abc.c

Lines changed: 4 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -35,21 +35,13 @@ get_abc_state(PyObject *module)
3535
static inline uint64_t
3636
get_invalidation_counter(_abcmodule_state *state)
3737
{
38-
#ifdef Py_GIL_DISABLED
39-
return _Py_atomic_load_uint64(&state->abc_invalidation_counter);
40-
#else
41-
return state->abc_invalidation_counter;
42-
#endif
38+
return FT_ATOMIC_LOAD_UINT64_RELAXED(state->abc_invalidation_counter);
4339
}
4440

4541
static inline void
4642
increment_invalidation_counter(_abcmodule_state *state)
4743
{
48-
#ifdef Py_GIL_DISABLED
49-
_Py_atomic_add_uint64(&state->abc_invalidation_counter, 1);
50-
#else
51-
state->abc_invalidation_counter++;
52-
#endif
44+
FT_ATOMIC_ADD_UINT64(state->abc_invalidation_counter, 1);
5345
}
5446

5547
/* This object stores internal state for ABCs.
@@ -72,21 +64,13 @@ typedef struct {
7264
static inline uint64_t
7365
get_cache_version(_abc_data *impl)
7466
{
75-
#ifdef Py_GIL_DISABLED
76-
return _Py_atomic_load_uint64(&impl->_abc_negative_cache_version);
77-
#else
78-
return impl->_abc_negative_cache_version;
79-
#endif
67+
return FT_ATOMIC_LOAD_UINT64_RELAXED(impl->_abc_negative_cache_version);
8068
}
8169

8270
static inline void
8371
set_cache_version(_abc_data *impl, uint64_t version)
8472
{
85-
#ifdef Py_GIL_DISABLED
86-
_Py_atomic_store_uint64(&impl->_abc_negative_cache_version, version);
87-
#else
88-
impl->_abc_negative_cache_version = version;
89-
#endif
73+
FT_ATOMIC_STORE_UINT64_RELAXED(impl->_abc_negative_cache_version, version);
9074
}
9175

9276
static int

0 commit comments

Comments
 (0)