https://gcc.gnu.org/pipermail/gcc-patches/2026-October/734316.html

Add a new target option -mfp64lib that links fp64lib (libfp64.a) as
the IEEE double back end instead of LibF7 (libgcc/config/avr/libf7/).

The implementation is supposed to be provided by the downstream
libraries like AVR-LibC, so this patch just adds a new command
line option that injects -lfp64 in the right place.  LibF7 weakens
all global symbols so that fp64lib -- which doesn't -- takes
precedence over the former.

Ok to apply?

Johann

--

gcc/
    * config/avr/avr.opt (-mfp64lib): New target option.
    * config/avr/avr.opt.urls: Rebuild.
    * config/avr/avrlibc.h (LIBGCC_SPEC) [%{mfp64lib}]: Add -lfp64.
    * doc/invoke.texi (AVR Options): Document -mfp64lib.
diff --git a/gcc/config/avr/avr.opt b/gcc/config/avr/avr.opt
index 4c81aa8df2c..c6a90a9c94d 100644
--- a/gcc/config/avr/avr.opt
+++ b/gcc/config/avr/avr.opt
@@ -204,6 +204,10 @@ mlong-double=
Target Joined RejectNegative Var(avropt_long_double) Init(0) Enum(avropt_bits_e) Save
 -mlong-double=<BITS>     Use <BITS> bits wide long double type.

+mfp64lib
+Target Var(avropt_fp64lib) Init(0)
+Use fp64lib as IEEE double implementation instead of libf7.
+
 nodevicelib
 Driver Target RejectNegative
 Do not link against the device-specific library lib<MCU>.a.
diff --git a/gcc/config/avr/avr.opt.urls b/gcc/config/avr/avr.opt.urls
index 0643d13ac60..a559de3549b 100644
--- a/gcc/config/avr/avr.opt.urls
+++ b/gcc/config/avr/avr.opt.urls
@@ -126,6 +126,9 @@ UrlSuffix(gcc/AVR-Options.html#index-mdouble)
 mlong-double=
 UrlSuffix(gcc/AVR-Options.html#index-mlong-double)

+mfp64lib
+UrlSuffix(gcc/AVR-Options.html#index-mfp64lib)
+
 nodevicelib
 UrlSuffix(gcc/AVR-Options.html#index-nodevicelib)

diff --git a/gcc/config/avr/avrlibc.h b/gcc/config/avr/avrlibc.h
index 3c6af29fce7..9076f390dfc 100644
--- a/gcc/config/avr/avrlibc.h
+++ b/gcc/config/avr/avrlibc.h
@@ -28,7 +28,7 @@ along with GCC; see the file COPYING3.  If not see

 #undef  LIBGCC_SPEC
 #define LIBGCC_SPEC                             \
-  "%{!mmcu=avr1:-lgcc -lm}"
+  "%{!mmcu=avr1:%{mfp64lib:-lfp64} -lgcc -lm}"

 #undef  STARTFILE_SPEC
 #define STARTFILE_SPEC                          \
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index 272ad0cb6f1..025859ac3b3 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -988,7 +988,7 @@ Objective-C and Objective-C++ Dialects}.
 @gccoptlist{-mmcu=@var{mcu}  -mabsdata  -maccumulate-args -masm-len-notes
 -mbranch-cost=@var{cost}  -mcvt  -mdemote-switch  -mfuse-add=@var{level}
 -mfuse-ifelse  -mfuse-move=@var{level}  -mfuse-move2
--mcall-prologues  -mgas-isr-prologues  -mint8  -mflmap
+-mcall-prologues  -mgas-isr-prologues  -mint8  -mflmap  -mfp64lib
 -mdouble=@var{bits}  -mlong-double=@var{bits}  -mno-call-main
 -mn_flash=@var{size}  -mfract-convert-truncate  -mno-interrupts
 -mmain-is-OS_task  -moptimize  -mrelax  -mpmem-wrap-around  -mprune-vectab
@@ -24434,6 +24434,10 @@ the @code{--with-double=} and @code{--with-long-double=} @w{@uref{https://gcc.gnu.org/install/configure.html#avr,,configure options}},
 and the same applies for the default values of the options.

+@opindex mfp64lib
+@item -mfp64lib
+Link fp64lib as the IEEE double back end instead of LibF7.
+
 @opindex mfract-convert-truncate
 @item -mfract-convert-truncate
Allow to use truncation instead of rounding towards zero for fractional fixed-point types.

Reply via email to