This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: arm-elf multilib issues
- From: Paul Brook <paul at codesourcery dot com>
- To: gcc at gcc dot gnu dot org
- Cc: zoltan at bendor dot com dot au, Joel Sherrill <joel dot sherrill at oarcorp dot com>
- Date: Fri, 2 Oct 2009 00:22:12 +0100
- Subject: Re: arm-elf multilib issues
- References: <Pine.LNX.4.31.0910020819570.21615-100000@susu.bendor.com.au>
> > Almost certainly not. As far as I'm concerned arm-elf is obsolete, and in
> > maintenance only mode. You should be using arm-eabi.
>
> I'm possibly (probably?) wrong, but as far as I know, it forces alignment
> of 64-bit datum (namely, doubles and long longs) to 8 byte boundaries,
> which does not make sense on small 32-bit cores with 32-bit buses and no
> caches (e.g. practically all ARM7TDMI based chips). Memory is a scarce
> resource on those and wasting bytes for alignment with no performance
> benefit is something that makes arm-eabi less attractive. Also, as far as
> I know passing such datums to functions might cause some headache due to
> the 64-bit datums being even-register aligned when passing them to
> functions, effectively forcing arguments to be passed on the stack
> unnecessarily (memory access is rather expensive on a cache-less
> ARM7TDMI). If you have to write assembly routines that take long long or
> double arguments among other types, that forces you to shuffle registers
> and fetch data from the stack. You lose code space, data space and CPU
> cycles with absolutely nothing in return.
Meh. Badly written code on antique hardware.
I realise this sounds harsh, but in all seriousness if you take a bit of care
(and common sense) you should get the alignment for free in pretty much all
cases, and it can make a huge difference on ARMv5te cores.
If you're being really pedantic then old-abi targets tend to pad all
structures to a word boundary. I'd expect this to have much more detrimental
overall effect than alignment of doubleword quantities, which in my experience
are pretty rare to start with.
Paul