# 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
	imply FPU
	imply FPU_SHARING
	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
	select CPU_HAS_FPU_DOUBLE_PRECISION
	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.
