Floating Point

The Arm architecture provides high-performance and high-efficiency hardware support for floating-point operations in half-, single-, and double-precision arithmetic. It is fully IEEE-754 compliant with full software library support.

This page describes floating-support relative to Cortex-A and Cortex-R processors. For information relative to Cortex-M, please refer to our DSP for Cortex-M page.


Key applications

The floating-point data type is essential for a wide range of digital signal processing (DSP) applications. Many applications inherently benefit from the dynamic range and precision of floating-point to deal with large data sets or data sets with unpredictable range. Then it makes floating-point usage particularly suitable when computational accuracy is a critical requirement.

Examples of such applications are:

  • Automotive control applications
    • Powertrain
    • ABS, Traction control & active suspension
  • 3D Graphics
    • Digital consumer products
    • Set-top boxes and games consoles
  • Imaging
    • Laser printers, still digital cameras, and digital video cameras
  • Industrial control systems
    • Motion controls

Specification

Armv8-A/R architecture

The Armv8 architecture supports single-precision (32-bit) and double-precision (64-bit) floating-point data types and arithmetic as defined by the IEEE 754 floating-point standard. It also supports the half-precision (16-bit) floating-point data type for data storage, by supporting conversions between single-precision and half-precision data types and double-precision and half-precision data types. When Armv8.2-FP16 is implemented, it also supports the half-precision floating-point data type for data-processing operations. 

The Advanced SIMD (NEON) instructions provide packed Single Instruction Multiple Data (SIMD) and single-element scalar operations, and support:

• Single-precision and double-precision arithmetic in AArch64 state  

• Single-precision arithmetic only in AArch32 state

• When Armv8.2-FP16 is implemented, half-precision arithmetic is supported in AArch64 and AArch32 states

Floating-point support in AArch64 state SIMD is IEEE 754-2008 compliant with:

• Configurable rounding modes

• Configurable Default NaN behavior

• Configurable Flush-to-zero behavior

Floating-point computation using AArch32 Advanced SIMD instructions remains unchanged from Armv7.

Scalable Vector Extension (SVE) for Armv8-A

SVE is the next-generation SIMD instruction set for AArch64 that introduces the architectural features for High Performance Computing (HPC). SVE extends the floating-point capability of the Armv8-A architecture targeting A64 ISA only.

Armv7-A/R and previous architectures

Prior to Armv8-A/R, the Arm architecture distinguishes between scalar (VFP) and Advanced SIMD extension (NEON) floating-point support.

Up to Armv7-A/R architecture (included), floating-point architecture is a floating-point coprocessor extension to the instruction set architectures. For historic reasons, the Floating-point Extension is also called the VFP Extension.

VFPv1 Obsolete. Details are available on request from Arm. 
VFPv2 An optional extension to:
the Arm instruction set in the Armv5TE, Armv5TEJ, Armv6, and Armv6K architectures
the Arm and Thumb instruction sets in the Armv6T2 architecture
VFPv3 An optional extension to the Arm, Thumb, and ThumbEE instruction sets in the Armv7-A and Armv7-R profiles. VFPv3 can be implemented with either 32 or 16 doubleword registers. VFPv3U is a variant of VFPv3 that supports the trapping of floating-point exceptions to support code.
VFPv3 with Half-precision Extension
VFPv3 and VFPv3U can be extended by the optional Half-precision Extension, that provides conversion functions in both directions between half-precision floating-point and single-precision floating-point.
VFPv4 An optional extension to the Arm, Thumb, and ThumbEE instruction sets in the Armv7-A and Armv7-R profiles. VFPv4U is a variant of VFPv4 that supports the trapping of floating-point exceptions to support code. VFPv4 and VFPv4U add both the Half-precision Extension and the fused multiply-add instructions to the features of VFPv3. VFPv4 can be implemented with either 32 or 16 doubleword registers.

The Armv7-A/R Advanced SIMD extension (NEON) offers single-precision floating-point support and performs IEEE 754 floating-point arithmetic with the following restrictions:

• Denormalized numbers are flushed to zero, see Flush-to-zero on page A1-51

• Only default NaNs are supported

• The Round to Nearest rounding mode is used

• Untrapped floating-point exception handling is used for all floating-point exceptions

See section A1.4 Architecture extensions of Arm Architecture Reference Manual Armv7-A and Armv7-R edition for a full description.


Related tools

Arm DS-5 Development Studio provides an end-to-end suite of tools for C/C++ software development for Arm-based platforms. DS-5 fully supports Arm floating-point architecture for programming and debugging.