Skip to content

Commit a5f4d9e

Browse files
committed
last test of copy at pyatomic.h level
1 parent 154a132 commit a5f4d9e

File tree

4 files changed

+238
-194
lines changed

4 files changed

+238
-194
lines changed

Include/cpython/pyatomic.h

Lines changed: 53 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -545,15 +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-
557548

558549

559550
// --- _Py_atomic_fence ------------------------------------------------------
@@ -621,3 +612,56 @@ static inline void _Py_atomic_fence_release(void);
621612
#else
622613
# error "long must be 4 or 8 bytes in size"
623614
#endif // SIZEOF_LONG
615+
616+
617+
// --- _Py_atomic_memcpy / _Py_atomic_memmove ------------
618+
619+
static inline void *
620+
_Py_atomic_memcpy_ptr_store_relaxed(void *dest, void *src, size_t n)
621+
{
622+
// assert(((uintptr_t)dest & (sizeof (void *) - 1)) == 0);
623+
// assert(((uintptr_t)src & (sizeof (void *) - 1)) == 0);
624+
// assert(n % sizeof(void *) == 0);
625+
626+
if (dest != src) {
627+
void **dest_ = (void **)dest;
628+
void **src_ = (void **)src;
629+
void **end = dest_ + n / sizeof(void *);
630+
631+
for (; dest_ != end; dest_++, src_++) {
632+
_Py_atomic_store_ptr_relaxed(dest_, *src_);
633+
}
634+
}
635+
636+
return dest;
637+
}
638+
639+
static inline void *
640+
_Py_atomic_memmove_ptr_store_relaxed(void *dest, void *src, size_t n)
641+
{
642+
// assert(((uintptr_t)dest & (sizeof (void *) - 1)) == 0);
643+
// assert(((uintptr_t)src & (sizeof (void *) - 1)) == 0);
644+
// assert(n % sizeof(void *) == 0);
645+
646+
if (dest < src || dest >= (void *)((char *)src + n)) {
647+
void **dest_ = (void **)dest;
648+
void **src_ = (void **)src;
649+
void **end = dest_ + n / sizeof(void *);
650+
651+
for (; dest_ != end; dest_++, src_++) {
652+
_Py_atomic_store_ptr_relaxed(dest_, *src_);
653+
}
654+
}
655+
else if (dest > src) {
656+
n = n / sizeof(void *) - 1;
657+
void **dest_ = (void **)dest + n;
658+
void **src_ = (void **)src + n;
659+
void **end = (void **)dest - 1;
660+
661+
for (; dest_ != end; dest_--, src_--) {
662+
_Py_atomic_store_ptr_relaxed(dest_, *src_);
663+
}
664+
}
665+
666+
return dest;
667+
}

Include/cpython/pyatomic_gcc.h

Lines changed: 60 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -601,66 +601,66 @@ _Py_atomic_load_ssize_acquire(const Py_ssize_t *obj)
601601
{ return __atomic_load_n(obj, __ATOMIC_ACQUIRE); }
602602

603603

604-
// --- _Py_atomic_memcpy / _Py_atomic_memmove ------------
605-
606-
// #include <string.h>
607-
608-
static inline void *
609-
_Py_atomic_memcpy_ptr_store_relaxed(void *dest, void *src, size_t n)
610-
{
611-
assert(((uintptr_t)dest & (uintptr_t)(sizeof (void *) - 1)) == 0);
612-
assert(((uintptr_t)src & (uintptr_t)(sizeof (void *) - 1)) == 0);
613-
// assert(n % sizeof(void *) == 0);
614-
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 *);
621-
622-
for (; dest_ != end; dest_++, src_++) {
623-
// *dest_ = *src_;
624-
__atomic_store_n((void **)dest_, *src_, __ATOMIC_RELAXED);
625-
}
626-
}
627-
628-
return dest;
629-
}
630-
631-
static inline void *
632-
_Py_atomic_memmove_ptr_store_relaxed(void *dest, void *src, size_t n)
633-
{
634-
assert(((uintptr_t)dest & (uintptr_t)(sizeof (void *) - 1)) == 0);
635-
assert(((uintptr_t)src & (uintptr_t)(sizeof (void *) - 1)) == 0);
636-
// assert(n % sizeof(void *) == 0);
637-
638-
// memmove(dest, src, n);
639-
640-
if (dest < src || dest >= (void *)((char *)src + n)) {
641-
void **dest_ = (void **)dest;
642-
void **src_ = (void **)src;
643-
void **end = dest_ + n / sizeof(void *);
644-
645-
for (; dest_ != end; dest_++, src_++) {
646-
// *dest_ = *src_;
647-
__atomic_store_n((void **)dest_, *src_, __ATOMIC_RELAXED);
648-
}
649-
}
650-
else if (dest > src) {
651-
n = n / sizeof(void *) - 1;
652-
void **dest_ = (void **)dest + n;
653-
void **src_ = (void **)src + n;
654-
void **end = (void **)dest - 1;
655-
656-
for (; dest_ != end; dest_--, src_--) {
657-
// *dest_ = *src_;
658-
__atomic_store_n((void **)dest_, *src_, __ATOMIC_RELAXED);
659-
}
660-
}
661-
662-
return dest;
663-
}
604+
// // --- _Py_atomic_memcpy / _Py_atomic_memmove ------------
605+
606+
// // #include <string.h>
607+
608+
// static inline void *
609+
// _Py_atomic_memcpy_ptr_store_relaxed(void *dest, void *src, size_t n)
610+
// {
611+
// // assert(((uintptr_t)dest & (sizeof (void *) - 1)) == 0);
612+
// // assert(((uintptr_t)src & (sizeof (void *) - 1)) == 0);
613+
// // assert(n % sizeof(void *) == 0);
614+
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 *);
621+
622+
// for (; dest_ != end; dest_++, src_++) {
623+
// // *dest_ = *src_;
624+
// __atomic_store_n((void **)dest_, *src_, __ATOMIC_RELAXED);
625+
// }
626+
// }
627+
628+
// return dest;
629+
// }
630+
631+
// static inline void *
632+
// _Py_atomic_memmove_ptr_store_relaxed(void *dest, void *src, size_t n)
633+
// {
634+
// // assert(((uintptr_t)dest & (sizeof (void *) - 1)) == 0);
635+
// // assert(((uintptr_t)src & (sizeof (void *) - 1)) == 0);
636+
// // assert(n % sizeof(void *) == 0);
637+
638+
// // memmove(dest, src, n);
639+
640+
// if (dest < src || dest >= (void *)((char *)src + n)) {
641+
// void **dest_ = (void **)dest;
642+
// void **src_ = (void **)src;
643+
// void **end = dest_ + n / sizeof(void *);
644+
645+
// for (; dest_ != end; dest_++, src_++) {
646+
// // *dest_ = *src_;
647+
// __atomic_store_n((void **)dest_, *src_, __ATOMIC_RELAXED);
648+
// }
649+
// }
650+
// else if (dest > src) {
651+
// n = n / sizeof(void *) - 1;
652+
// void **dest_ = (void **)dest + n;
653+
// void **src_ = (void **)src + n;
654+
// void **end = (void **)dest - 1;
655+
656+
// for (; dest_ != end; dest_--, src_--) {
657+
// // *dest_ = *src_;
658+
// __atomic_store_n((void **)dest_, *src_, __ATOMIC_RELAXED);
659+
// }
660+
// }
661+
662+
// return dest;
663+
// }
664664

665665

666666
// --- _Py_atomic_fence ------------------------------------------------------

Include/cpython/pyatomic_msc.h

Lines changed: 60 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -1155,66 +1155,66 @@ _Py_atomic_load_ssize_acquire(const Py_ssize_t *obj)
11551155
}
11561156

11571157

1158-
// --- _Py_atomic_memcpy / _Py_atomic_memmove ------------
1159-
1160-
// #include <string.h>
1161-
1162-
static inline void *
1163-
_Py_atomic_memcpy_ptr_store_relaxed(void *dest, void *src, size_t n)
1164-
{
1165-
assert(((uintptr_t)dest & (uintptr_t)(sizeof (void *) - 1)) == 0);
1166-
assert(((uintptr_t)src & (uintptr_t)(sizeof (void *) - 1)) == 0);
1167-
// assert(n % sizeof(void *) == 0);
1168-
1169-
// memcpy(dest, src, n);
1170-
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-
// *dest_ = *src_;
1178-
*(void * volatile *)dest_ = *src_;
1179-
}
1180-
}
1181-
1182-
return dest;
1183-
}
1184-
1185-
static inline void *
1186-
_Py_atomic_memmove_ptr_store_relaxed(void *dest, void *src, size_t n)
1187-
{
1188-
assert(((uintptr_t)dest & (uintptr_t)(sizeof (void *) - 1)) == 0);
1189-
assert(((uintptr_t)src & (uintptr_t)(sizeof (void *) - 1)) == 0);
1190-
// assert(n % sizeof(void *) == 0);
1191-
1192-
// memmove(dest, src, n);
1193-
1194-
if (dest < src || dest >= (void *)((char *)src + n)) {
1195-
void **dest_ = (void **)dest;
1196-
void **src_ = (void **)src;
1197-
void **end = dest_ + n / sizeof(void *);
1198-
1199-
for (; dest_ != end; dest_++, src_++) {
1200-
// *dest_ = *src_;
1201-
*(void * volatile *)dest_ = *src_;
1202-
}
1203-
}
1204-
else if (dest > src) {
1205-
n = n / sizeof(void *) - 1;
1206-
void **dest_ = (void **)dest + n;
1207-
void **src_ = (void **)src + n;
1208-
void **end = (void **)dest - 1;
1209-
1210-
for (; dest_ != end; dest_--, src_--) {
1211-
// *dest_ = *src_;
1212-
*(void * volatile *)dest_ = *src_;
1213-
}
1214-
}
1215-
1216-
return dest;
1217-
}
1158+
// // --- _Py_atomic_memcpy / _Py_atomic_memmove ------------
1159+
1160+
// // #include <string.h>
1161+
1162+
// static inline void *
1163+
// _Py_atomic_memcpy_ptr_store_relaxed(void *dest, void *src, size_t n)
1164+
// {
1165+
// // assert(((uintptr_t)dest & (sizeof (void *) - 1)) == 0);
1166+
// // assert(((uintptr_t)src & (sizeof (void *) - 1)) == 0);
1167+
// // assert(n % sizeof(void *) == 0);
1168+
1169+
// // memcpy(dest, src, n);
1170+
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+
// // *dest_ = *src_;
1178+
// *(void * volatile *)dest_ = *src_;
1179+
// }
1180+
// }
1181+
1182+
// return dest;
1183+
// }
1184+
1185+
// static inline void *
1186+
// _Py_atomic_memmove_ptr_store_relaxed(void *dest, void *src, size_t n)
1187+
// {
1188+
// // assert(((uintptr_t)dest & (sizeof (void *) - 1)) == 0);
1189+
// // assert(((uintptr_t)src & (sizeof (void *) - 1)) == 0);
1190+
// // assert(n % sizeof(void *) == 0);
1191+
1192+
// // memmove(dest, src, n);
1193+
1194+
// if (dest < src || dest >= (void *)((char *)src + n)) {
1195+
// void **dest_ = (void **)dest;
1196+
// void **src_ = (void **)src;
1197+
// void **end = dest_ + n / sizeof(void *);
1198+
1199+
// for (; dest_ != end; dest_++, src_++) {
1200+
// // *dest_ = *src_;
1201+
// *(void * volatile *)dest_ = *src_;
1202+
// }
1203+
// }
1204+
// else if (dest > src) {
1205+
// n = n / sizeof(void *) - 1;
1206+
// void **dest_ = (void **)dest + n;
1207+
// void **src_ = (void **)src + n;
1208+
// void **end = (void **)dest - 1;
1209+
1210+
// for (; dest_ != end; dest_--, src_--) {
1211+
// // *dest_ = *src_;
1212+
// *(void * volatile *)dest_ = *src_;
1213+
// }
1214+
// }
1215+
1216+
// return dest;
1217+
// }
12181218

12191219

12201220
// --- _Py_atomic_fence ------------------------------------------------------

0 commit comments

Comments
 (0)