Skip to content

Commit 5d372b7

Browse files
committed
and again
1 parent 08298ee commit 5d372b7

File tree

4 files changed

+102
-86
lines changed

4 files changed

+102
-86
lines changed

Include/cpython/pyatomic.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,8 +87,6 @@
8787
# error "this header file must not be included directly"
8888
#endif
8989

90-
#include <string.h>
91-
9290
// --- _Py_atomic_add --------------------------------------------------------
9391
// Atomically adds `value` to `obj` and returns the previous value
9492

Include/cpython/pyatomic_gcc.h

Lines changed: 33 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -603,22 +603,26 @@ _Py_atomic_load_ssize_acquire(const Py_ssize_t *obj)
603603

604604
// --- _Py_atomic_memcpy / _Py_atomic_memmove ------------
605605

606+
#include <string.h>
607+
606608
static inline void *
607609
_Py_atomic_memcpy_ptr_store_relaxed(void *dest, void *src, size_t n)
608610
{
609611
assert(((uintptr_t)dest & (sizeof (void *) - 1)) == 0);
610612
assert(((uintptr_t)src & (sizeof (void *) - 1)) == 0);
611613
assert(n % sizeof(void *) == 0);
612614

613-
if (dest != src) {
614-
void **dest_ = (void **)dest;
615-
void **src_ = (void **)src;
616-
void **end = dest_ + n / sizeof(void *);
615+
memcpy(dest, src, n);
616+
617+
// if (dest != src) {
618+
// void **dest_ = (void **)dest;
619+
// void **src_ = (void **)src;
620+
// void **end = dest_ + n / sizeof(void *);
617621

618-
for (; dest_ != end; dest_++, src_++) {
619-
__atomic_store_n((void **)dest_, *src_, __ATOMIC_RELAXED);
620-
}
621-
}
622+
// for (; dest_ != end; dest_++, src_++) {
623+
// __atomic_store_n((void **)dest_, *src_, __ATOMIC_RELAXED);
624+
// }
625+
// }
622626

623627
return dest;
624628
}
@@ -630,25 +634,27 @@ _Py_atomic_memmove_ptr_store_relaxed(void *dest, void *src, size_t n)
630634
assert(((uintptr_t)src & (sizeof (void *) - 1)) == 0);
631635
assert(n % sizeof(void *) == 0);
632636

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-
}
637+
memmove(dest, src, n);
638+
639+
// if (dest < src || dest >= (void *)((char *)src + n)) {
640+
// void **dest_ = (void **)dest;
641+
// void **src_ = (void **)src;
642+
// void **end = dest_ + n / sizeof(void *);
643+
644+
// for (; dest_ != end; dest_++, src_++) {
645+
// __atomic_store_n((void **)dest_, *src_, __ATOMIC_RELAXED);
646+
// }
647+
// }
648+
// else if (dest > src) {
649+
// n = n / sizeof(void *) - 1;
650+
// void **dest_ = (void **)dest + n;
651+
// void **src_ = (void **)src + n;
652+
// void **end = (void **)dest - 1;
653+
654+
// for (; dest_ != end; dest_--, src_--) {
655+
// __atomic_store_n((void **)dest_, *src_, __ATOMIC_RELAXED);
656+
// }
657+
// }
652658

653659
return dest;
654660
}

Include/cpython/pyatomic_msc.h

Lines changed: 33 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1157,22 +1157,26 @@ _Py_atomic_load_ssize_acquire(const Py_ssize_t *obj)
11571157

11581158
// --- _Py_atomic_memcpy / _Py_atomic_memmove ------------
11591159

1160+
#include <string.h>
1161+
11601162
static inline void *
11611163
_Py_atomic_memcpy_ptr_store_relaxed(void *dest, void *src, size_t n)
11621164
{
11631165
assert(((uintptr_t)dest & (sizeof (void *) - 1)) == 0);
11641166
assert(((uintptr_t)src & (sizeof (void *) - 1)) == 0);
11651167
assert(n % sizeof(void *) == 0);
11661168

1167-
if (dest != src) {
1168-
void **dest_ = (void **)dest;
1169-
void **src_ = (void **)src;
1170-
void **end = dest_ + n / sizeof(void *);
1169+
memcpy(dest, src, n);
11711170

1172-
for (; dest_ != end; dest_++, src_++) {
1173-
*(void * volatile *)dest_ = *src_;
1174-
}
1175-
}
1171+
// if (dest != src) {
1172+
// void **dest_ = (void **)dest;
1173+
// void **src_ = (void **)src;
1174+
// void **end = dest_ + n / sizeof(void *);
1175+
1176+
// for (; dest_ != end; dest_++, src_++) {
1177+
// *(void * volatile *)dest_ = *src_;
1178+
// }
1179+
// }
11761180

11771181
return dest;
11781182
}
@@ -1184,25 +1188,27 @@ _Py_atomic_memmove_ptr_store_relaxed(void *dest, void *src, size_t n)
11841188
assert(((uintptr_t)src & (sizeof (void *) - 1)) == 0);
11851189
assert(n % sizeof(void *) == 0);
11861190

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-
}
1191+
memmove(dest, src, n);
1192+
1193+
// if (dest < src || dest >= (void *)((char *)src + n)) {
1194+
// void **dest_ = (void **)dest;
1195+
// void **src_ = (void **)src;
1196+
// void **end = dest_ + n / sizeof(void *);
1197+
1198+
// for (; dest_ != end; dest_++, src_++) {
1199+
// *(void * volatile *)dest_ = *src_;
1200+
// }
1201+
// }
1202+
// else if (dest > src) {
1203+
// n = n / sizeof(void *) - 1;
1204+
// void **dest_ = (void **)dest + n;
1205+
// void **src_ = (void **)src + n;
1206+
// void **end = (void **)dest - 1;
1207+
1208+
// for (; dest_ != end; dest_--, src_--) {
1209+
// *(void * volatile *)dest_ = *src_;
1210+
// }
1211+
// }
12061212

12071213
return dest;
12081214
}

Include/cpython/pyatomic_std.h

Lines changed: 36 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1090,6 +1090,8 @@ _Py_atomic_load_ssize_acquire(const Py_ssize_t *obj)
10901090

10911091
// --- _Py_atomic_memcpy / _Py_atomic_memmove ------------
10921092

1093+
#include <string.h>
1094+
10931095
static inline void *
10941096
_Py_atomic_memcpy_ptr_store_relaxed(void *dest, void *src, size_t n)
10951097
{
@@ -1098,16 +1100,18 @@ _Py_atomic_memcpy_ptr_store_relaxed(void *dest, void *src, size_t n)
10981100
assert(((uintptr_t)src & (sizeof (void *) - 1)) == 0);
10991101
assert(n % sizeof(void *) == 0);
11001102

1101-
if (dest != src) {
1102-
void **dest_ = (void **)dest;
1103-
void **src_ = (void **)src;
1104-
void **end = dest_ + n / sizeof(void *);
1103+
memcpy(dest, src, n);
1104+
1105+
// if (dest != src) {
1106+
// void **dest_ = (void **)dest;
1107+
// void **src_ = (void **)src;
1108+
// void **end = dest_ + n / sizeof(void *);
11051109

1106-
for (; dest_ != end; dest_++, src_++) {
1107-
atomic_store_explicit((_Atomic(void*)*)dest_, *src_,
1108-
memory_order_relaxed);
1109-
}
1110-
}
1110+
// for (; dest_ != end; dest_++, src_++) {
1111+
// atomic_store_explicit((_Atomic(void*)*)dest_, *src_,
1112+
// memory_order_relaxed);
1113+
// }
1114+
// }
11111115

11121116
return dest;
11131117
}
@@ -1120,27 +1124,29 @@ _Py_atomic_memmove_ptr_store_relaxed(void *dest, void *src, size_t n)
11201124
assert(((uintptr_t)src & (sizeof (void *) - 1)) == 0);
11211125
assert(n % sizeof(void *) == 0);
11221126

1123-
if (dest < src || dest >= (void *)((char *)src + n)) {
1124-
void **dest_ = (void **)dest;
1125-
void **src_ = (void **)src;
1126-
void **end = dest_ + n / sizeof(void *);
1127-
1128-
for (; dest_ != end; dest_++, src_++) {
1129-
atomic_store_explicit((_Atomic(void*)*)dest_, *src_,
1130-
memory_order_relaxed);
1131-
}
1132-
}
1133-
else if (dest > src) {
1134-
n = n / sizeof(void *) - 1;
1135-
void **dest_ = (void **)dest + n;
1136-
void **src_ = (void **)src + n;
1137-
void **end = (void **)dest - 1;
1138-
1139-
for (; dest_ != end; dest_--, src_--) {
1140-
atomic_store_explicit((_Atomic(void*)*)dest_, *src_,
1141-
memory_order_relaxed);
1142-
}
1143-
}
1127+
memmove(dest, src, n);
1128+
1129+
// if (dest < src || dest >= (void *)((char *)src + n)) {
1130+
// void **dest_ = (void **)dest;
1131+
// void **src_ = (void **)src;
1132+
// void **end = dest_ + n / sizeof(void *);
1133+
1134+
// for (; dest_ != end; dest_++, src_++) {
1135+
// atomic_store_explicit((_Atomic(void*)*)dest_, *src_,
1136+
// memory_order_relaxed);
1137+
// }
1138+
// }
1139+
// else if (dest > src) {
1140+
// n = n / sizeof(void *) - 1;
1141+
// void **dest_ = (void **)dest + n;
1142+
// void **src_ = (void **)src + n;
1143+
// void **end = (void **)dest - 1;
1144+
1145+
// for (; dest_ != end; dest_--, src_--) {
1146+
// atomic_store_explicit((_Atomic(void*)*)dest_, *src_,
1147+
// memory_order_relaxed);
1148+
// }
1149+
// }
11441150

11451151
return dest;
11461152
}

0 commit comments

Comments
 (0)