This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
RE: memcpy to an unaligned address
- From: "Dave Korn" <dave dot korn at artimi dot com>
- To: "'Shaun Jackman'" <sjackman at gmail dot com>,<gcc at sources dot redhat dot com>
- Date: Tue, 2 Aug 2005 18:43:31 +0100
- Subject: RE: memcpy to an unaligned address
----Original Message----
>From: Shaun Jackman
>Sent: 02 August 2005 18:33
> In a typical Ethernet/IP ARP header the source IP address is
> unaligned. Instead of using...
> out->srcIPAddr = in->dstIPAddr;
> ... I used...
> memcpy(&out->srcIPAddr, &in->dstIPAddr, sizeof(uint32_t));
> ... to account for the unaligned destination. This worked until gcc 4,
> which now generates a simple load/store.
> ldr r3, [r6, #24]
> adds r2, r4, #0
> adds r2, #14
> str r3, [r2, #0]
> A nice optimisation, but in this case it's incorrect. $r4 is aligned,
> and the result of adding #14 to $r4 is an unaligned pointer.
>
> Should gcc know better, or do I need to give it a little more
> information to help it out?
In order for anyone to answer your questions about the alignment of
various types in a struct, don't you think you should perhaps have told us a
little about what those types actually are and how the struct is laid out?
[*]
cheers,
DaveK
[*] - See debugging, psychic ;)
--
Can't think of a witty .sigline today....