>From: [email protected]
>[mailto:[email protected]] On
>Behalf Of Chris Strahm
>Sent: Monday, August 24, 2009 5:33 AM
>To: Mailing list for lwIP users
>Subject: [lwip-users] IP Address Display Functions
>
>However the "netadr.ip" value here contains a "struct ip_addr".
>Since they are not the same, all the above type casting is done
>to force it to work. This causes a warning everywhere from GCC
>about alignment etc.
I'd like to add that the packing around struct ip_addr is also unnecessary.
Although it seems benign, it's not. My version of GCC (NIOS) treats this
packed struct as char array and does 4 byte loads, ANDs, shifts, and ORs
everywhere this stuct was used. I simply use:
struct ip_addr {
u32_t addr;
};
If there was a reason for the packing, I don't see it. If it's used within
another struct, the packing of the outer struct defines the behavior. On
the NIOS GCC build, this was one of the 3 non-code-changing optimizations I
made that had a noticeable effect on bandwidth and codesize of both UDP and
TCP. I think this has to be because the ip_addr struct is so heavily used.
I recommend the patch above. If there's an argument that packing is
required for a single member struct, I'm interesting seeing the reason or
proof that it's required.
Bill
_______________________________________________
lwip-users mailing list
[email protected]
http://lists.nongnu.org/mailman/listinfo/lwip-users