Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

gcc options for a freescale iMX6q ARM processor

Tags:

gcc

arm

toolchain

I am trying to figure out gcc options for a toolchain I am setting up, for development board: Sabre-lite which is based around the Freescale's iMX6q quad processor.

Now I know that iMX6 is basically a cortex-a9 processor that has co-processors vfpv3 and neon, and also vector graphics, 2D and even 3D engines.

However, the release notes and use guide docs haven't been too clear on how to enable any options that can be enabled in gcc.

In fact the options that I can 'play' with are the following.

-march= armv7-a                - ok this one is pretty obvious.
-mfpu= vfpv3/neon              - i can use only the vfpv3 co-processor, or both (respectively, depends on option)
-mfloat-abi=softfp/soft/hard   - I guess I can choose hard here, as there is hardware for fp operations
-mcpu=cortex-a9                - is it option even necessary? it is not clear if it just an alias for -march or something else.

Are there other options I should enable? Why does the toolchain have as default options to build the linux kernel/uboot/packages the following:

-march= armv7-a -mfpu= vfpv3 -mfloat-abi=softfp

Thank you for your help

like image 512
nass Avatar asked Feb 19 '13 16:02

nass


2 Answers

Use -mthumb -O3 -march=armv7-a -mcpu=cortex-a9 -mtune=cortex-a9 -mfpu=neon -mvectorize-with-neon-quad -mfloat-abi=softfp. Note that by default the compiler will not vectorize floating-point operating using NEON because NEON does not support denormal numbers. If you are fine with some loss of precision you can make gcc use NEON for floating-point by adding -ffast-math switch.

like image 156
Marat Dukhan Avatar answered Oct 07 '22 14:10

Marat Dukhan


I can't answer everything, but that '--softfp' means to use the FPU, but maintain compatibility with code that doesn't.

Slightly outdated ARM FP document

like image 34
Jonathan Avatar answered Oct 07 '22 13:10

Jonathan