| 
									
										
										
										
											2024-02-14 12:15:05 -08:00
										 |  |  | // 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
 | 
					
						
							| 
									
										
										
										
											2024-04-08 07:58:38 -07:00
										 |  |  | #define FT_ATOMIC_LOAD_PTR(value) _Py_atomic_load_ptr(&value)
 | 
					
						
							| 
									
										
										
										
											2024-02-15 00:22:47 -08:00
										 |  |  | #define FT_ATOMIC_LOAD_SSIZE(value) _Py_atomic_load_ssize(&value)
 | 
					
						
							| 
									
										
										
										
											2024-02-14 12:15:05 -08:00
										 |  |  | #define FT_ATOMIC_LOAD_SSIZE_RELAXED(value) \
 | 
					
						
							|  |  |  |     _Py_atomic_load_ssize_relaxed(&value) | 
					
						
							| 
									
										
										
										
											2024-04-08 07:58:38 -07:00
										 |  |  | #define FT_ATOMIC_STORE_PTR(value, new_value) \
 | 
					
						
							|  |  |  |     _Py_atomic_store_ptr(&value, new_value) | 
					
						
							| 
									
										
										
										
											2024-04-19 14:47:42 -07:00
										 |  |  | #define FT_ATOMIC_LOAD_PTR_ACQUIRE(value) \
 | 
					
						
							|  |  |  |     _Py_atomic_load_ptr_acquire(&value) | 
					
						
							|  |  |  | #define FT_ATOMIC_LOAD_UINTPTR_ACQUIRE(value) \
 | 
					
						
							|  |  |  |     _Py_atomic_load_uintptr_acquire(&value) | 
					
						
							| 
									
										
										
										
											2024-02-21 10:38:09 +09:00
										 |  |  | #define FT_ATOMIC_STORE_PTR_RELAXED(value, new_value) \
 | 
					
						
							|  |  |  |     _Py_atomic_store_ptr_relaxed(&value, new_value) | 
					
						
							|  |  |  | #define FT_ATOMIC_STORE_PTR_RELEASE(value, new_value) \
 | 
					
						
							|  |  |  |     _Py_atomic_store_ptr_release(&value, new_value) | 
					
						
							| 
									
										
										
										
											2024-04-19 14:47:42 -07:00
										 |  |  | #define FT_ATOMIC_STORE_UINTPTR_RELEASE(value, new_value) \
 | 
					
						
							|  |  |  |     _Py_atomic_store_uintptr_release(&value, new_value) | 
					
						
							| 
									
										
										
										
											2024-02-14 12:15:05 -08:00
										 |  |  | #define FT_ATOMIC_STORE_SSIZE_RELAXED(value, new_value) \
 | 
					
						
							|  |  |  |     _Py_atomic_store_ssize_relaxed(&value, new_value) | 
					
						
							| 
									
										
										
										
											2024-04-19 14:47:42 -07:00
										 |  |  | #define FT_ATOMIC_STORE_UINT8_RELAXED(value, new_value) \
 | 
					
						
							|  |  |  |     _Py_atomic_store_uint8_relaxed(&value, new_value) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-02-14 12:15:05 -08:00
										 |  |  | #else
 | 
					
						
							| 
									
										
										
										
											2024-04-08 07:58:38 -07:00
										 |  |  | #define FT_ATOMIC_LOAD_PTR(value) value
 | 
					
						
							| 
									
										
										
										
											2024-02-15 00:22:47 -08:00
										 |  |  | #define FT_ATOMIC_LOAD_SSIZE(value) value
 | 
					
						
							| 
									
										
										
										
											2024-02-14 12:15:05 -08:00
										 |  |  | #define FT_ATOMIC_LOAD_SSIZE_RELAXED(value) value
 | 
					
						
							| 
									
										
										
										
											2024-04-08 07:58:38 -07:00
										 |  |  | #define FT_ATOMIC_STORE_PTR(value, new_value) value = new_value
 | 
					
						
							| 
									
										
										
										
											2024-04-19 14:47:42 -07:00
										 |  |  | #define FT_ATOMIC_LOAD_PTR_ACQUIRE(value) value
 | 
					
						
							|  |  |  | #define FT_ATOMIC_LOAD_UINTPTR_ACQUIRE(value) value
 | 
					
						
							| 
									
										
										
										
											2024-02-21 10:38:09 +09:00
										 |  |  | #define FT_ATOMIC_STORE_PTR_RELAXED(value, new_value) value = new_value
 | 
					
						
							|  |  |  | #define FT_ATOMIC_STORE_PTR_RELEASE(value, new_value) value = new_value
 | 
					
						
							| 
									
										
										
										
											2024-04-19 14:47:42 -07:00
										 |  |  | #define FT_ATOMIC_STORE_UINTPTR_RELEASE(value, new_value) value = new_value
 | 
					
						
							| 
									
										
										
										
											2024-02-14 12:15:05 -08:00
										 |  |  | #define FT_ATOMIC_STORE_SSIZE_RELAXED(value, new_value) value = new_value
 | 
					
						
							| 
									
										
										
										
											2024-04-19 14:47:42 -07:00
										 |  |  | #define FT_ATOMIC_STORE_UINT8_RELAXED(value, new_value) value = new_value
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-02-14 12:15:05 -08:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifdef __cplusplus
 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #endif /* !Py_ATOMIC_FT_WRAPPERS_H */
 |