On Sat, Apr 22, 2006 at 01:27:44PM +0200, Timmy Brolin wrote: > Either ip_addr2 or memcpy is needed. > The code "sipaddr = hdr->sipaddr;" would crash on any CPU which do not > support unaligned accesses. > The current ip_addr2 solution is technically more efficient than memcpy > since it copies the ip_addr with just two 16bit reads+writes. > The only solution which would be slightly more efficient is to copy > hdr->sipaddr to a 32bit register using two 16bit accesses, and then > write the 32bit register to sipaddr. But since this is not a critical > code path, it is more important to keep the code as clean as possible > rather than trying to save one single memory access. > The ip_addr2 solution makes the code nice and clean.
ip_addr2 is a gross hack, whereas memcpy is clean. As you pointed out, this code is not in a critical path. If we cared about efficiency (which here we don't), we could add an arch/cc macro that copies 4 bytes regardless of alignment. The ip_addr2 hack doesn't work on machines with 4-byte alignment restrictions (ARM, MIPS); hence multiple instances of people having to replace it with memcpy. Regards, Curt McDowell Broadcom Corp. _______________________________________________ lwip-users mailing list [email protected] http://lists.nongnu.org/mailman/listinfo/lwip-users
