On 01/03/2022 16:23, Kinsey Moore wrote:
Hi,

I'm looking at working on Cortex-R5F support for RTEMS, but it seems as if latest GCC supports the Cortex-R5. This R5 has implicit FPU support which would make it really R5F. The ARM reference page on this core (https://developer.arm.com/Processors/Cortex-R5) specifies that the FPU is optional. I see that the FPU support can probably be disabled using the nofp option to achieve Cortex-R5 support, but I was wondering why this is handled differently from the Cortex-R4[F] support since that is broken out into two different CPU entries in gcc/config/arm/arm-cpus.in. It appears that R7 and R8 are handled the same way as R5.

Is the R4/R4F just the legacy way of handling this and R5/7/8 are the new way?


Arm no-longer gives distinct product names for products that come in multiple guises. Another example of this is that many armv8-a products have an optional crypto unit but have the same product name.

So to answer your question more directly, the -mcpu=cortex-r5 will by default be considered to have an FPU, provided that the compiler was built with --with-fpu=auto (the default). If you specify --with-float-abi=soft, then even if the product has an FPU, or for some cases a SIMD unit, then these will never be used. So I'd recommend:

For FP support: -mcpu=cortex-r5 -mfloat-abi=hard
For no FP support: -mcpu=cortex-r5 -mfloat-abi=soft

There's also a mid-way variant of -mcpu=cortex-r5 -mfloat-abi=softfp, which would use the FP hardware but use the soft-float calling conventions; this code is abi-compatible with the no-fp variant above.

HTH,
R.


Thanks,

Kinsey

Reply via email to