[compiler-rt] [builtins] Support conversion between fp16 and fp128
This patch adds both extendhftf2 and trunctfhf2 to support conversion between half-precision and quad-precision floating-point values. They are enabled 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 promoted to 'float' for argument passing and 64-bit ARM supports floating-point convert precision to half as base armv8-a instruction. It means that although extendhfsf2, truncdfhf2 __truncsfhf2 will be built for 64-bit ARM, they will be never used in practice (compiler won't emit libcall to them). This patch does not change the ABI for 32-bit ARM, it will continue to pass _Float16 as uint16. Differential Revision: https://reviews.llvm.org/D91732
Loading
Please sign in to comment