https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120897

            Bug ID: 120897
           Summary: __aeabi_d2h/__aeabi_d2h_alt function not implemented
                    in libgcc
           Product: gcc
           Version: 16.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: pinskia at gcc dot gnu.org
  Target Milestone: ---
            Target: arm*-*-*eabi

GCC defines its own set of functions for conversions between half float and
float/double:

      set_conv_libfunc (trunc_optab, HFmode, SFmode,
                        (arm_fp16_format == ARM_FP16_FORMAT_IEEE
                         ? "__gnu_f2h_ieee"
                         : "__gnu_f2h_alternative"));
      set_conv_libfunc (sext_optab, SFmode, HFmode,
                        (arm_fp16_format == ARM_FP16_FORMAT_IEEE
                         ? "__gnu_h2f_ieee"
                         : "__gnu_h2f_alternative"));

      set_conv_libfunc (trunc_optab, HFmode, DFmode,
                        (arm_fp16_format == ARM_FP16_FORMAT_IEEE
                         ? "__gnu_d2h_ieee"
                         : "__gnu_d2h_alternative"));


The
https://github.com/ARM-software/abi-aa/blob/c51addc3dc03e73a016a1e4edf25440bcac76431/rtabi32/rtabi32.rst#standard-conversions-between-floating-types


Specifies the following functions:
__aeabi_f2h/__aeabi_f2h_alt
__aeabi_h2f/__aeabi_h2f_alt
__aeabi_d2h/__aeabi_d2h_alt

libgcc does not have an implemention for these though.

This not implementation of these causes problems when compiling some code with
LLVM and then linking with GCC. Since LLVM uses the ABI specified names while
GCC has its own.

A patch was posted to fix part of this but it looks like it never went in:
https://gcc.gnu.org/legacy-ml/gcc-patches/2012-07/msg00902.html

See https://reviews.llvm.org/D94557 also.

Reply via email to