# <!-- var kmNextPage = "armcc_chr1359124234516.htm"; var kmPrevPage = "armcc_chr1359124233939.htm"; var kmNextPageTitle = "Floating-point linkage and computational requireme"; var kmPrevPageTitle = "Types of floating-point linkage"; var kmBreadCrumbs = "<a href=\"default.htm\">Home</a> &raquo; <a href=\"armcc_chr1359124220881.htm\">Compiler Coding Practices</a> &raquo; Compiler options for floating-point linkage and co"; kmSetupPaging (); kmNavButtons(); //--> Compiler options for floating-point linkage and computations

## 4.51 Compiler options for floating-point linkage and computations

Compiler options determine the type of floating-point linkage and floating-point computations.

By specifying the type of floating-point linkage and floating-point computations you require, you can determine, from the following table, the associated compiler command-line options that are available.

Table 4-13 Compiler options for floating-point linkage and floating-point computations

Hardware FP linkage Software FP linkage Hardware FP coprocessor Software FP library (fplib) Compiler options
No Yes No Yes
`--fpu=softvfp`
`--apcs=/softfp`
No Yes Yes No
`--fpu=softvfp+vfpv2`
`--fpu=softvfp+vfpv3`
`--fpu=softvfp+vfpv3_fp16`
`--fpu=softvfp+vfpv3_d16`
`--fpu=softvfp+vfp3_d16_fp16`
`--fpu=softvfp+vfpv4`
`--fpu=softvfp+vfpv4_d16`
`--fpu=softvfp+fpv4-sp`
`--apcs=/softfp`
Yes No Yes No
`--fpu=vfp`
`--fpu=vfpv2`
`--fpu=vfpv3`
`--fpu=vfpv3_fp16`
`--fpu=vfpv3_dp16`
`--fpu=vfpv3_d16_fp16`
`--fpu=vpfv4`
`--fpu=vfpv4_d16`
`--fpu=fpv4-sp`
`--apcs=/hardfp`
`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.

### Note

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. 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 must know the VFP architecture version implemented in the target processor. 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).