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:
parent
cf55f8329e
commit
f16c4324a7
3 changed files with 41 additions and 1 deletions
|
@ -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"
|
||||
|
|
|
@ -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)
|
||||
|
|
38
cmake/compiler/clang/target_arm.cmake
Normal file
38
cmake/compiler/clang/target_arm.cmake
Normal 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})
|
Loading…
Add table
Add a link
Reference in a new issue