Skip to content

Commit 23c1bce

Browse files
committed
test as #define
1 parent be4f118 commit 23c1bce

File tree

5 files changed

+18
-225
lines changed

5 files changed

+18
-225
lines changed

Include/cpython/pyatomic.h

Lines changed: 0 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -545,65 +545,6 @@ static inline Py_ssize_t
545545
_Py_atomic_load_ssize_acquire(const Py_ssize_t *obj);
546546

547547

548-
// --- _Py_atomic_memcpy / _Py_atomic_memmove ------------
549-
550-
static inline void *
551-
_Py_atomic_memcpy_ptr_store_relaxed(void *dest, void *src, size_t n);
552-
553-
static inline void *
554-
_Py_atomic_memmove_ptr_store_relaxed(void *dest, void *src, size_t n);
555-
556-
// static inline void *
557-
// _Py_atomic_memcpy_ptr_store_relaxed(void *dest, void *src, size_t n)
558-
// {
559-
// assert(_Py_IS_ALIGNED(dest, sizeof(void *)));
560-
// assert(_Py_IS_ALIGNED(src, sizeof(void *)));
561-
// assert(n % sizeof(void *) == 0);
562-
563-
// if (dest != src) {
564-
// void **dest_ = (void **)dest;
565-
// void **src_ = (void **)src;
566-
// void **end = dest_ + n / sizeof(void *);
567-
568-
// for (; dest_ != end; dest_++, src_++) {
569-
// _Py_atomic_store_ptr_relaxed(dest_, *src_);
570-
// }
571-
// }
572-
573-
// return dest;
574-
// }
575-
576-
// static inline void *
577-
// _Py_atomic_memmove_ptr_store_relaxed(void *dest, void *src, size_t n)
578-
// {
579-
// assert(_Py_IS_ALIGNED(dest, sizeof(void *)));
580-
// assert(_Py_IS_ALIGNED(src, sizeof(void *)));
581-
// assert(n % sizeof(void *) == 0);
582-
583-
// if (dest < src || dest >= (void *)((char *)src + n)) {
584-
// void **dest_ = (void **)dest;
585-
// void **src_ = (void **)src;
586-
// void **end = dest_ + n / sizeof(void *);
587-
588-
// for (; dest_ != end; dest_++, src_++) {
589-
// _Py_atomic_store_ptr_relaxed(dest_, *src_);
590-
// }
591-
// }
592-
// else if (dest > src) {
593-
// n = n / sizeof(void *) - 1;
594-
// void **dest_ = (void **)dest + n;
595-
// void **src_ = (void **)src + n;
596-
// void **end = (void **)dest - 1;
597-
598-
// for (; dest_ != end; dest_--, src_--) {
599-
// _Py_atomic_store_ptr_relaxed(dest_, *src_);
600-
// }
601-
// }
602-
603-
// return dest;
604-
// }
605-
606-
607548

608549

609550
// --- _Py_atomic_fence ------------------------------------------------------

Include/cpython/pyatomic_gcc.h

Lines changed: 0 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -600,60 +600,6 @@ static inline Py_ssize_t
600600
_Py_atomic_load_ssize_acquire(const Py_ssize_t *obj)
601601
{ return __atomic_load_n(obj, __ATOMIC_ACQUIRE); }
602602

603-
604-
// --- _Py_atomic_memcpy / _Py_atomic_memmove ------------
605-
606-
static inline void *
607-
_Py_atomic_memcpy_ptr_store_relaxed(void *dest, void *src, size_t n)
608-
{
609-
assert(_Py_IS_ALIGNED(dest, sizeof(void *)));
610-
assert(_Py_IS_ALIGNED(src, sizeof(void *)));
611-
assert(n % sizeof(void *) == 0);
612-
613-
if (dest != src) {
614-
void **dest_ = (void **)dest;
615-
void **src_ = (void **)src;
616-
void **end = dest_ + n / sizeof(void *);
617-
618-
for (; dest_ != end; dest_++, src_++) {
619-
__atomic_store_n((void **)dest_, *src_, __ATOMIC_RELAXED);
620-
}
621-
}
622-
623-
return dest;
624-
}
625-
626-
static inline void *
627-
_Py_atomic_memmove_ptr_store_relaxed(void *dest, void *src, size_t n)
628-
{
629-
assert(_Py_IS_ALIGNED(dest, sizeof(void *)));
630-
assert(_Py_IS_ALIGNED(src, sizeof(void *)));
631-
assert(n % sizeof(void *) == 0);
632-
633-
if (dest < src || dest >= (void *)((char *)src + n)) {
634-
void **dest_ = (void **)dest;
635-
void **src_ = (void **)src;
636-
void **end = dest_ + n / sizeof(void *);
637-
638-
for (; dest_ != end; dest_++, src_++) {
639-
__atomic_store_n((void **)dest_, *src_, __ATOMIC_RELAXED);
640-
}
641-
}
642-
else if (dest > src) {
643-
n = n / sizeof(void *) - 1;
644-
void **dest_ = (void **)dest + n;
645-
void **src_ = (void **)src + n;
646-
void **end = (void **)dest - 1;
647-
648-
for (; dest_ != end; dest_--, src_--) {
649-
__atomic_store_n((void **)dest_, *src_, __ATOMIC_RELAXED);
650-
}
651-
}
652-
653-
return dest;
654-
}
655-
656-
657603
// --- _Py_atomic_fence ------------------------------------------------------
658604

659605
static inline void

Include/cpython/pyatomic_msc.h

Lines changed: 0 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -1154,59 +1154,6 @@ _Py_atomic_load_ssize_acquire(const Py_ssize_t *obj)
11541154
#endif
11551155
}
11561156

1157-
1158-
// --- _Py_atomic_memcpy / _Py_atomic_memmove ------------
1159-
1160-
static inline void *
1161-
_Py_atomic_memcpy_ptr_store_relaxed(void *dest, void *src, size_t n)
1162-
{
1163-
assert(_Py_IS_ALIGNED(dest, sizeof(void *)));
1164-
assert(_Py_IS_ALIGNED(src, sizeof(void *)));
1165-
assert(n % sizeof(void *) == 0);
1166-
1167-
if (dest != src) {
1168-
void **dest_ = (void **)dest;
1169-
void **src_ = (void **)src;
1170-
void **end = dest_ + n / sizeof(void *);
1171-
1172-
for (; dest_ != end; dest_++, src_++) {
1173-
*(void * volatile *)dest_ = *src_;
1174-
}
1175-
}
1176-
1177-
return dest;
1178-
}
1179-
1180-
static inline void *
1181-
_Py_atomic_memmove_ptr_store_relaxed(void *dest, void *src, size_t n)
1182-
{
1183-
assert(_Py_IS_ALIGNED(dest, sizeof(void *)));
1184-
assert(_Py_IS_ALIGNED(src, sizeof(void *)));
1185-
assert(n % sizeof(void *) == 0);
1186-
1187-
if (dest < src || dest >= (void *)((char *)src + n)) {
1188-
void **dest_ = (void **)dest;
1189-
void **src_ = (void **)src;
1190-
void **end = dest_ + n / sizeof(void *);
1191-
1192-
for (; dest_ != end; dest_++, src_++) {
1193-
*(void * volatile *)dest_ = *src_;
1194-
}
1195-
}
1196-
else if (dest > src) {
1197-
n = n / sizeof(void *) - 1;
1198-
void **dest_ = (void **)dest + n;
1199-
void **src_ = (void **)src + n;
1200-
void **end = (void **)dest - 1;
1201-
1202-
for (; dest_ != end; dest_--, src_--) {
1203-
*(void * volatile *)dest_ = *src_;
1204-
}
1205-
}
1206-
1207-
return dest;
1208-
}
1209-
12101157
// --- _Py_atomic_fence ------------------------------------------------------
12111158

12121159
static inline void

Include/cpython/pyatomic_std.h

Lines changed: 0 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -1088,63 +1088,6 @@ _Py_atomic_load_ssize_acquire(const Py_ssize_t *obj)
10881088
}
10891089

10901090

1091-
// --- _Py_atomic_memcpy / _Py_atomic_memmove ------------
1092-
1093-
static inline void *
1094-
_Py_atomic_memcpy_ptr_store_relaxed(void *dest, void *src, size_t n)
1095-
{
1096-
_Py_USING_STD;
1097-
assert(_Py_IS_ALIGNED(dest, sizeof(void *)));
1098-
assert(_Py_IS_ALIGNED(src, sizeof(void *)));
1099-
assert(n % sizeof(void *) == 0);
1100-
1101-
if (dest != src) {
1102-
void **dest_ = (void **)dest;
1103-
void **src_ = (void **)src;
1104-
void **end = dest_ + n / sizeof(void *);
1105-
1106-
for (; dest_ != end; dest_++, src_++) {
1107-
atomic_store_explicit((_Atomic(void*)*)dest_, *src_,
1108-
memory_order_relaxed);
1109-
}
1110-
}
1111-
1112-
return dest;
1113-
}
1114-
1115-
static inline void *
1116-
_Py_atomic_memmove_ptr_store_relaxed(void *dest, void *src, size_t n)
1117-
{
1118-
assert(_Py_IS_ALIGNED(dest, sizeof(void *)));
1119-
assert(_Py_IS_ALIGNED(src, sizeof(void *)));
1120-
assert(n % sizeof(void *) == 0);
1121-
1122-
if (dest < src || dest >= (void *)((char *)src + n)) {
1123-
void **dest_ = (void **)dest;
1124-
void **src_ = (void **)src;
1125-
void **end = dest_ + n / sizeof(void *);
1126-
1127-
for (; dest_ != end; dest_++, src_++) {
1128-
atomic_store_explicit((_Atomic(void*)*)dest_, *src_,
1129-
memory_order_relaxed);
1130-
}
1131-
}
1132-
else if (dest > src) {
1133-
n = n / sizeof(void *) - 1;
1134-
void **dest_ = (void **)dest + n;
1135-
void **src_ = (void **)src + n;
1136-
void **end = (void **)dest - 1;
1137-
1138-
for (; dest_ != end; dest_--, src_--) {
1139-
atomic_store_explicit((_Atomic(void*)*)dest_, *src_,
1140-
memory_order_relaxed);
1141-
}
1142-
}
1143-
1144-
return dest;
1145-
}
1146-
1147-
11481091
// --- _Py_atomic_fence ------------------------------------------------------
11491092

11501093
static inline void

Include/internal/pycore_pyatomic_ft_wrappers.h

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,8 +114,24 @@ extern "C" {
114114
#define FT_MUTEX_LOCK(lock) PyMutex_Lock(lock)
115115
#define FT_MUTEX_UNLOCK(lock) PyMutex_Unlock(lock)
116116

117-
#define FT_ATOMIC_MEMCPY_PTR_STORE_RELAXED(dest, src, n) memcpy(dest, src, n)
118-
#define FT_ATOMIC_MEMMOVE_PTR_STORE_RELAXED(dest, src, n) memmove(dest, src, n)
117+
#define FT_ATOMIC_MEMCPY_PTR_STORE_RELAXED(dest, src, n) \
118+
{ \
119+
void *_dest = (dest); \
120+
void *_src = (src); \
121+
\
122+
if (dest != src) { \
123+
void **dest_ = (void **)_dest; \
124+
void **src_ = (void **)_src; \
125+
void **end = dest_ + (Py_ssize_t)(n) / sizeof(void *); \
126+
\
127+
for (; dest_ != end; dest_++, src_++) { \
128+
_Py_atomic_store_ptr_relaxed(dest_, *src_); \
129+
} \
130+
} \
131+
}
132+
133+
#define FT_ATOMIC_MEMMOVE_PTR_STORE_RELAXED(dest, src, n) \
134+
memmove(dest, src, (size_t)(n))
119135

120136

121137
#else

0 commit comments

Comments
 (0)