> It's not desirable since gcc easily loses track of alignment, for instance
> with -mstrict-align
>
> void foo (char *p, char *q)
> {
> __builtin_memcpy (p, q, 4);
> }
>
> generates
>
> lbz 7,0(4)
> lbz 8,1(4)
> lbz 10,2(4)
> lbz 9,3(4)
> stb 7,0(3)
> stb 8,1(3)
> stb 10,2(3)
> stb 9,3(3)
> blr
>
> whereas -mno-strict-align gives
>
> lwz 9,0(4)
> stw 9,0(3)
> blr
I presume you meant:
void foo (int *p, int *q)
{
__builtin_memcpy (p, q, 4);
}
which will yield the same generated code. Yes, it's an unfortunate regression
on strict-alignment platforms, up to 4.5 the generated code was the same.
--
Eric Botcazou