Встроенные функции не должны использоваться для самореализации:)
Встроенные функции должны использоваться в коде приложения - тогда компилятор может генерировать или не генерировать некоторые специальные insnпоследовательность или вызов базовой функции
Сравните:
int a [10], b [20];
void
foo ()
{
__builtin_memcpy (a, b, 10 * sizeof (int));
}
В результате:
foo:
stmfd sp!, {r4, r5}
ldr r4, .L2
ldr r5, .L2+4
ldmia r4!, {r0, r1, r2, r3}
mov ip, r5
stmia ip!, {r0, r1, r2, r3}
ldmia r4!, {r0, r1, r2, r3}
stmia ip!, {r0, r1, r2, r3}
ldmia r4, {r0, r1}
stmia ip, {r0, r1}
ldmfd sp!, {r4, r5}
bx lr
Но:
void
bar (int n)
{
__builtin_memcpy (a, b, n * sizeof (int));
}
приводит к вызову функции memcpy:
bar:
mov r2, r0, asl #2
stmfd sp!, {r3, lr}
ldr r1, .L5
ldr r0, .L5+4
bl memcpy
ldmfd sp!, {r3, lr}
bx lr