20.08.2012 22:20, Warner Losh написал:
On Aug 20, 2012, at 1:17 PM, Wojciech Puchar wrote:
or use ++.
i think it is always aligned to 2 bytes and this should produce usable code on
any CPU? should be 6 instructions on MIPS and PPC IMHO.
We should tag it as __aligned(2) then, no? If so, then the compiler should
generate the code you posted.
should is the most important word in Your post. what it actually do - i don't
know.
If we are requiring this to be __aligned(2), we should tag it as such to
enforce this.
Even without this tagging, the code to do a structure level copy of 6 bytes is
going to be tiny...
Warner
I try some times different algorithms. This is one of thees:
*(u_int32_t *)(dst) = *(u_int32_t *)(src);
*(u_int16_t *)&(dst->octet[4]) = *(u_int16_t *)&(src->octet[4]);
But, internal gcc and clang optimisations are much better, than my attempt.
For aligned platforms (2 bytes aligned) best choice is *dst = *src;
_______________________________________________
freebsd-hackers@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to "freebsd-hackers-unsubscr...@freebsd.org"