Team Ai
Datasetpublic

codekingpro/portable-devtools

sourceHugging Faceupdated 5mo agoView on Hugging Face
1likes15kdownloads
pyatomic_std.h1113 linesDownload Raw Back to cpython
1// This is the implementation of Python atomic operations using C++11 or C112// atomics. Note that the pyatomic_gcc.h implementation is preferred for GCC3// compatible compilers, even if they support C++11 atomics.4 5#ifndef Py_ATOMIC_STD_H6#  error "this header file must not be included directly"7#endif8 9#ifdef __cplusplus10extern "C++" {11#  include <atomic>12}13#  define _Py_USING_STD using namespace std14#  define _Atomic(tp) atomic<tp>15#else16#  define  _Py_USING_STD17#  include <stdatomic.h>18#endif19 20 21// --- _Py_atomic_add --------------------------------------------------------22 23static inline int24_Py_atomic_add_int(int *obj, int value)25{26    _Py_USING_STD;27    return atomic_fetch_add((_Atomic(int)*)obj, value);28}29 30static inline int8_t31_Py_atomic_add_int8(int8_t *obj, int8_t value)32{33    _Py_USING_STD;34    return atomic_fetch_add((_Atomic(int8_t)*)obj, value);35}36 37static inline int16_t38_Py_atomic_add_int16(int16_t *obj, int16_t value)39{40    _Py_USING_STD;41    return atomic_fetch_add((_Atomic(int16_t)*)obj, value);42}43 44static inline int32_t45_Py_atomic_add_int32(int32_t *obj, int32_t value)46{47    _Py_USING_STD;48    return atomic_fetch_add((_Atomic(int32_t)*)obj, value);49}50 51static inline int64_t52_Py_atomic_add_int64(int64_t *obj, int64_t value)53{54    _Py_USING_STD;55    return atomic_fetch_add((_Atomic(int64_t)*)obj, value);56}57 58static inline intptr_t59_Py_atomic_add_intptr(intptr_t *obj, intptr_t value)60{61    _Py_USING_STD;62    return atomic_fetch_add((_Atomic(intptr_t)*)obj, value);63}64 65static inline unsigned int66_Py_atomic_add_uint(unsigned int *obj, unsigned int value)67{68    _Py_USING_STD;69    return atomic_fetch_add((_Atomic(unsigned int)*)obj, value);70}71 72static inline uint8_t73_Py_atomic_add_uint8(uint8_t *obj, uint8_t value)74{75    _Py_USING_STD;76    return atomic_fetch_add((_Atomic(uint8_t)*)obj, value);77}78 79static inline uint16_t80_Py_atomic_add_uint16(uint16_t *obj, uint16_t value)81{82    _Py_USING_STD;83    return atomic_fetch_add((_Atomic(uint16_t)*)obj, value);84}85 86static inline uint32_t87_Py_atomic_add_uint32(uint32_t *obj, uint32_t value)88{89    _Py_USING_STD;90    return atomic_fetch_add((_Atomic(uint32_t)*)obj, value);91}92 93static inline uint64_t94_Py_atomic_add_uint64(uint64_t *obj, uint64_t value)95{96    _Py_USING_STD;97    return atomic_fetch_add((_Atomic(uint64_t)*)obj, value);98}99 100static inline uintptr_t101_Py_atomic_add_uintptr(uintptr_t *obj, uintptr_t value)102{103    _Py_USING_STD;104    return atomic_fetch_add((_Atomic(uintptr_t)*)obj, value);105}106 107static inline Py_ssize_t108_Py_atomic_add_ssize(Py_ssize_t *obj, Py_ssize_t value)109{110    _Py_USING_STD;111    return atomic_fetch_add((_Atomic(Py_ssize_t)*)obj, value);112}113 114 115// --- _Py_atomic_compare_exchange -------------------------------------------116 117static inline int118_Py_atomic_compare_exchange_int(int *obj, int *expected, int desired)119{120    _Py_USING_STD;121    return atomic_compare_exchange_strong((_Atomic(int)*)obj,122                                          expected, desired);123}124 125static inline int126_Py_atomic_compare_exchange_int8(int8_t *obj, int8_t *expected, int8_t desired)127{128    _Py_USING_STD;129    return atomic_compare_exchange_strong((_Atomic(int8_t)*)obj,130                                          expected, desired);131}132 133static inline int134_Py_atomic_compare_exchange_int16(int16_t *obj, int16_t *expected, int16_t desired)135{136    _Py_USING_STD;137    return atomic_compare_exchange_strong((_Atomic(int16_t)*)obj,138                                          expected, desired);139}140 141static inline int142_Py_atomic_compare_exchange_int32(int32_t *obj, int32_t *expected, int32_t desired)143{144    _Py_USING_STD;145    return atomic_compare_exchange_strong((_Atomic(int32_t)*)obj,146                                          expected, desired);147}148 149static inline int150_Py_atomic_compare_exchange_int64(int64_t *obj, int64_t *expected, int64_t desired)151{152    _Py_USING_STD;153    return atomic_compare_exchange_strong((_Atomic(int64_t)*)obj,154                                          expected, desired);155}156 157static inline int158_Py_atomic_compare_exchange_intptr(intptr_t *obj, intptr_t *expected, intptr_t desired)159{160    _Py_USING_STD;161    return atomic_compare_exchange_strong((_Atomic(intptr_t)*)obj,162                                          expected, desired);163}164 165static inline int166_Py_atomic_compare_exchange_uint(unsigned int *obj, unsigned int *expected, unsigned int desired)167{168    _Py_USING_STD;169    return atomic_compare_exchange_strong((_Atomic(unsigned int)*)obj,170                                          expected, desired);171}172 173static inline int174_Py_atomic_compare_exchange_uint8(uint8_t *obj, uint8_t *expected, uint8_t desired)175{176    _Py_USING_STD;177    return atomic_compare_exchange_strong((_Atomic(uint8_t)*)obj,178                                          expected, desired);179}180 181static inline int182_Py_atomic_compare_exchange_uint16(uint16_t *obj, uint16_t *expected, uint16_t desired)183{184    _Py_USING_STD;185    return atomic_compare_exchange_strong((_Atomic(uint16_t)*)obj,186                                          expected, desired);187}188 189static inline int190_Py_atomic_compare_exchange_uint32(uint32_t *obj, uint32_t *expected, uint32_t desired)191{192    _Py_USING_STD;193    return atomic_compare_exchange_strong((_Atomic(uint32_t)*)obj,194                                          expected, desired);195}196 197static inline int198_Py_atomic_compare_exchange_uint64(uint64_t *obj, uint64_t *expected, uint64_t desired)199{200    _Py_USING_STD;201    return atomic_compare_exchange_strong((_Atomic(uint64_t)*)obj,202                                          expected, desired);203}204 205static inline int206_Py_atomic_compare_exchange_uintptr(uintptr_t *obj, uintptr_t *expected, uintptr_t desired)207{208    _Py_USING_STD;209    return atomic_compare_exchange_strong((_Atomic(uintptr_t)*)obj,210                                          expected, desired);211}212 213static inline int214_Py_atomic_compare_exchange_ssize(Py_ssize_t *obj, Py_ssize_t *expected, Py_ssize_t desired)215{216    _Py_USING_STD;217    return atomic_compare_exchange_strong((_Atomic(Py_ssize_t)*)obj,218                                          expected, desired);219}220 221static inline int222_Py_atomic_compare_exchange_ptr(void *obj, void *expected, void *desired)223{224    _Py_USING_STD;225    return atomic_compare_exchange_strong((_Atomic(void *)*)obj,226                                          (void **)expected, desired);227}228 229 230// --- _Py_atomic_exchange ---------------------------------------------------231 232static inline int233_Py_atomic_exchange_int(int *obj, int value)234{235    _Py_USING_STD;236    return atomic_exchange((_Atomic(int)*)obj, value);237}238 239static inline int8_t240_Py_atomic_exchange_int8(int8_t *obj, int8_t value)241{242    _Py_USING_STD;243    return atomic_exchange((_Atomic(int8_t)*)obj, value);244}245 246static inline int16_t247_Py_atomic_exchange_int16(int16_t *obj, int16_t value)248{249    _Py_USING_STD;250    return atomic_exchange((_Atomic(int16_t)*)obj, value);251}252 253static inline int32_t254_Py_atomic_exchange_int32(int32_t *obj, int32_t value)255{256    _Py_USING_STD;257    return atomic_exchange((_Atomic(int32_t)*)obj, value);258}259 260static inline int64_t261_Py_atomic_exchange_int64(int64_t *obj, int64_t value)262{263    _Py_USING_STD;264    return atomic_exchange((_Atomic(int64_t)*)obj, value);265}266 267static inline intptr_t268_Py_atomic_exchange_intptr(intptr_t *obj, intptr_t value)269{270    _Py_USING_STD;271    return atomic_exchange((_Atomic(intptr_t)*)obj, value);272}273 274static inline unsigned int275_Py_atomic_exchange_uint(unsigned int *obj, unsigned int value)276{277    _Py_USING_STD;278    return atomic_exchange((_Atomic(unsigned int)*)obj, value);279}280 281static inline uint8_t282_Py_atomic_exchange_uint8(uint8_t *obj, uint8_t value)283{284    _Py_USING_STD;285    return atomic_exchange((_Atomic(uint8_t)*)obj, value);286}287 288static inline uint16_t289_Py_atomic_exchange_uint16(uint16_t *obj, uint16_t value)290{291    _Py_USING_STD;292    return atomic_exchange((_Atomic(uint16_t)*)obj, value);293}294 295static inline uint32_t296_Py_atomic_exchange_uint32(uint32_t *obj, uint32_t value)297{298    _Py_USING_STD;299    return atomic_exchange((_Atomic(uint32_t)*)obj, value);300}301 302static inline uint64_t303_Py_atomic_exchange_uint64(uint64_t *obj, uint64_t value)304{305    _Py_USING_STD;306    return atomic_exchange((_Atomic(uint64_t)*)obj, value);307}308 309static inline uintptr_t310_Py_atomic_exchange_uintptr(uintptr_t *obj, uintptr_t value)311{312    _Py_USING_STD;313    return atomic_exchange((_Atomic(uintptr_t)*)obj, value);314}315 316static inline Py_ssize_t317_Py_atomic_exchange_ssize(Py_ssize_t *obj, Py_ssize_t value)318{319    _Py_USING_STD;320    return atomic_exchange((_Atomic(Py_ssize_t)*)obj, value);321}322 323static inline void*324_Py_atomic_exchange_ptr(void *obj, void *value)325{326    _Py_USING_STD;327    return atomic_exchange((_Atomic(void *)*)obj, value);328}329 330 331// --- _Py_atomic_and --------------------------------------------------------332 333static inline uint8_t334_Py_atomic_and_uint8(uint8_t *obj, uint8_t value)335{336    _Py_USING_STD;337    return atomic_fetch_and((_Atomic(uint8_t)*)obj, value);338}339 340static inline uint16_t341_Py_atomic_and_uint16(uint16_t *obj, uint16_t value)342{343    _Py_USING_STD;344    return atomic_fetch_and((_Atomic(uint16_t)*)obj, value);345}346 347static inline uint32_t348_Py_atomic_and_uint32(uint32_t *obj, uint32_t value)349{350    _Py_USING_STD;351    return atomic_fetch_and((_Atomic(uint32_t)*)obj, value);352}353 354static inline uint64_t355_Py_atomic_and_uint64(uint64_t *obj, uint64_t value)356{357    _Py_USING_STD;358    return atomic_fetch_and((_Atomic(uint64_t)*)obj, value);359}360 361static inline uintptr_t362_Py_atomic_and_uintptr(uintptr_t *obj, uintptr_t value)363{364    _Py_USING_STD;365    return atomic_fetch_and((_Atomic(uintptr_t)*)obj, value);366}367 368 369// --- _Py_atomic_or ---------------------------------------------------------370 371static inline uint8_t372_Py_atomic_or_uint8(uint8_t *obj, uint8_t value)373{374    _Py_USING_STD;375    return atomic_fetch_or((_Atomic(uint8_t)*)obj, value);376}377 378static inline uint16_t379_Py_atomic_or_uint16(uint16_t *obj, uint16_t value)380{381    _Py_USING_STD;382    return atomic_fetch_or((_Atomic(uint16_t)*)obj, value);383}384 385static inline uint32_t386_Py_atomic_or_uint32(uint32_t *obj, uint32_t value)387{388    _Py_USING_STD;389    return atomic_fetch_or((_Atomic(uint32_t)*)obj, value);390}391 392static inline uint64_t393_Py_atomic_or_uint64(uint64_t *obj, uint64_t value)394{395    _Py_USING_STD;396    return atomic_fetch_or((_Atomic(uint64_t)*)obj, value);397}398 399static inline uintptr_t400_Py_atomic_or_uintptr(uintptr_t *obj, uintptr_t value)401{402    _Py_USING_STD;403    return atomic_fetch_or((_Atomic(uintptr_t)*)obj, value);404}405 406 407// --- _Py_atomic_load -------------------------------------------------------408 409static inline int410_Py_atomic_load_int(const int *obj)411{412    _Py_USING_STD;413    return atomic_load((const _Atomic(int)*)obj);414}415 416static inline int8_t417_Py_atomic_load_int8(const int8_t *obj)418{419    _Py_USING_STD;420    return atomic_load((const _Atomic(int8_t)*)obj);421}422 423static inline int16_t424_Py_atomic_load_int16(const int16_t *obj)425{426    _Py_USING_STD;427    return atomic_load((const _Atomic(int16_t)*)obj);428}429 430static inline int32_t431_Py_atomic_load_int32(const int32_t *obj)432{433    _Py_USING_STD;434    return atomic_load((const _Atomic(int32_t)*)obj);435}436 437static inline int64_t438_Py_atomic_load_int64(const int64_t *obj)439{440    _Py_USING_STD;441    return atomic_load((const _Atomic(int64_t)*)obj);442}443 444static inline intptr_t445_Py_atomic_load_intptr(const intptr_t *obj)446{447    _Py_USING_STD;448    return atomic_load((const _Atomic(intptr_t)*)obj);449}450 451static inline uint8_t452_Py_atomic_load_uint8(const uint8_t *obj)453{454    _Py_USING_STD;455    return atomic_load((const _Atomic(uint8_t)*)obj);456}457 458static inline uint16_t459_Py_atomic_load_uint16(const uint16_t *obj)460{461    _Py_USING_STD;462    return atomic_load((const _Atomic(uint16_t)*)obj);463}464 465static inline uint32_t466_Py_atomic_load_uint32(const uint32_t *obj)467{468    _Py_USING_STD;469    return atomic_load((const _Atomic(uint32_t)*)obj);470}471 472static inline uint64_t473_Py_atomic_load_uint64(const uint64_t *obj)474{475    _Py_USING_STD;476    return atomic_load((const _Atomic(uint64_t)*)obj);477}478 479static inline uintptr_t480_Py_atomic_load_uintptr(const uintptr_t *obj)481{482    _Py_USING_STD;483    return atomic_load((const _Atomic(uintptr_t)*)obj);484}485 486static inline unsigned int487_Py_atomic_load_uint(const unsigned int *obj)488{489    _Py_USING_STD;490    return atomic_load((const _Atomic(unsigned int)*)obj);491}492 493static inline Py_ssize_t494_Py_atomic_load_ssize(const Py_ssize_t *obj)495{496    _Py_USING_STD;497    return atomic_load((const _Atomic(Py_ssize_t)*)obj);498}499 500static inline void*501_Py_atomic_load_ptr(const void *obj)502{503    _Py_USING_STD;504    return atomic_load((const _Atomic(void*)*)obj);505}506 507 508// --- _Py_atomic_load_relaxed -----------------------------------------------509 510static inline int511_Py_atomic_load_int_relaxed(const int *obj)512{513    _Py_USING_STD;514    return atomic_load_explicit((const _Atomic(int)*)obj,515                                memory_order_relaxed);516}517 518static inline char519_Py_atomic_load_char_relaxed(const char *obj)520{521    _Py_USING_STD;522    return atomic_load_explicit((const _Atomic(char)*)obj,523                                memory_order_relaxed);524}525 526static inline unsigned char527_Py_atomic_load_uchar_relaxed(const unsigned char *obj)528{529    _Py_USING_STD;530    return atomic_load_explicit((const _Atomic(unsigned char)*)obj,531                                memory_order_relaxed);532}533 534static inline short535_Py_atomic_load_short_relaxed(const short *obj)536{537    _Py_USING_STD;538    return atomic_load_explicit((const _Atomic(short)*)obj,539                                memory_order_relaxed);540}541 542static inline unsigned short543_Py_atomic_load_ushort_relaxed(const unsigned short *obj)544{545    _Py_USING_STD;546    return atomic_load_explicit((const _Atomic(unsigned short)*)obj,547                                memory_order_relaxed);548}549 550static inline long551_Py_atomic_load_long_relaxed(const long *obj)552{553    _Py_USING_STD;554    return atomic_load_explicit((const _Atomic(long)*)obj,555                                memory_order_relaxed);556}557 558static inline float559_Py_atomic_load_float_relaxed(const float *obj)560{561    _Py_USING_STD;562    return atomic_load_explicit((const _Atomic(float)*)obj,563                                memory_order_relaxed);564}565 566static inline double567_Py_atomic_load_double_relaxed(const double *obj)568{569    _Py_USING_STD;570    return atomic_load_explicit((const _Atomic(double)*)obj,571                                memory_order_relaxed);572}573 574static inline int8_t575_Py_atomic_load_int8_relaxed(const int8_t *obj)576{577    _Py_USING_STD;578    return atomic_load_explicit((const _Atomic(int8_t)*)obj,579                                memory_order_relaxed);580}581 582static inline int16_t583_Py_atomic_load_int16_relaxed(const int16_t *obj)584{585    _Py_USING_STD;586    return atomic_load_explicit((const _Atomic(int16_t)*)obj,587                                memory_order_relaxed);588}589 590static inline int32_t591_Py_atomic_load_int32_relaxed(const int32_t *obj)592{593    _Py_USING_STD;594    return atomic_load_explicit((const _Atomic(int32_t)*)obj,595                                memory_order_relaxed);596}597 598static inline int64_t599_Py_atomic_load_int64_relaxed(const int64_t *obj)600{601    _Py_USING_STD;602    return atomic_load_explicit((const _Atomic(int64_t)*)obj,603                                memory_order_relaxed);604}605 606static inline intptr_t607_Py_atomic_load_intptr_relaxed(const intptr_t *obj)608{609    _Py_USING_STD;610    return atomic_load_explicit((const _Atomic(intptr_t)*)obj,611                                memory_order_relaxed);612}613 614static inline uint8_t615_Py_atomic_load_uint8_relaxed(const uint8_t *obj)616{617    _Py_USING_STD;618    return atomic_load_explicit((const _Atomic(uint8_t)*)obj,619                                memory_order_relaxed);620}621 622static inline uint16_t623_Py_atomic_load_uint16_relaxed(const uint16_t *obj)624{625    _Py_USING_STD;626    return atomic_load_explicit((const _Atomic(uint16_t)*)obj,627                                memory_order_relaxed);628}629 630static inline uint32_t631_Py_atomic_load_uint32_relaxed(const uint32_t *obj)632{633    _Py_USING_STD;634    return atomic_load_explicit((const _Atomic(uint32_t)*)obj,635                                memory_order_relaxed);636}637 638static inline uint64_t639_Py_atomic_load_uint64_relaxed(const uint64_t *obj)640{641    _Py_USING_STD;642    return atomic_load_explicit((const _Atomic(uint64_t)*)obj,643                                memory_order_relaxed);644}645 646static inline uintptr_t647_Py_atomic_load_uintptr_relaxed(const uintptr_t *obj)648{649    _Py_USING_STD;650    return atomic_load_explicit((const _Atomic(uintptr_t)*)obj,651                                memory_order_relaxed);652}653 654static inline unsigned int655_Py_atomic_load_uint_relaxed(const unsigned int *obj)656{657    _Py_USING_STD;658    return atomic_load_explicit((const _Atomic(unsigned int)*)obj,659                                memory_order_relaxed);660}661 662static inline Py_ssize_t663_Py_atomic_load_ssize_relaxed(const Py_ssize_t *obj)664{665    _Py_USING_STD;666    return atomic_load_explicit((const _Atomic(Py_ssize_t)*)obj,667                                memory_order_relaxed);668}669 670static inline void*671_Py_atomic_load_ptr_relaxed(const void *obj)672{673    _Py_USING_STD;674    return atomic_load_explicit((const _Atomic(void*)*)obj,675                                memory_order_relaxed);676}677 678static inline unsigned long long679_Py_atomic_load_ullong_relaxed(const unsigned long long *obj)680{681    _Py_USING_STD;682    return atomic_load_explicit((const _Atomic(unsigned long long)*)obj,683                                memory_order_relaxed);684}685 686static inline long long687_Py_atomic_load_llong_relaxed(const long long *obj)688{689    _Py_USING_STD;690    return atomic_load_explicit((const _Atomic(long long)*)obj,691                                memory_order_relaxed);692}693 694 695// --- _Py_atomic_store ------------------------------------------------------696 697static inline void698_Py_atomic_store_int(int *obj, int value)699{700    _Py_USING_STD;701    atomic_store((_Atomic(int)*)obj, value);702}703 704static inline void705_Py_atomic_store_int8(int8_t *obj, int8_t value)706{707    _Py_USING_STD;708    atomic_store((_Atomic(int8_t)*)obj, value);709}710 711static inline void712_Py_atomic_store_int16(int16_t *obj, int16_t value)713{714    _Py_USING_STD;715    atomic_store((_Atomic(int16_t)*)obj, value);716}717 718static inline void719_Py_atomic_store_int32(int32_t *obj, int32_t value)720{721    _Py_USING_STD;722    atomic_store((_Atomic(int32_t)*)obj, value);723}724 725static inline void726_Py_atomic_store_int64(int64_t *obj, int64_t value)727{728    _Py_USING_STD;729    atomic_store((_Atomic(int64_t)*)obj, value);730}731 732static inline void733_Py_atomic_store_intptr(intptr_t *obj, intptr_t value)734{735    _Py_USING_STD;736    atomic_store((_Atomic(intptr_t)*)obj, value);737}738 739static inline void740_Py_atomic_store_uint8(uint8_t *obj, uint8_t value)741{742    _Py_USING_STD;743    atomic_store((_Atomic(uint8_t)*)obj, value);744}745 746static inline void747_Py_atomic_store_uint16(uint16_t *obj, uint16_t value)748{749    _Py_USING_STD;750    atomic_store((_Atomic(uint16_t)*)obj, value);751}752 753static inline void754_Py_atomic_store_uint32(uint32_t *obj, uint32_t value)755{756    _Py_USING_STD;757    atomic_store((_Atomic(uint32_t)*)obj, value);758}759 760static inline void761_Py_atomic_store_uint64(uint64_t *obj, uint64_t value)762{763    _Py_USING_STD;764    atomic_store((_Atomic(uint64_t)*)obj, value);765}766 767static inline void768_Py_atomic_store_uintptr(uintptr_t *obj, uintptr_t value)769{770    _Py_USING_STD;771    atomic_store((_Atomic(uintptr_t)*)obj, value);772}773 774static inline void775_Py_atomic_store_uint(unsigned int *obj, unsigned int value)776{777    _Py_USING_STD;778    atomic_store((_Atomic(unsigned int)*)obj, value);779}780 781static inline void782_Py_atomic_store_ptr(void *obj, void *value)783{784    _Py_USING_STD;785    atomic_store((_Atomic(void*)*)obj, value);786}787 788static inline void789_Py_atomic_store_ssize(Py_ssize_t *obj, Py_ssize_t value)790{791    _Py_USING_STD;792    atomic_store((_Atomic(Py_ssize_t)*)obj, value);793}794 795 796// --- _Py_atomic_store_relaxed ----------------------------------------------797 798static inline void799_Py_atomic_store_int_relaxed(int *obj, int value)800{801    _Py_USING_STD;802    atomic_store_explicit((_Atomic(int)*)obj, value,803                          memory_order_relaxed);804}805 806static inline void807_Py_atomic_store_int8_relaxed(int8_t *obj, int8_t value)808{809    _Py_USING_STD;810    atomic_store_explicit((_Atomic(int8_t)*)obj, value,811                          memory_order_relaxed);812}813 814static inline void815_Py_atomic_store_int16_relaxed(int16_t *obj, int16_t value)816{817    _Py_USING_STD;818    atomic_store_explicit((_Atomic(int16_t)*)obj, value,819                          memory_order_relaxed);820}821 822static inline void823_Py_atomic_store_int32_relaxed(int32_t *obj, int32_t value)824{825    _Py_USING_STD;826    atomic_store_explicit((_Atomic(int32_t)*)obj, value,827                          memory_order_relaxed);828}829 830static inline void831_Py_atomic_store_int64_relaxed(int64_t *obj, int64_t value)832{833    _Py_USING_STD;834    atomic_store_explicit((_Atomic(int64_t)*)obj, value,835                          memory_order_relaxed);836}837 838static inline void839_Py_atomic_store_intptr_relaxed(intptr_t *obj, intptr_t value)840{841    _Py_USING_STD;842    atomic_store_explicit((_Atomic(intptr_t)*)obj, value,843                          memory_order_relaxed);844}845 846static inline void847_Py_atomic_store_uint8_relaxed(uint8_t *obj, uint8_t value)848{849    _Py_USING_STD;850    atomic_store_explicit((_Atomic(uint8_t)*)obj, value,851                          memory_order_relaxed);852}853 854static inline void855_Py_atomic_store_uint16_relaxed(uint16_t *obj, uint16_t value)856{857    _Py_USING_STD;858    atomic_store_explicit((_Atomic(uint16_t)*)obj, value,859                          memory_order_relaxed);860}861 862static inline void863_Py_atomic_store_uint32_relaxed(uint32_t *obj, uint32_t value)864{865    _Py_USING_STD;866    atomic_store_explicit((_Atomic(uint32_t)*)obj, value,867                          memory_order_relaxed);868}869 870static inline void871_Py_atomic_store_uint64_relaxed(uint64_t *obj, uint64_t value)872{873    _Py_USING_STD;874    atomic_store_explicit((_Atomic(uint64_t)*)obj, value,875                          memory_order_relaxed);876}877 878static inline void879_Py_atomic_store_uintptr_relaxed(uintptr_t *obj, uintptr_t value)880{881    _Py_USING_STD;882    atomic_store_explicit((_Atomic(uintptr_t)*)obj, value,883                          memory_order_relaxed);884}885 886static inline void887_Py_atomic_store_uint_relaxed(unsigned int *obj, unsigned int value)888{889    _Py_USING_STD;890    atomic_store_explicit((_Atomic(unsigned int)*)obj, value,891                          memory_order_relaxed);892}893 894static inline void895_Py_atomic_store_ptr_relaxed(void *obj, void *value)896{897    _Py_USING_STD;898    atomic_store_explicit((_Atomic(void*)*)obj, value,899                          memory_order_relaxed);900}901 902static inline void903_Py_atomic_store_ssize_relaxed(Py_ssize_t *obj, Py_ssize_t value)904{905    _Py_USING_STD;906    atomic_store_explicit((_Atomic(Py_ssize_t)*)obj, value,907                          memory_order_relaxed);908}909 910static inline void911_Py_atomic_store_ullong_relaxed(unsigned long long *obj,912                                unsigned long long value)913{914    _Py_USING_STD;915    atomic_store_explicit((_Atomic(unsigned long long)*)obj, value,916                          memory_order_relaxed);917}918 919static inline void920_Py_atomic_store_char_relaxed(char *obj, char value)921{922    _Py_USING_STD;923    atomic_store_explicit((_Atomic(char)*)obj, value,924                          memory_order_relaxed);925}926 927static inline void928_Py_atomic_store_uchar_relaxed(unsigned char *obj, unsigned char value)929{930    _Py_USING_STD;931    atomic_store_explicit((_Atomic(unsigned char)*)obj, value,932                          memory_order_relaxed);933}934 935static inline void936_Py_atomic_store_short_relaxed(short *obj, short value)937{938    _Py_USING_STD;939    atomic_store_explicit((_Atomic(short)*)obj, value,940                          memory_order_relaxed);941}942 943static inline void944_Py_atomic_store_ushort_relaxed(unsigned short *obj, unsigned short value)945{946    _Py_USING_STD;947    atomic_store_explicit((_Atomic(unsigned short)*)obj, value,948                          memory_order_relaxed);949}950 951static inline void952_Py_atomic_store_long_relaxed(long *obj, long value)953{954    _Py_USING_STD;955    atomic_store_explicit((_Atomic(long)*)obj, value,956                          memory_order_relaxed);957}958 959static inline void960_Py_atomic_store_float_relaxed(float *obj, float value)961{962    _Py_USING_STD;963    atomic_store_explicit((_Atomic(float)*)obj, value,964                          memory_order_relaxed);965}966 967static inline void968_Py_atomic_store_double_relaxed(double *obj, double value)969{970    _Py_USING_STD;971    atomic_store_explicit((_Atomic(double)*)obj, value,972                          memory_order_relaxed);973}974 975static inline void976_Py_atomic_store_llong_relaxed(long long *obj, long long value)977{978    _Py_USING_STD;979    atomic_store_explicit((_Atomic(long long)*)obj, value,980                          memory_order_relaxed);981}982 983 984// --- _Py_atomic_load_ptr_acquire / _Py_atomic_store_ptr_release ------------985 986static inline void *987_Py_atomic_load_ptr_acquire(const void *obj)988{989    _Py_USING_STD;990    return atomic_load_explicit((const _Atomic(void*)*)obj,991                                memory_order_acquire);992}993 994static inline uintptr_t995_Py_atomic_load_uintptr_acquire(const uintptr_t *obj)996{997    _Py_USING_STD;998    return atomic_load_explicit((const _Atomic(uintptr_t)*)obj,999                                memory_order_acquire);1000}1001 1002static inline void1003_Py_atomic_store_ptr_release(void *obj, void *value)1004{1005    _Py_USING_STD;1006    atomic_store_explicit((_Atomic(void*)*)obj, value,1007                          memory_order_release);1008}1009 1010static inline void1011_Py_atomic_store_uintptr_release(uintptr_t *obj, uintptr_t value)1012{1013    _Py_USING_STD;1014    atomic_store_explicit((_Atomic(uintptr_t)*)obj, value,1015                          memory_order_release);1016}1017 1018static inline void1019_Py_atomic_store_int_release(int *obj, int value)1020{1021    _Py_USING_STD;1022    atomic_store_explicit((_Atomic(int)*)obj, value,1023                          memory_order_release);1024}1025 1026static inline void1027_Py_atomic_store_uint_release(unsigned int *obj, unsigned int value)1028{1029    _Py_USING_STD;1030    atomic_store_explicit((_Atomic(unsigned int)*)obj, value,1031                          memory_order_release);1032}1033 1034static inline void1035_Py_atomic_store_ssize_release(Py_ssize_t *obj, Py_ssize_t value)1036{1037    _Py_USING_STD;1038    atomic_store_explicit((_Atomic(Py_ssize_t)*)obj, value,1039                          memory_order_release);1040}1041 1042static inline int1043_Py_atomic_load_int_acquire(const int *obj)1044{1045    _Py_USING_STD;1046    return atomic_load_explicit((const _Atomic(int)*)obj,1047                                memory_order_acquire);1048}1049 1050static inline void1051_Py_atomic_store_uint32_release(uint32_t *obj, uint32_t value)1052{1053    _Py_USING_STD;1054    atomic_store_explicit((_Atomic(uint32_t)*)obj, value,1055                          memory_order_release);1056}1057 1058static inline void1059_Py_atomic_store_uint64_release(uint64_t *obj, uint64_t value)1060{1061    _Py_USING_STD;1062    atomic_store_explicit((_Atomic(uint64_t)*)obj, value,1063                          memory_order_release);1064}1065 1066static inline uint64_t1067_Py_atomic_load_uint64_acquire(const uint64_t *obj)1068{1069    _Py_USING_STD;1070    return atomic_load_explicit((const _Atomic(uint64_t)*)obj,1071                                memory_order_acquire);1072}1073 1074static inline uint32_t1075_Py_atomic_load_uint32_acquire(const uint32_t *obj)1076{1077    _Py_USING_STD;1078    return atomic_load_explicit((const _Atomic(uint32_t)*)obj,1079                                memory_order_acquire);1080}1081 1082static inline Py_ssize_t1083_Py_atomic_load_ssize_acquire(const Py_ssize_t *obj)1084{1085    _Py_USING_STD;1086    return atomic_load_explicit((const _Atomic(Py_ssize_t)*)obj,1087                                memory_order_acquire);1088}1089 1090 1091// --- _Py_atomic_fence ------------------------------------------------------1092 1093 static inline void1094_Py_atomic_fence_seq_cst(void)1095{1096    _Py_USING_STD;1097    atomic_thread_fence(memory_order_seq_cst);1098}1099 1100 static inline void1101_Py_atomic_fence_acquire(void)1102{1103    _Py_USING_STD;1104    atomic_thread_fence(memory_order_acquire);1105}1106 1107 static inline void1108_Py_atomic_fence_release(void)1109{1110    _Py_USING_STD;1111    atomic_thread_fence(memory_order_release);1112}1113 
codekingpro/portable-devtools · Team Ai