toolchain for powerpc e500v2

David Brown
Mon Feb 7 11:31:00 GMT 2011

On 07/02/2011 12:14, Titus von Boxberg wrote:
> Am Mo, 7.02.2011, 11:16 schrieb David Brown:
>> On 06/02/2011 12:48, Titus von Boxberg wrote:
>>> Hi all,
>>> I'm trying to use ct-ng (of approx. May 2010) to generate
>>> cross gcc-4.5.1, glibc-2.9/linux for a powerpc e500v2 / SPE.
>>> Setting floating point to "hardware" results in a build
>>> error in glibc where the assembler complains while compiling
>>> an FP file about an unmatched constraint
>>> (I could try to get the original message if it helps).
>>> The tool chain gets built when I set floating point support to "software".
>>> However, the resulting compiler does not emit hardware FP instructions
>>> unless I give -mhard-float on the command line.
>>> Is my assumption correct that setting floating point to "hardware" turns on
>>> code generation for the standard PowerPC FPU which this target lacks?
>>> I'd like to avoid having a compiler which needs target specific flags
>>> on the command line, thus:
>>> Does anyone know which options to turn on to get a compiler that
>>> emits correct SPE FP instructions without explicitly being told so
>>> by -mhard-float?
>>> Regards
>>> Titus
>> If you try to use
>> -mhard-float, either as a command-line switch or by default in the
>> build, things are going to go badly wrong, as it will generate PPC
>> floating point instructions that are not implemented on the e500v2.
> That's wrong. The compiler configured for Soft FP / SPE generates the correct
> instructions (but only with -mhard-float), and the code is working as well.
> The tool chain build for hard fp indeed goes wrong. That's my problem.

OK, if you say so - I haven't tried building from source, and it was 
something like a year and a half ago that I tried the CodeSourcery 
toolchain for the e500.  It could well be that SPE floating point was 
activated slightly differently then, and has since then been better 
integrated as a variant of hardware floating point.

>> I would look at the CodeSourcery toolchain.  They have support for SPE
>> floating point in current releases, which you can get as source or
>> pre-build binary.  I don't know whether this support has made it into
>> the mainline FSF trees as yet (call me lazy, but I've just used the
>> binaries from CodeSourcery), but if not then I'm sure it will
>> eventually.  It requires particular flags to enable the SPE floating
>> point - it may be possible to build your own version that uses it by
>> default.
> Thanks for the hint!
>> Remember that the SPE only supports single-precision floating point - be
>> very careful to avoid doubles in your code (or use flags to force 32-bit
>> "doubles").  It's easy to write "x = y * 1.5" instead of "x = y * 1.5f",
>> and give your cpu a great deal more work.
> This SPE supports double. I think it is enabled by -mfloat-gprs=double
> (or maybe also by default by the compiler configuration option --enable-e500_double,
> but I did not verify this yet).

Looking more carefully, I see you are correct.  I have only used the 
e500v1 core, which has only single-precision floating point SPE support.



For unsubscribe information see

More information about the crossgcc mailing list