gcc/libgcc/config/avr/t-avrlibc
Georg-Johann Lay f30dd60766 Implement 64-bit double functions.
gcc/
	PR target/92055
	* config.gcc (tm_defines) [target=avr]: Support --with-libf7,
	--with-double-comparison.
	* doc/install.texi: Document them.
	* config/avr/avr-c.c (avr_cpu_cpp_builtins)
	<WITH_LIBF7_LIBGCC, WITH_LIBF7_MATH, WITH_LIBF7_MATH_SYMBOLS>
	<WITH_DOUBLE_COMPARISON>: New built-in defines.
	* doc/invoke.texi (AVR Built-in Macros): Document them.
	* config/avr/avr-protos.h (avr_float_lib_compare_returns_bool): New.
	* config/avr/avr.c (avr_float_lib_compare_returns_bool): New function.
	* config/avr/avr.h (FLOAT_LIB_COMPARE_RETURNS_BOOL): New macro.
libgcc/
	PR target/92055
	* config.host (tmake_file) [target=avr]: Add t-libf7,
	t-libf7-math, t-libf7-math-symbols as specified by --with-libf7=.
	* config/avr/t-avrlibc: Don't copy libgcc.a if there are modules
	depending on sizeof (double) or sizeof (long double).
	* config/avr/libf7: New folder.
libgcc/config/avr/libf7/
	PR target/92055
	* t-libf7: New file.
	* t-libf7-math: New file.
	* t-libf7-math-symbols: New file.
	* libf7-common.mk: New file.
	* libf7-asm-object.mk: New file.
	* libf7-c-object.mk: New file.
	* asm-defs.h: New file.
	* libf7.h: New file.
	* libf7.c: New file.
	* libf7-asm.sx: New file.
	* libf7-array.def: New file.
	* libf7-const.def: New file.
	* libf7-constdef.h: New file.
	* f7renames.sh: New script.
	* f7wraps.sh: New script.
	* f7-renames.h: New generated file.
	* f7-wraps.h: New generated file.

From-SVN: r279994
2020-01-08 09:31:07 +00:00

105 lines
2.5 KiB
Plaintext

# This file is used if not configured --with-avrlibc=no
#
# AVR-Libc comes with hand-optimized float routines.
# For historical reasons, these routines live in AVR-Libc
# and not in libgcc and use the same function names like libgcc.
# To get the best support, i.e. always use the routines from
# AVR-Libc, we remove these routines from libgcc.
#
# See also PR54461.
#
#
# Arithmetic:
# __addsf3 __subsf3 __divsf3 __mulsf3 __negsf2
#
# Comparison:
# __cmpsf2 __unordsf2
# __eqsf2 __lesf2 __ltsf2 __nesf2 __gesf2 __gtsf2
#
# Conversion:
# __fixsfdi __fixunssfdi __floatdisf __floatundisf
# __fixsfsi __fixunssfsi __floatsisf __floatunsisf
#
#
# These functions are contained in modules:
#
# _addsub_sf.o: __addsf3 __subsf3
# _mul_sf.o: __mulsf3
# _div_sf.o: __divsf3
# _negate_sf.o: __negsf2
#
# _compare_sf.o: __cmpsf2
# _unord_sf.o: __unordsf2
# _eq_sf.o: __eqsf2
# _ne_sf.o: __nesf2
# _ge_sf.o: __gesf2
# _gt_sf.o: __gtsf2
# _le_sf.o: __lesf2
# _lt_sf.o: __ltsf2
#
# _fixsfdi.o: __fixsfdi
# _fixunssfdi.o: __fixunssfdi
# _fixunssfsi.o: __fixunssfsi
# _floatdisf.o: __floatdisf
# _floatundisf.o: __floatundisf
# _sf_to_si.o: __fixsfsi
# _si_to_sf.o: __floatsisf
# _usi_to_sf.o: __floatunsisf
# SFmode
LIB2FUNCS_EXCLUDE += \
_addsub_sf \
_negate_sf \
_mul_sf _div_sf \
\
_compare_sf \
_unord_sf \
_eq_sf _ne_sf \
_gt_sf _ge_sf \
_lt_sf _le_sf \
\
_si_to_sf _sf_to_si \
_usi_to_sf _sf_to_usi \
_fixunssfsi _fixsfdi \
_fixunssfdi \
_floatdisf _floatundisf
ifeq (,$(WITH_LIBF7_MATH_SYMBOLS))
# No modules depend on __SIZEOF_LONG_DOUBLE__ or __SIZEOF_DOUBLE__
# which means we might have an opportunity to copy libgcc.a.
# WITH_LIBF7_MATH_SYMBOLS is set by libf7/t-libf7-math-symbols.
ifneq (,$(findstring avr,$(MULTISUBDIR)))
# We are not in the avr2 (default) subdir, hence copying will work.
# In default dir, copying won'twork because the default multilib is
# built after all the others.
ifneq (,$(findstring double,$(MULTISUBDIR)))
# We are in double{32|64}/libgcc or long-double{32|64}/libgcc:
# Just copy from the [long ]double=float multilib; we would remove any DFmode
# bits from this multilib variant, anyway, because the current assumption
# is that avr-libc hosts *all* the IEEE-double stuff.
LIB2FUNCS_EXCLUDE := %
LIB1ASMFUNCS :=
libgcc-objects :=
libgcov-objects :=
objects :=
t-copy-libgcc.dep: $(srcdir)/config/avr/t-copy-libgcc
-rm -f libgcc.a
-rm -f libgcov.a
cp $< $@
libgcc.a libgcov.a libgcc_tm.h: t-copy-libgcc.dep
Makefile: t-copy-libgcc.dep
endif
endif
endif