Цитата(DASM @ Nov 21 2013, 20:14)

598 */
599 void *memcpy(void *dest, const void *src, size_t count)
600 {
601 char *tmp = dest;
602 const char *s = src;
603
604 while (count--)
605 *tmp++ = *s++;
606 return dest;
607 }
608 EXPORT_SYMBOL(memcpy);
Такой вот сурец из string.c ... видел более оптимизированную версию с раскруткой цикла. Что то не понимаю, это же дикие тормоза на 32 битнике. Но люди то солидные писали, в чем прикол?
Собственно это вариант общий для разных процев, обрамлен ifndef ARCH_MEMCPY, но. для Арм версия такая
for (i = __n >> 3; i > 0; i--) {
15 *d++ = *s++;
16 *d++ = *s++;
17 *d++ = *s++;
18 *d++ = *s++;
19 *d++ = *s++;
20 *d++ = *s++;
21 *d++ = *s++;
22 *d++ = *s++;
23 }
Что не шибко лучше.
Если я правильно понял, то приведенный код для ARM взят из arch/arm/boot/compressed/string.c. Если я не ошибаюсь, то данный код используется исключительно при загрузке ядра. А "боевая" версия memcpy находится уже в arch/arm/lib/memcpy.S и arch/arm/lib/template.S и реализована полностью на ассемблере.