This patch adds both extendhftf2 and trunctfhf2 to support conversion between half-precision and quad-precision floating-point values. They are built iff the compiler supports _Float16. Some notes on ARM plaforms: while fp16 is supported on all architectures, _Float16 is supported only for 32-bit ARM, 64-bit ARM, and SPIR (as indicated by clang/docs/LanguageExtensions.rst). Also, fp16 is a storage format and 64-bit ARM supports floating-point convert precision to half as base armv8-a instruction. This patch does not change the ABI for 32-bit ARM, it will continue to pass _Float16 as uint16. This re-enabled revert done by https://reviews.llvm.org/rGb534beabeed3ba1777cd0ff9ce552d077e496726 Differential Revision: https://reviews.llvm.org/D92242
24 lines
679 B
C
24 lines
679 B
C
//===-- lib/extendhftf2.c - half -> quad conversion ---------------*- C -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is dual licensed under the MIT and the University of Illinois Open
|
|
// Source Licenses. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#define QUAD_PRECISION
|
|
#include "fp_lib.h"
|
|
|
|
#if defined(CRT_HAS_128BIT) && defined(CRT_LDBL_128BIT) && \
|
|
defined(COMPILER_RT_HAS_FLOAT16)
|
|
#define SRC_HALF
|
|
#define DST_QUAD
|
|
#include "fp_extend_impl.inc"
|
|
|
|
COMPILER_RT_ABI long double __extendhftf2(_Float16 a) {
|
|
return __extendXfYf2__(a);
|
|
}
|
|
|
|
#endif
|