@@ -953,185 +953,116 @@ _Py_atomic_store_char_relaxed(char *obj, char value)
953953 * (volatile char * )obj = value ;
954954}
955955
956-
957- // --- _Py_atomic_load_ptr_acquire / _Py_atomic_store_ptr_release ------------
958-
959- static inline void *
960- _Py_atomic_load_ptr_acquire (const void * obj )
961- {
962- #if defined(_M_X64 ) || defined(_M_IX86 )
963- return * (void * volatile * )obj ;
964- #elif defined(_M_ARM64 )
965- return (void * )__ldar64 ((unsigned __int64 volatile * )obj );
966- #else
967- # error "no implementation of _Py_atomic_load_ptr_acquire"
968- #endif
969- }
970-
971- static inline uintptr_t
972- _Py_atomic_load_uintptr_acquire (const uintptr_t * obj )
956+ static inline void
957+ _Py_atomic_store_uchar_relaxed (unsigned char * obj , unsigned char value )
973958{
974- #if defined(_M_X64 ) || defined(_M_IX86 )
975- return * (uintptr_t volatile * )obj ;
976- #elif defined(_M_ARM64 )
977- return (uintptr_t )__ldar64 ((unsigned __int64 volatile * )obj );
978- #else
979- # error "no implementation of _Py_atomic_load_uintptr_acquire"
980- #endif
959+ * (volatile unsigned char * )obj = value ;
981960}
982961
983962static inline void
984- _Py_atomic_store_ptr_release ( void * obj , void * value )
963+ _Py_atomic_store_short_relaxed ( short * obj , short value )
985964{
986- #if defined(_M_X64 ) || defined(_M_IX86 )
987- * (void * volatile * )obj = value ;
988- #elif defined(_M_ARM64 )
989- __stlr64 ((unsigned __int64 volatile * )obj , (uintptr_t )value );
990- #else
991- # error "no implementation of _Py_atomic_store_ptr_release"
992- #endif
965+ * (volatile short * )obj = value ;
993966}
994967
995968static inline void
996- _Py_atomic_store_uintptr_release ( uintptr_t * obj , uintptr_t value )
969+ _Py_atomic_store_ushort_relaxed ( unsigned short * obj , unsigned short value )
997970{
998- #if defined(_M_X64 ) || defined(_M_IX86 )
999- * (uintptr_t volatile * )obj = value ;
1000- #elif defined(_M_ARM64 )
1001- _Py_atomic_ASSERT_ARG_TYPE (unsigned __int64 );
1002- __stlr64 ((unsigned __int64 volatile * )obj , (unsigned __int64 )value );
1003- #else
1004- # error "no implementation of _Py_atomic_store_uintptr_release"
1005- #endif
971+ * (volatile unsigned short * )obj = value ;
1006972}
1007973
1008974static inline void
1009- _Py_atomic_store_int_release ( int * obj , int value )
975+ _Py_atomic_store_uint_release ( unsigned int * obj , unsigned int value )
1010976{
1011- #if defined(_M_X64 ) || defined(_M_IX86 )
1012- * (int volatile * )obj = value ;
1013- #elif defined(_M_ARM64 )
1014- _Py_atomic_ASSERT_ARG_TYPE (unsigned __int32 );
1015- __stlr32 ((unsigned __int32 volatile * )obj , (unsigned __int32 )value );
1016- #else
1017- # error "no implementation of _Py_atomic_store_int_release"
1018- #endif
977+ * (volatile unsigned int * )obj = value ;
1019978}
1020979
1021980static inline void
1022- _Py_atomic_store_uchar_release ( unsigned char * obj , unsigned char value )
981+ _Py_atomic_store_long_relaxed ( long * obj , long value )
1023982{
1024- #if defined(_M_X64 ) || defined(_M_IX86 )
1025- * (unsigned char volatile * )obj = value ;
1026- #elif defined(_M_ARM64 )
1027- _Py_atomic_ASSERT_ARG_TYPE (unsigned __int8 );
1028- __stlr8 ((unsigned __int8 volatile * )obj , (unsigned __int8 )value );
1029- #else
1030- # error "no implementation of _Py_atomic_store_uchar_release"
1031- #endif
983+ * (volatile long * )obj = value ;
1032984}
1033985
1034986static inline void
1035- _Py_atomic_store_short_release ( short * obj , short value )
987+ _Py_atomic_store_float_relaxed ( float * obj , float value )
1036988{
1037- #if defined(_M_X64 ) || defined(_M_IX86 )
1038- * (short volatile * )obj = value ;
1039- #elif defined(_M_ARM64 )
1040- _Py_atomic_ASSERT_ARG_TYPE (unsigned __int16 );
1041- __stlr16 ((unsigned __int16 volatile * )obj , (unsigned __int16 )value );
1042- #else
1043- # error "no implementation of _Py_atomic_store_short_release"
1044- #endif
989+ * (volatile float * )obj = value ;
1045990}
1046991
1047992static inline void
1048- _Py_atomic_store_ushort_release ( unsigned short * obj , unsigned short value )
993+ _Py_atomic_store_double_relaxed ( double * obj , double value )
1049994{
1050- #if defined(_M_X64 ) || defined(_M_IX86 )
1051- * (unsigned short volatile * )obj = value ;
1052- #elif defined(_M_ARM64 )
1053- _Py_atomic_ASSERT_ARG_TYPE (unsigned __int16 );
1054- __stlr16 ((unsigned __int16 volatile * )obj , (unsigned __int16 )value );
1055- #else
1056- # error "no implementation of _Py_atomic_store_ushort_release"
1057- #endif
995+ * (volatile double * )obj = value ;
1058996}
1059997
1060998static inline void
1061- _Py_atomic_store_uint_release ( unsigned int * obj , unsigned int value )
999+ _Py_atomic_store_llong_relaxed ( long long * obj , long long value )
10621000{
1063- #if defined(_M_X64 ) || defined(_M_IX86 )
1064- * (unsigned int volatile * )obj = value ;
1065- #elif defined(_M_ARM64 )
1066- _Py_atomic_ASSERT_ARG_TYPE (unsigned __int32 );
1067- __stlr32 ((unsigned __int32 volatile * )obj , (unsigned __int32 )value );
1068- #else
1069- # error "no implementation of _Py_atomic_store_uint_release"
1070- #endif
1001+ * (volatile long long * )obj = value ;
10711002}
10721003
1073- static inline void
1074- _Py_atomic_store_long_release (long * obj , long value )
1004+
1005+ // --- _Py_atomic_load_ptr_acquire / _Py_atomic_store_ptr_release ------------
1006+
1007+ static inline void *
1008+ _Py_atomic_load_ptr_acquire (const void * obj )
10751009{
10761010#if defined(_M_X64 ) || defined(_M_IX86 )
1077- * ( long volatile * )obj = value ;
1011+ return * ( void * volatile * )obj ;
10781012#elif defined(_M_ARM64 )
1079- _Py_atomic_ASSERT_ARG_TYPE (unsigned __int32 );
1080- __stlr32 ((unsigned __int32 volatile * )obj , (unsigned __int32 )value );
1013+ return (void * )__ldar64 ((unsigned __int64 volatile * )obj );
10811014#else
1082- # error "no implementation of _Py_atomic_store_long_release "
1015+ # error "no implementation of _Py_atomic_load_ptr_acquire "
10831016#endif
10841017}
10851018
1086- static inline void
1087- _Py_atomic_store_float_release ( float * obj , float value )
1019+ static inline uintptr_t
1020+ _Py_atomic_load_uintptr_acquire ( const uintptr_t * obj )
10881021{
10891022#if defined(_M_X64 ) || defined(_M_IX86 )
1090- * ( float volatile * )obj = value ;
1023+ return * ( uintptr_t volatile * )obj ;
10911024#elif defined(_M_ARM64 )
1092- _Py_atomic_ASSERT_ARG_TYPE (unsigned __int32 );
1093- __stlr32 ((unsigned __int32 volatile * )obj , (unsigned __int32 )value );
1025+ return (uintptr_t )__ldar64 ((unsigned __int64 volatile * )obj );
10941026#else
1095- # error "no implementation of _Py_atomic_store_float_release "
1027+ # error "no implementation of _Py_atomic_load_uintptr_acquire "
10961028#endif
10971029}
10981030
10991031static inline void
1100- _Py_atomic_store_double_release ( double * obj , double value )
1032+ _Py_atomic_store_ptr_release ( void * obj , void * value )
11011033{
11021034#if defined(_M_X64 ) || defined(_M_IX86 )
1103- * (double volatile * )obj = value ;
1035+ * (void * volatile * )obj = value ;
11041036#elif defined(_M_ARM64 )
1105- _Py_atomic_ASSERT_ARG_TYPE (unsigned __int64 );
1106- __stlr64 ((unsigned __int64 volatile * )obj , (unsigned __int64 )value );
1037+ __stlr64 ((unsigned __int64 volatile * )obj , (uintptr_t )value );
11071038#else
1108- # error "no implementation of _Py_atomic_store_double_release "
1039+ # error "no implementation of _Py_atomic_store_ptr_release "
11091040#endif
11101041}
11111042
11121043static inline void
1113- _Py_atomic_store_llong_release ( long long * obj , long long value )
1044+ _Py_atomic_store_uintptr_release ( uintptr_t * obj , uintptr_t value )
11141045{
11151046#if defined(_M_X64 ) || defined(_M_IX86 )
1116- * (long long volatile * )obj = value ;
1047+ * (uintptr_t volatile * )obj = value ;
11171048#elif defined(_M_ARM64 )
11181049 _Py_atomic_ASSERT_ARG_TYPE (unsigned __int64 );
11191050 __stlr64 ((unsigned __int64 volatile * )obj , (unsigned __int64 )value );
11201051#else
1121- # error "no implementation of _Py_atomic_store_llong_release "
1052+ # error "no implementation of _Py_atomic_store_uintptr_release "
11221053#endif
11231054}
11241055
11251056static inline void
1126- _Py_atomic_store_ullong_release ( unsigned long long * obj , unsigned long long value )
1057+ _Py_atomic_store_int_release ( int * obj , int value )
11271058{
11281059#if defined(_M_X64 ) || defined(_M_IX86 )
1129- * (unsigned long long volatile * )obj = value ;
1060+ * (int volatile * )obj = value ;
11301061#elif defined(_M_ARM64 )
1131- _Py_atomic_ASSERT_ARG_TYPE (__int64 );
1132- __stlr64 ((unsigned __int64 volatile * )obj , (unsigned __int64 )value );
1062+ _Py_atomic_ASSERT_ARG_TYPE (unsigned __int32 );
1063+ __stlr32 ((unsigned __int32 volatile * )obj , (unsigned __int32 )value );
11331064#else
1134- # error "no implementation of _Py_atomic_store_ullong_release "
1065+ # error "no implementation of _Py_atomic_store_int_release "
11351066#endif
11361067}
11371068
0 commit comments