Difference between revisions of "GCC floating-point options"

From SEGGER Wiki
Jump to: navigation, search
m
m
Line 32: Line 32:
 
|-
 
|-
 
| ''neon'' || Enables the ARMv7 VFPv3 floating-point extension and the Advanced SIMD extension.
 
| ''neon'' || Enables the ARMv7 VFPv3 floating-point extension and the Advanced SIMD extension.
  +
|-
  +
| ''neon-fp16'' || Enables the ARMv7 VFPv3 floating-point extension, including the optional half-precision extensions, and the Advanced SIMD extension.
 
|-
 
|-
 
| ''vfpv4'' || Enables the ARMv7 VFPv4 floating-point extension.
 
| ''vfpv4'' || Enables the ARMv7 VFPv4 floating-point extension.
Line 40: Line 42:
 
|-
 
|-
 
| ''fpv4-sp-d16'' || Enables the ARMv7 FPv4-SP-D16 floating-point extension.
 
| ''fpv4-sp-d16'' || Enables the ARMv7 FPv4-SP-D16 floating-point extension.
  +
|-
  +
| ''fpv5-d16'' || Enables the ARMv7 FPv5-D16 floating-point extension.
  +
|-
  +
| ''fpv5-sp-d16'' || Enables the ARMv7 FPv5-SP-D16 floating-point extension.
 
|-
 
|-
 
| ''fp-armv8'' || Enables the ARMv8 floating-point extension.
 
| ''fp-armv8'' || Enables the ARMv8 floating-point extension.

Revision as of 15:33, 30 March 2020

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:
none Prevents the compiler from using hardware-based floating-point functions.
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.
neon Enables the ARMv7 VFPv3 floating-point extension and the Advanced SIMD extension.
neon-fp16 Enables the ARMv7 VFPv3 floating-point extension, including the optional half-precision extensions, and the Advanced SIMD extension.
vfpv4 Enables the ARMv7 VFPv4 floating-point extension.
vfpv4-d16 Enables the ARMv7 VFPv4-D16 floating-point extension.
neon-vfpv4 Enables the ARMv7 VFPv4 floating-point extension and the Advanced SIMD extension.
fpv4-sp-d16 Enables the ARMv7 FPv4-SP-D16 floating-point extension.
fpv5-d16 Enables the ARMv7 FPv5-D16 floating-point extension.
fpv5-sp-d16 Enables the ARMv7 FPv5-SP-D16 floating-point extension.
fp-armv8 Enables the ARMv8 floating-point extension.
neon-fp-armv8 Enables the ARMv8 floating-point extension and the Advanced SIMD extensions.
crypto-neon-fp-armv8 Enables the ARMv8 floating-point extension, the cryptographic 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 typically 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.