cpython/Include/internal/pycore_pyatomic_ft_wrappers.h

// This header file provides wrappers around the atomic operations found in
// `pyatomic.h` that are only atomic in free-threaded builds.
//
// These are intended to be used in places where atomics are required in
// free-threaded builds, but not in the default build, and we don't want to
// introduce the potential performance overhead of an atomic operation in the
// default build.
//
// All usages of these macros should be replaced with unconditionally atomic or
// non-atomic versions, and this file should be removed, once the dust settles
// on free threading.
#ifndef Py_ATOMIC_FT_WRAPPERS_H
#define Py_ATOMIC_FT_WRAPPERS_H
#ifdef __cplusplus
extern "C" {
#endif

#ifndef Py_BUILD_CORE
#error "this header requires Py_BUILD_CORE define"
#endif

#ifdef Py_GIL_DISABLED
#define FT_ATOMIC_LOAD_PTR
#define FT_ATOMIC_STORE_PTR
#define FT_ATOMIC_LOAD_SSIZE
#define FT_ATOMIC_LOAD_SSIZE_ACQUIRE
#define FT_ATOMIC_LOAD_SSIZE_RELAXED
#define FT_ATOMIC_STORE_PTR
#define FT_ATOMIC_LOAD_PTR_ACQUIRE
#define FT_ATOMIC_LOAD_UINTPTR_ACQUIRE
#define FT_ATOMIC_LOAD_PTR_RELAXED
#define FT_ATOMIC_LOAD_UINT8
#define FT_ATOMIC_STORE_UINT8
#define FT_ATOMIC_LOAD_UINT8_RELAXED
#define FT_ATOMIC_LOAD_UINT16_RELAXED
#define FT_ATOMIC_LOAD_UINT32_RELAXED
#define FT_ATOMIC_LOAD_ULONG_RELAXED
#define FT_ATOMIC_STORE_PTR_RELAXED
#define FT_ATOMIC_STORE_PTR_RELEASE
#define FT_ATOMIC_STORE_UINTPTR_RELEASE
#define FT_ATOMIC_STORE_SSIZE_RELAXED
#define FT_ATOMIC_STORE_UINT8_RELAXED
#define FT_ATOMIC_STORE_UINT16_RELAXED
#define FT_ATOMIC_STORE_UINT32_RELAXED

#else
#define FT_ATOMIC_LOAD_PTR(value)
#define FT_ATOMIC_STORE_PTR(value, new_value)
#define FT_ATOMIC_LOAD_SSIZE(value)
#define FT_ATOMIC_LOAD_SSIZE_ACQUIRE(value)
#define FT_ATOMIC_LOAD_SSIZE_RELAXED(value)
#define FT_ATOMIC_STORE_PTR(value, new_value)
#define FT_ATOMIC_LOAD_PTR_ACQUIRE(value)
#define FT_ATOMIC_LOAD_UINTPTR_ACQUIRE(value)
#define FT_ATOMIC_LOAD_PTR_RELAXED(value)
#define FT_ATOMIC_LOAD_UINT8(value)
#define FT_ATOMIC_STORE_UINT8(value, new_value)
#define FT_ATOMIC_LOAD_UINT8_RELAXED(value)
#define FT_ATOMIC_LOAD_UINT16_RELAXED(value)
#define FT_ATOMIC_LOAD_UINT32_RELAXED(value)
#define FT_ATOMIC_LOAD_ULONG_RELAXED(value)
#define FT_ATOMIC_STORE_PTR_RELAXED(value, new_value)
#define FT_ATOMIC_STORE_PTR_RELEASE(value, new_value)
#define FT_ATOMIC_STORE_UINTPTR_RELEASE(value, new_value)
#define FT_ATOMIC_STORE_SSIZE_RELAXED(value, new_value)
#define FT_ATOMIC_STORE_UINT8_RELAXED(value, new_value)
#define FT_ATOMIC_STORE_UINT16_RELAXED(value, new_value)
#define FT_ATOMIC_STORE_UINT32_RELAXED(value, new_value)

#endif

#ifdef __cplusplus
}
#endif
#endif /* !Py_ATOMIC_FT_WRAPPERS_H */