Skip to content

Commit c3a23fb

Browse files
committed
loop and normal store
1 parent e2c5f2e commit c3a23fb

File tree

3 files changed

+95
-86
lines changed

3 files changed

+95
-86
lines changed

Include/cpython/pyatomic_gcc.h

Lines changed: 30 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -614,15 +614,16 @@ _Py_atomic_memcpy_ptr_store_relaxed(void *dest, void *src, size_t n)
614614

615615
// memcpy(dest, src, n);
616616

617-
// if (dest != src) {
618-
// void **dest_ = (void **)dest;
619-
// void **src_ = (void **)src;
620-
// void **end = dest_ + n / sizeof(void *);
617+
if (dest != src) {
618+
void **dest_ = (void **)dest;
619+
void **src_ = (void **)src;
620+
void **end = dest_ + n / sizeof(void *);
621621

622-
// for (; dest_ != end; dest_++, src_++) {
623-
// __atomic_store_n((void **)dest_, *src_, __ATOMIC_RELAXED);
624-
// }
625-
// }
622+
for (; dest_ != end; dest_++, src_++) {
623+
*dest_ = *src_;
624+
// __atomic_store_n((void **)dest_, *src_, __ATOMIC_RELAXED);
625+
}
626+
}
626627

627628
return dest;
628629
}
@@ -636,25 +637,27 @@ _Py_atomic_memmove_ptr_store_relaxed(void *dest, void *src, size_t n)
636637

637638
// memmove(dest, src, n);
638639

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-
// }
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+
}
658661

659662
return dest;
660663
}

Include/cpython/pyatomic_msc.h

Lines changed: 31 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1168,15 +1168,16 @@ _Py_atomic_memcpy_ptr_store_relaxed(void *dest, void *src, size_t n)
11681168

11691169
// memcpy(dest, src, n);
11701170

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-
// }
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+
}
11801181

11811182
return dest;
11821183
}
@@ -1190,25 +1191,27 @@ _Py_atomic_memmove_ptr_store_relaxed(void *dest, void *src, size_t n)
11901191

11911192
// memmove(dest, src, n);
11921193

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-
// }
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+
}
12121215

12131216
return dest;
12141217
}

Include/cpython/pyatomic_std.h

Lines changed: 34 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1102,16 +1102,17 @@ _Py_atomic_memcpy_ptr_store_relaxed(void *dest, void *src, size_t n)
11021102

11031103
// memcpy(dest, src, n);
11041104

1105-
// if (dest != src) {
1106-
// void **dest_ = (void **)dest;
1107-
// void **src_ = (void **)src;
1108-
// void **end = dest_ + n / sizeof(void *);
1109-
1110-
// for (; dest_ != end; dest_++, src_++) {
1111-
// atomic_store_explicit((_Atomic(void*)*)dest_, *src_,
1112-
// memory_order_relaxed);
1113-
// }
1114-
// }
1105+
if (dest != src) {
1106+
void **dest_ = (void **)dest;
1107+
void **src_ = (void **)src;
1108+
void **end = dest_ + n / sizeof(void *);
1109+
1110+
for (; dest_ != end; dest_++, src_++) {
1111+
*dest_ = *src_;
1112+
// atomic_store_explicit((_Atomic(void*)*)dest_, *src_,
1113+
// memory_order_relaxed);
1114+
}
1115+
}
11151116

11161117
return dest;
11171118
}
@@ -1126,27 +1127,29 @@ _Py_atomic_memmove_ptr_store_relaxed(void *dest, void *src, size_t n)
11261127

11271128
// memmove(dest, src, n);
11281129

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-
// }
1130+
if (dest < src || dest >= (void *)((char *)src + n)) {
1131+
void **dest_ = (void **)dest;
1132+
void **src_ = (void **)src;
1133+
void **end = dest_ + n / sizeof(void *);
1134+
1135+
for (; dest_ != end; dest_++, src_++) {
1136+
*dest_ = *src_;
1137+
// atomic_store_explicit((_Atomic(void*)*)dest_, *src_,
1138+
// memory_order_relaxed);
1139+
}
1140+
}
1141+
else if (dest > src) {
1142+
n = n / sizeof(void *) - 1;
1143+
void **dest_ = (void **)dest + n;
1144+
void **src_ = (void **)src + n;
1145+
void **end = (void **)dest - 1;
1146+
1147+
for (; dest_ != end; dest_--, src_--) {
1148+
*dest_ = *src_;
1149+
// atomic_store_explicit((_Atomic(void*)*)dest_, *src_,
1150+
// memory_order_relaxed);
1151+
}
1152+
}
11501153

11511154
return dest;
11521155
}

0 commit comments

Comments
 (0)