Re:Arm AArch64 Adds Memcpy() Instructions
by gatronicus on Tuesday September 21, 2021 @12:43AM
(#28602100)
Except that for decades REP MOVS/STOS were avoided on x86 because they were much slower than hand written assembly. This only changed recently.
Re:Arm AArch64 Adds Memcpy() Instructions
by userbinator on Tuesday September 21, 2021 @01:06AM
(#28602179)
That was really only in the 286-486 era. On the 8086 it was the fastest, and since the Pentium II, which introduced cacheline-sized moves, it's basically nearly the same as the huge unrolled SIMD implementations that are marginally faster in microbenchmarks.
Linus Torvalds has some good comments on that here: https://www.realworldtech.com/forum/?threadid=196054&curpost...
Re:Arm AArch64 Adds Memcpy() Instructions
by josefx on Tuesday September 21, 2021 @03:34AM
(#28602827)
Linus seems to consider rep mov still too slow for small copies:
https://www.realworldtech.com/forum/?threadid=196054&curpost...
https://www.realworldtech.com/forum/?threadid=196054&curpost...
It seems to me that rep move is so bad that you want to avoid it, but trying to write a fast generic memcpy results in so much bloat to handle edge cases that rep move remains competitive in the generic case.
On x86, it's been there since the 8086, and can do cacheline-sized pieces at a time on the newer CPUs. This behaviour is detectable in certain edge-cases:
https://repzret.org/p/rep-prefix-and-detecting-valgrind/