| |||
| Home > Compiler Coding Practices > Compiler options for floating-point linkage and computations | |||
By specifying the type of floating-point linkage and floating-point computations you require, you can determine, from Table 19, the associated compiler command-line options that are available.
Table 19. Compiler options for floating-point linkage and floating-point computations
| Linkage | Computations | ||||
|---|---|---|---|---|---|
| Hardware FP linkage | Software FP linkage | Hardware FP coprocessor | Software FP library (fplib) | Compiler options | |
| No | Yes | No | Yes |
|
|
| No | Yes | Yes | No |
|
|
| Yes | No | Yes | No |
|
|
softvfp specifies software floating-point
linkage. When software floating-point linkage is used, either:
the calling function and the called function must
be compiled using one of the options --softvfp, --fpu
softvfp+vfpv2, --fpu softvfp+vfpv3, --fpu
softvfp+vfpv3_fp16, softvfp+vfpv3_d16, softvfp+vfpv3_d16_fp16, softvfp+vfpv4, softvfp+vfpv4_d16,
or softvfp+fpv4-sp
the calling function and the called function must
be declared using the __softfp keyword.
Each of the options --fpu softvfp, --fpu
softvfp+vfpv2,--fpu softvfp+vfpv3, --fpu softvfp+vfpv3_fp16, --fpu
softvfpv3_d16, --fpu softvfpv3_d16_fp16, --fpu
softvfp+vfpv4, softvfp+vfpv4_d16 and softvfp+fpv4-sp specify
software floating-point linkage across the whole file. In contrast,
the __softfp keyword enables software floating-point
linkage to be specified on a function by function basis.
Rather than having separate compiler options to select the
type of floating-point linkage you require and the type of floating-point
computations you require, you use one compiler option, --fpu,
to select both. (See Table 19.)
For example, --fpu=softvfp+vfpv2 selects software floating-point
linkage, and a hardware coprocessor for the
computations. Whenever you use softvfp, you are
specifying software floating-point linkage.
If you use the --fpu option, you need to
know the VFP architecture version implemented in the target core.
An alternative to --fpu=softvfp+... is --apcs=/softfp.
This gives software linkage with whatever VFP architecture version
is implied by --cpu. --apcs=/softfp and --apcs=/hardfp are
alternative ways of requesting the integer or floating-point variant
of the Procedure Call Standard for the ARM Architecture (AAPCS).
To use hardware floating-point linkage when targeting ARM
Linux, you must explicitly specify a --fpu option
that implies hardware floating-point linkage, for example, --fpu=vfpv3,
or compile with --apcs=/hardfp. Hardware floating-point
linkage is not supported by the ARM Linux ABI. The compiler issues
a warning to indicate this.