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.
||Obsolete. Details are available on request from ARM.
||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.
||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.
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.