Unaligned floating point access generation for powerpc
Dale Johannesen
dalej@apple.com
Wed Oct 22 18:07:00 GMT 2003
On Wednesday, October 22, 2003, at 08:09 AM, David Edelsohn wrote:
>>>>>> Olivier Hainque writes:
>
> Olivier> On some ppc models, misaligned integer accesses are
> acceptable while floating
> Olivier> point misaligned accesses are not (undesired traps).
>
> Olivier> Using the current mainline GCC sources, the powerpc-elf O1
> compilation of the
> Olivier> code below generates a floating point register load from a
> Olivier> misaligned address.
>
> Olivier> typedef long long data_t __attribute__((aligned (1)));
>
> The programmer is overriding the ABI definitions for alignment.
> The compiler assumes the programmer knows what s/he is doing.
> Violating
> the ABI may produce inefficient code. Why do you expect the compiler
> to
> do anything else?
That's one way to look at it, certainly, but we have a lot of users who
take a different
view. They know that a misaligned integer operation is a lot cheaper
than a misaligned FP one, and don't see why the compiler doesn't know
it too.
I have some sympathy. (Misaligned accesses are common here because of
all the
68K legacy code, and compilers that historically followed 68K alignment
rules, when
so requested, for compatibility.)
I think the way to fix it is for the RA to take alignment into account
when picking
registers. I've never tried very hard to do this. Possibly it can
even be done with
the existing register-class mechanism, though I doubt it.
More information about the Gcc
mailing list