Skip to content

Commit 488dea5

Browse files
committed
remaining release -> relaxed
1 parent c006e1d commit 488dea5

File tree

6 files changed

+170
-264
lines changed

6 files changed

+170
-264
lines changed

Include/cpython/pyatomic.h

Lines changed: 20 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -482,56 +482,49 @@ _Py_atomic_store_ullong_relaxed(unsigned long long *obj,
482482
static inline void
483483
_Py_atomic_store_char_relaxed(char *obj, char value);
484484

485-
486-
// --- _Py_atomic_load_ptr_acquire / _Py_atomic_store_ptr_release ------------
487-
488-
// Loads `*obj` (acquire operation)
489-
static inline void *
490-
_Py_atomic_load_ptr_acquire(const void *obj);
491-
492-
static inline uintptr_t
493-
_Py_atomic_load_uintptr_acquire(const uintptr_t *obj);
494-
495-
// Stores `*obj = value` (release operation)
496485
static inline void
497-
_Py_atomic_store_ptr_release(void *obj, void *value);
486+
_Py_atomic_store_uchar_relaxed(unsigned char *obj, unsigned char value);
498487

499488
static inline void
500-
_Py_atomic_store_uintptr_release(uintptr_t *obj, uintptr_t value);
489+
_Py_atomic_store_short_relaxed(short *obj, short value);
501490

502491
static inline void
503-
_Py_atomic_store_ssize_release(Py_ssize_t *obj, Py_ssize_t value);
492+
_Py_atomic_store_ushort_relaxed(unsigned short *obj, unsigned short value);
504493

505494
static inline void
506-
_Py_atomic_store_int_release(int *obj, int value);
495+
_Py_atomic_store_long_relaxed(long *obj, long value);
507496

508497
static inline void
509-
_Py_atomic_store_uchar_release(unsigned char *obj, unsigned char value);
498+
_Py_atomic_store_float_relaxed(float *obj, float value);
510499

511500
static inline void
512-
_Py_atomic_store_short_release(short *obj, short value);
501+
_Py_atomic_store_double_relaxed(double *obj, double value);
513502

514503
static inline void
515-
_Py_atomic_store_ushort_release(unsigned short *obj, unsigned short value);
504+
_Py_atomic_store_llong_relaxed(long long *obj, long long value);
516505

517-
static inline void
518-
_Py_atomic_store_uint_release(unsigned int *obj, unsigned int value);
519506

520-
static inline void
521-
_Py_atomic_store_long_release(long *obj, long value);
507+
// --- _Py_atomic_load_ptr_acquire / _Py_atomic_store_ptr_release ------------
508+
509+
// Loads `*obj` (acquire operation)
510+
static inline void *
511+
_Py_atomic_load_ptr_acquire(const void *obj);
522512

513+
static inline uintptr_t
514+
_Py_atomic_load_uintptr_acquire(const uintptr_t *obj);
515+
516+
// Stores `*obj = value` (release operation)
523517
static inline void
524-
_Py_atomic_store_float_release(float *obj, float value);
518+
_Py_atomic_store_ptr_release(void *obj, void *value);
525519

526520
static inline void
527-
_Py_atomic_store_double_release(double *obj, double value);
521+
_Py_atomic_store_uintptr_release(uintptr_t *obj, uintptr_t value);
528522

529523
static inline void
530-
_Py_atomic_store_llong_release(long long *obj, long long value);
524+
_Py_atomic_store_ssize_release(Py_ssize_t *obj, Py_ssize_t value);
531525

532526
static inline void
533-
_Py_atomic_store_ullong_release(unsigned long long *obj,
534-
unsigned long long value);
527+
_Py_atomic_store_int_release(int *obj, int value);
535528

536529
static inline int
537530
_Py_atomic_load_int_acquire(const int *obj);

Include/cpython/pyatomic_gcc.h

Lines changed: 27 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -521,64 +521,55 @@ static inline void
521521
_Py_atomic_store_char_relaxed(char *obj, char value)
522522
{ __atomic_store_n(obj, value, __ATOMIC_RELEASE); }
523523

524-
525-
// --- _Py_atomic_load_ptr_acquire / _Py_atomic_store_ptr_release ------------
526-
527-
static inline void *
528-
_Py_atomic_load_ptr_acquire(const void *obj)
529-
{ return (void *)__atomic_load_n((void * const *)obj, __ATOMIC_ACQUIRE); }
530-
531-
static inline uintptr_t
532-
_Py_atomic_load_uintptr_acquire(const uintptr_t *obj)
533-
{ return (uintptr_t)__atomic_load_n(obj, __ATOMIC_ACQUIRE); }
534-
535524
static inline void
536-
_Py_atomic_store_ptr_release(void *obj, void *value)
537-
{ __atomic_store_n((void **)obj, value, __ATOMIC_RELEASE); }
525+
_Py_atomic_store_uchar_relaxed(unsigned char *obj, unsigned char value)
526+
{ __atomic_store_n(obj, value, __ATOMIC_RELAXED); }
538527

539528
static inline void
540-
_Py_atomic_store_uintptr_release(uintptr_t *obj, uintptr_t value)
541-
{ __atomic_store_n(obj, value, __ATOMIC_RELEASE); }
529+
_Py_atomic_store_short_relaxed(short *obj, short value)
530+
{ __atomic_store_n(obj, value, __ATOMIC_RELAXED); }
542531

543532
static inline void
544-
_Py_atomic_store_int_release(int *obj, int value)
545-
{ __atomic_store_n(obj, value, __ATOMIC_RELEASE); }
533+
_Py_atomic_store_ushort_relaxed(unsigned short *obj, unsigned short value)
534+
{ __atomic_store_n(obj, value, __ATOMIC_RELAXED); }
546535

547536
static inline void
548-
_Py_atomic_store_uchar_release(unsigned char *obj, unsigned char value)
549-
{ __atomic_store_n(obj, value, __ATOMIC_RELEASE); }
537+
_Py_atomic_store_long_relaxed(long *obj, long value)
538+
{ __atomic_store_n(obj, value, __ATOMIC_RELAXED); }
550539

551540
static inline void
552-
_Py_atomic_store_short_release(short *obj, short value)
553-
{ __atomic_store_n(obj, value, __ATOMIC_RELEASE); }
541+
_Py_atomic_store_float_relaxed(float *obj, float value)
542+
{ __atomic_store(obj, &value, __ATOMIC_RELAXED); }
554543

555544
static inline void
556-
_Py_atomic_store_ushort_release(unsigned short *obj, unsigned short value)
557-
{ __atomic_store_n(obj, value, __ATOMIC_RELEASE); }
545+
_Py_atomic_store_double_relaxed(double *obj, double value)
546+
{ __atomic_store(obj, &value, __ATOMIC_RELAXED); }
558547

559548
static inline void
560-
_Py_atomic_store_uint_release(unsigned int *obj, unsigned int value)
561-
{ __atomic_store_n(obj, value, __ATOMIC_RELEASE); }
549+
_Py_atomic_store_llong_relaxed(long long *obj, long long value)
550+
{ __atomic_store_n(obj, value, __ATOMIC_RELAXED); }
562551

563-
static inline void
564-
_Py_atomic_store_long_release(long *obj, long value)
565-
{ __atomic_store_n(obj, value, __ATOMIC_RELEASE); }
566552

567-
static inline void
568-
_Py_atomic_store_float_release(float *obj, float value)
569-
{ __atomic_store(obj, &value, __ATOMIC_RELEASE); }
553+
// --- _Py_atomic_load_ptr_acquire / _Py_atomic_store_ptr_release ------------
554+
555+
static inline void *
556+
_Py_atomic_load_ptr_acquire(const void *obj)
557+
{ return (void *)__atomic_load_n((void * const *)obj, __ATOMIC_ACQUIRE); }
558+
559+
static inline uintptr_t
560+
_Py_atomic_load_uintptr_acquire(const uintptr_t *obj)
561+
{ return (uintptr_t)__atomic_load_n(obj, __ATOMIC_ACQUIRE); }
570562

571563
static inline void
572-
_Py_atomic_store_double_release(double *obj, double value)
573-
{ __atomic_store(obj, &value, __ATOMIC_RELEASE); }
564+
_Py_atomic_store_ptr_release(void *obj, void *value)
565+
{ __atomic_store_n((void **)obj, value, __ATOMIC_RELEASE); }
574566

575567
static inline void
576-
_Py_atomic_store_llong_release(long long *obj, long long value)
568+
_Py_atomic_store_uintptr_release(uintptr_t *obj, uintptr_t value)
577569
{ __atomic_store_n(obj, value, __ATOMIC_RELEASE); }
578570

579571
static inline void
580-
_Py_atomic_store_ullong_release(unsigned long long *obj,
581-
unsigned long long value)
572+
_Py_atomic_store_int_release(int *obj, int value)
582573
{ __atomic_store_n(obj, value, __ATOMIC_RELEASE); }
583574

584575
static inline void

Include/cpython/pyatomic_msc.h

Lines changed: 42 additions & 111 deletions
Original file line numberDiff line numberDiff line change
@@ -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

983962
static 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

995968
static 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

1008974
static 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

1021980
static 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

1034986
static 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

1047992
static 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

1060998
static 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

10991031
static 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

11121043
static 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

11251056
static 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

Comments
 (0)