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.