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-net@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-net
To unsubscribe, send any mail to "freebsd-net-unsubscr...@freebsd.org"

Reply via email to