This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Array alignment difference on stack
- From: "Jon Beniston" <jon at beniston dot com>
- To: <gcc at gcc dot gnu dot org>
- Date: Fri, 25 Jan 2008 18:03:48 -0000
- Subject: Array alignment difference on stack
Hi,
With a port of GCC 4.2.1 I'm working on, get_pointer_alignment() (via
DECL_ALIGN) returns different values for a char array depending upon whether
it is on the stack or not.
For example, if the array is a global, get_pointer_alignment() always
returns 32, regardless, if there are more than 4 elements in the array. This
is good.
However, when the array is a local, get_pointer_alignment() returns either
8, 16, or 32, depending upon the size size of the array. i.e. if the array
has 11 elements, get_pointer_alignment() will return 8, if it has 16
elements, it will return 32.
This has the knock on consequence that inline memcpys aren't efficient as
they could be (i.e. I end up with byte-by-byte copies instead of word at a
time) for arrays with an odd number of elements.
How can I ensure alignment when allocating on the stack? The DATA_ALIGNMENT
macro doesn't seem to be having the desired effect in this case. (1I don't
even see varasm.c:align_variable being called, so it's not being used).
Cheers,
Jon