summaryrefslogtreecommitdiffstats
path: root/Include/cpython
diff options
context:
space:
mode:
authorDonghee Na <donghee.na@python.org>2023-10-16 22:32:50 (GMT)
committerGitHub <noreply@github.com>2023-10-16 22:32:50 (GMT)
commit86559ddfecefdda265d39e5e5035f72986becd78 (patch)
treef6c5ce93297f9736a887fed9137498570be321f6 /Include/cpython
parent06f844eaa0a09b8524ade5734b4f2cc742a0a5c7 (diff)
downloadcpython-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.h6
-rw-r--r--Include/cpython/pyatomic_gcc.h8
-rw-r--r--Include/cpython/pyatomic_msc.h26
-rw-r--r--Include/cpython/pyatomic_std.h17
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 ------------------------------------------------------