GCC floating-point options

From SEGGER Wiki
Jump to: navigation, search

The GNU C Compiler produces binaries with several options in regards to floating-point operations:

Compiler flag Description
-mfloat-abi=<value>
(-mhard-float)
(-msoft-float)
Specifies which floating-point ABI to use. Permissible values are:
soft Full software floating-point.
The compiler will not generate any FPU instructions and the -mfpu= option is ignored.
Function calls are generated by passing floating-point arguments in integer registers.
softfp Hardware floating-point using the soft floating-point ABI.
The compiler will generate FPU instructions according to the -mfpu= option.
Function calls are generated by passing floating-point arguments in integer registers.
This means soft and softfp code can be intermixed.
hard Full hardware floating point.
The compiler will generate FPU instructions according to the -mfpu= option.
Function calls are generated by passing floating-point arguments in FPU registers.

The hard-float and soft-float ABIs are not link-compatible. You must compile your entire program with the same ABI and link with a compatible set of libraries.
-mhard-float is equivalent to -mfloat-abi=hard.
-msoft-float is equivalent to -mfloat-abi=soft.

-mfpu=<value>
(-mfp=<value>)
(-mfpe=<value>)
Specifies the available floating-point hardware on the target. Permissible values include:
vfpv3 Enables the ARMv7 VFPv3 floating-point extension.
vfpv3-d16 Enables the ARMv7 VFPv3-D16 floating-point extension.
vfpv3-fp16 Enables the ARMv7 VFPv3 floating-point extension, including the optional half-precision extensions.
vfpv3-d16-fp16 Enables the ARMv7 VFPv3-D16 floating-point extension, including the optional half-precision extensions.
vfpv4 Enables the ARMv7 VFPv4 floating-point extension.
vfpv4-d16 Enables the ARMv7 VFPv4-D16 floating-point extension.
fpv4-sp-d16 Enables the ARMv7 FPv4-SP-D16 floating-point extension.
neon-vfpv4 Enables the ARMv7 VFPv4 floating-point extension and the Advanced SIMD extension.
etc.

Has no effect when -mfloat-abi=soft is specified.
-mfp= and -mfpe= are synonyms for -mfpu=.

embOS for GCC is shipped with distinct sets of libraries for each floating-point ABI. While there is no immediate effect on embOS itself, this allows for compalibity with all applications and third-party libraries customers may utilize.