clang: Don't specify FP16 format

Support for 16 bit floats is enabled by default in Clang [1].
The ARM alternative format is not supported, so __fp16 always uses
IEEE 754-2008 format [2].

[1] https://github.com/llvm/llvm-project/blob/main/llvm/lib/Target/ARM/ARMAsmPrinter.cpp#L750-L755
[2] https://clang.llvm.org/docs/LanguageExtensions.html#half-precision-floating-point

Fixes: #55562

Signed-off-by: Patryk Duda <pdk@semihalf.com>
This commit is contained in:
Patryk Duda 2023-07-17 16:23:55 +02:00 committed by Carles Cufí
commit f16c4324a7
3 changed files with 41 additions and 1 deletions

View file

@ -312,6 +312,8 @@ config FP16_ALT
so that this format can represent normalized values in the range of
2^(-14) to 131008.
Please note that Clang doesn't support the ARM alternative format.
endchoice
rsource "cortex_m/Kconfig"

View file

@ -29,7 +29,7 @@ if(NOT "${ARCH}" STREQUAL "posix")
-fshort-enums
)
include(${ZEPHYR_BASE}/cmake/compiler/gcc/target_arm.cmake)
include(${ZEPHYR_BASE}/cmake/compiler/clang/target_arm.cmake)
endif()
foreach(file_name include/stddef.h)

View file

@ -0,0 +1,38 @@
# SPDX-License-Identifier: Apache-2.0
set(ARM_C_FLAGS)
list(APPEND ARM_C_FLAGS -mcpu=${GCC_M_CPU})
if(CONFIG_COMPILER_ISA_THUMB2)
list(APPEND ARM_C_FLAGS -mthumb)
endif()
list(APPEND ARM_C_FLAGS -mabi=aapcs)
if(CONFIG_FPU)
list(APPEND ARM_C_FLAGS -mfpu=${GCC_M_FPU})
if(CONFIG_DCLS AND NOT CONFIG_FP_HARDABI)
# If the processor is equipped with VFP and configured in DCLS topology,
# the FP "hard" ABI must be used in order to facilitate the FP register
# initialisation and synchronisation.
set(FORCE_FP_HARDABI TRUE)
endif()
if (CONFIG_FP_HARDABI OR FORCE_FP_HARDABI)
list(APPEND ARM_C_FLAGS -mfloat-abi=hard)
elseif(CONFIG_FP_SOFTABI)
list(APPEND ARM_C_FLAGS -mfloat-abi=softfp)
endif()
endif()
if(CONFIG_FP16)
# Clang only supports IEEE 754-2008 format for __fp16. It's enabled by
# default, so no need to do anything when CONFIG_FP16_IEEE is selected.
if(CONFIG_FP16_ALT)
message(FATAL_ERROR "Clang doesn't support ARM alternative format for FP16")
endif()
endif()
list(APPEND TOOLCHAIN_C_FLAGS ${ARM_C_FLAGS})
list(APPEND TOOLCHAIN_LD_FLAGS NO_SPLIT ${ARM_C_FLAGS})