diff options
author | Donghee Na <donghee.na@python.org> | 2023-10-16 22:32:50 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-10-16 22:32:50 (GMT) |
commit | 86559ddfecefdda265d39e5e5035f72986becd78 (patch) | |
tree | f6c5ce93297f9736a887fed9137498570be321f6 /Include/cpython | |
parent | 06f844eaa0a09b8524ade5734b4f2cc742a0a5c7 (diff) | |
download | cpython-86559ddfecefdda265d39e5e5035f72986becd78.zip cpython-86559ddfecefdda265d39e5e5035f72986becd78.tar.gz cpython-86559ddfecefdda265d39e5e5035f72986becd78.tar.bz2 |
gh-109693: Update _gil_runtime_state.locked to use pyatomic.h (gh-110836)
Diffstat (limited to 'Include/cpython')
-rw-r--r-- | Include/cpython/pyatomic.h | 6 | ||||
-rw-r--r-- | Include/cpython/pyatomic_gcc.h | 8 | ||||
-rw-r--r-- | Include/cpython/pyatomic_msc.h | 26 | ||||
-rw-r--r-- | Include/cpython/pyatomic_std.h | 17 |
4 files changed, 57 insertions, 0 deletions
diff --git a/Include/cpython/pyatomic.h b/Include/cpython/pyatomic.h index 7a78305..5314a70 100644 --- a/Include/cpython/pyatomic.h +++ b/Include/cpython/pyatomic.h @@ -463,6 +463,12 @@ _Py_atomic_load_ptr_acquire(const void *obj); static inline void _Py_atomic_store_ptr_release(void *obj, void *value); +static inline void +_Py_atomic_store_int_release(int *obj, int value); + +static inline int +_Py_atomic_load_int_acquire(const int *obj); + // --- _Py_atomic_fence ------------------------------------------------------ diff --git a/Include/cpython/pyatomic_gcc.h b/Include/cpython/pyatomic_gcc.h index f1a38c7..70f2b7e 100644 --- a/Include/cpython/pyatomic_gcc.h +++ b/Include/cpython/pyatomic_gcc.h @@ -487,6 +487,14 @@ static inline void _Py_atomic_store_ptr_release(void *obj, void *value) { __atomic_store_n((void **)obj, value, __ATOMIC_RELEASE); } +static inline void +_Py_atomic_store_int_release(int *obj, int value) +{ __atomic_store_n(obj, value, __ATOMIC_RELEASE); } + +static inline int +_Py_atomic_load_int_acquire(const int *obj) +{ return __atomic_load_n(obj, __ATOMIC_ACQUIRE); } + // --- _Py_atomic_fence ------------------------------------------------------ diff --git a/Include/cpython/pyatomic_msc.h b/Include/cpython/pyatomic_msc.h index 287ed43..601a0cf 100644 --- a/Include/cpython/pyatomic_msc.h +++ b/Include/cpython/pyatomic_msc.h @@ -912,6 +912,32 @@ _Py_atomic_store_ptr_release(void *obj, void *value) #endif } +static inline void +_Py_atomic_store_int_release(int *obj, int value) +{ +#if defined(_M_X64) || defined(_M_IX86) + *(int volatile *)obj = value; +#elif defined(_M_ARM64) + _Py_atomic_ASSERT_ARG_TYPE(unsigned __int32); + __stlr32((unsigned __int32 volatile *)obj, (unsigned __int32)value); +#else +# error "no implementation of _Py_atomic_store_int_release" +#endif +} + +static inline int +_Py_atomic_load_int_acquire(const int *obj) +{ +#if defined(_M_X64) || defined(_M_IX86) + return *(int volatile *)obj; +#elif defined(_M_ARM64) + _Py_atomic_ASSERT_ARG_TYPE(unsigned __int32); + return (int)__ldar32((unsigned __int32 volatile *)obj); +#else +# error "no implementation of _Py_atomic_load_int_acquire" +#endif +} + // --- _Py_atomic_fence ------------------------------------------------------ diff --git a/Include/cpython/pyatomic_std.h b/Include/cpython/pyatomic_std.h index bf74a90..a05bfae 100644 --- a/Include/cpython/pyatomic_std.h +++ b/Include/cpython/pyatomic_std.h @@ -854,6 +854,23 @@ _Py_atomic_store_ptr_release(void *obj, void *value) memory_order_release); } +static inline void +_Py_atomic_store_int_release(int *obj, int value) +{ + _Py_USING_STD; + atomic_store_explicit((_Atomic(int)*)obj, value, + memory_order_release); +} + +static inline int +_Py_atomic_load_int_acquire(const int *obj) +{ + _Py_USING_STD; + return atomic_load_explicit((const _Atomic(int)*)obj, + memory_order_acquire); +} + + // --- _Py_atomic_fence ------------------------------------------------------ |