arch: arm: Add unified floating-point configuration symbols

This commit adds the unified floating-point configuration symbols for
the ARM architectures.

These configuration symbols allow specification of the floating-point
coprocessors, such as VFP (also known as FP for Cortex-M) and NEON,
for the ARM architectures.

Signed-off-by: Stephanos Ioannidis <root@stephanos.io>
This commit is contained in:
Stephanos Ioannidis 2020-03-23 10:59:50 +09:00
commit 5181c61797
2 changed files with 202 additions and 0 deletions

View file

@ -55,5 +55,6 @@ config CODE_DATA_RELOCATION_SRAM
relocation.
rsource "core/aarch32/Kconfig"
rsource "core/aarch32/Kconfig.vfp"
endmenu

View file

@ -0,0 +1,201 @@
# SPDX-License-Identifier: Apache-2.0
# Copyright (c) 2022 Lexmark International, Inc.
# ARM architecture VFP configuration options
# Math coprocessor symbols; these should be selected by the CPU symbol to
# indicate that the CPU core can be configured with the specified
# coprocessor(s).
config CPU_HAS_VFP
bool
select CPU_HAS_FPU
help
This option signifies the support for a Vectored Floating-Point (VFP)
coprocessor.
config CPU_HAS_NEON
bool
select CPU_HAS_FPU
help
This option signifies the support for a NEON (Advanced SIMD) coprocessor.
# VFP type symbols; these should be selected by the SoC symbol to specify the
# type of the VFP core instantiated by the SoC.
config VFP_SP_D16
bool
select CPU_HAS_VFP
select VFP_FEATURE_SINGLE_PRECISION
select VFP_FEATURE_REGS_S32_D16
help
This option signifies the use of a VFP floating-point coprocessor
that supports only single-precision operations with 16 double-word
registers.
config VFP_SP_D16_FP16
bool
select CPU_HAS_VFP
select VFP_FEATURE_HALF_PRECISION
select VFP_FEATURE_SINGLE_PRECISION
select VFP_FEATURE_REGS_S32_D16
help
This option signifies the use of a VFP floating-point coprocessor
that supports half- and single-precision operations with 16
double-word registers.
config VFP_SP_D16_FP16_FMAC
bool
select CPU_HAS_VFP
select VFP_FEATURE_HALF_PRECISION
select VFP_FEATURE_SINGLE_PRECISION
select VFP_FEATURE_FMAC
select VFP_FEATURE_REGS_S32_D16
help
This option signifies the use of a VFP floating-point coprocessor
that supports half- and single-precision operations (including fused
multiply-accumulate) with 16 double-word registers.
config VFP_DP_D16
bool
select CPU_HAS_VFP
select VFP_FEATURE_SINGLE_PRECISION
select VFP_FEATURE_DOUBLE_PRECISION
select VFP_FEATURE_REGS_S32_D16
help
This option signifies the use of a VFP floating-point coprocessor
that supports single- and double-precision operations with 16
double-word registers.
config VFP_DP_D16_FP16
bool
select CPU_HAS_VFP
select VFP_FEATURE_HALF_PRECISION
select VFP_FEATURE_SINGLE_PRECISION
select VFP_FEATURE_DOUBLE_PRECISION
select VFP_FEATURE_REGS_S32_D16
help
This option signifies the use of a VFP floating-point coprocessor
that supports half-, single- and double-precision operations with 16
double-word registers.
config VFP_DP_D16_FP16_FMAC
bool
select CPU_HAS_VFP
select VFP_FEATURE_HALF_PRECISION
select VFP_FEATURE_SINGLE_PRECISION
select VFP_FEATURE_DOUBLE_PRECISION
select VFP_FEATURE_FMAC
select VFP_FEATURE_REGS_S32_D16
help
This option signifies the use of a VFP floating-point coprocessor
that supports half-, single- and double-precision operations
(including fused multiply-accumulate) with 16 double-word registers.
config VFP_U_DP_D16_FP16_FMAC
bool
select CPU_HAS_VFP
select VFP_FEATURE_HALF_PRECISION
select VFP_FEATURE_SINGLE_PRECISION
select VFP_FEATURE_DOUBLE_PRECISION
select VFP_FEATURE_FMAC
select VFP_FEATURE_REGS_S32_D16
select VFP_FEATURE_TRAP
help
This option signifies the use of a VFP floating-point coprocessor
that supports half-, single-, double-precision operations (including
fused multiply-accumulate) and floating-point exception trapping with 16
double-word registers.
config VFP_DP_D32_FP16_FMAC
bool
select CPU_HAS_VFP
select VFP_FEATURE_HALF_PRECISION
select VFP_FEATURE_SINGLE_PRECISION
select VFP_FEATURE_DOUBLE_PRECISION
select VFP_FEATURE_FMAC
select VFP_FEATURE_REGS_S64_D32
help
This option signifies the use of a VFP floating-point coprocessor
that supports half-, single- and double-precision operations
(including fused multiply-accumulate) with 32 double-word registers.
config VFP_U_DP_D32_FP16_FMAC
bool
select CPU_HAS_VFP
select VFP_FEATURE_HALF_PRECISION
select VFP_FEATURE_SINGLE_PRECISION
select VFP_FEATURE_DOUBLE_PRECISION
select VFP_FEATURE_FMAC
select VFP_FEATURE_REGS_S64_D32
select VFP_FEATURE_TRAP
help
This option signifies the use of a VFP floating-point coprocessor
that supports half-, single-, double-precision operations (including
fused multiply-accumulate) and floating-point exception trapping with 32
double-word registers.
if CPU_HAS_VFP
# VFP feature symbols; these are the helper symbols used by the floating-point
# support code to resolve the supported VFP features.
config VFP_FEATURE_HALF_PRECISION
bool
help
This option signifies that the VFP coprocessor supports
half-precision operations (half-precision extension).
config VFP_FEATURE_SINGLE_PRECISION
bool
help
This option signifies that the VFP coprocessor supports
single-precision operations.
config VFP_FEATURE_DOUBLE_PRECISION
bool
help
This option signifies that the VFP coprocessor supports
double-precision operations.
config VFP_FEATURE_VECTOR
bool
help
This option signifies that the VFP coprocessor supports vector
operations.
config VFP_FEATURE_FMAC
bool
help
This option signifies that the VFP coprocessor supports the fused
multiply-accumulate operations.
config VFP_FEATURE_REGS_S32_D16
bool
help
This option signifies that the VFP coprocessor implements 16
double-precision (32 single-precision) floating-point registers.
config VFP_FEATURE_REGS_S64_D32
bool
help
This option signifies that the VFP coprocessor implements 32
double-precision (64 single-precision) floating-point registers.
config VFP_FEATURE_TRAP
bool
help
This option signifies that the VFP coprocessor supports the trapping
of floating-point exceptions to allow software implementation of
the unsupported VFP instructions.
endif # CPU_HAS_VFP
# Advanced SIMD type symbols; these should be selected by the SoC symbol to
# specify the type of the VFP core instantiated by the SoC.
config NEON
bool
select CPU_HAS_NEON
help
This option signifies the use of a NEON Advanced SIMD coprocessor.