Не на 100% надежным способом.Кажется, здесь есть две основные проблемы:
Во-первых, неясно, что вы бы классифицировали как «копию».Как отличить четырехбайтовую копию памяти только загрузкой и сохранением слова одинакового размера?
Например, если мы скомпилируем это:
void assign(long *x, long *y)
{
*x = *y;
}
void copy(void *x, void *y)
{
memcpy(x, y, 8);
}
Мы получим по существуте же инструкции:
0000000000000000 <assign>:
0: 00 00 24 e9 ld r9,0(r4)
4: 00 00 23 f9 std r9,0(r3)
8: 20 00 80 4e blr
0000000000000020 <copy>:
20: 00 00 24 e9 ld r9,0(r4)
24: 00 00 23 f9 std r9,0(r3)
28: 20 00 80 4e blr
Во-вторых, даже если у вас есть определенное определение для копии, обнаружить наличие этого было бы чрезвычайно трудно надежно.
Вы могли бы реализовать что-то, что выглядитдля общего паттерна load / store / conditional-branch, но это нашло бы только тривиальные случаи реализации memcpy, и те, «реализованные самим программистом», могли принимать любую форму.