diff options
Diffstat (limited to 'gcc-4.9/libgcc/config/avr/t-avr')
-rw-r--r-- | gcc-4.9/libgcc/config/avr/t-avr | 277 |
1 files changed, 277 insertions, 0 deletions
diff --git a/gcc-4.9/libgcc/config/avr/t-avr b/gcc-4.9/libgcc/config/avr/t-avr new file mode 100644 index 000000000..461304706 --- /dev/null +++ b/gcc-4.9/libgcc/config/avr/t-avr @@ -0,0 +1,277 @@ +LIB1ASMSRC = avr/lib1funcs.S +LIB1ASMFUNCS = \ + _mulqi3 \ + _mulhi3 \ + _mulqihi3 _umulqihi3 \ + _mulpsi3 _mulsqipsi3 \ + _mulhisi3 \ + _umulhisi3 \ + _usmulhisi3 \ + _muluhisi3 \ + _mulshisi3 \ + _mulsi3 \ + _udivmodqi4 \ + _divmodqi4 \ + _udivmodhi4 \ + _divmodhi4 \ + _divmodpsi4 _udivmodpsi4 \ + _udivmodsi4 \ + _divmodsi4 \ + _divdi3 _udivdi3 \ + _muldi3 _muldi3_6 \ + _mulsidi3 _umulsidi3 \ + _udivmod64 \ + _negsi2 _negdi2 \ + _prologue \ + _epilogue \ + _exit \ + _cleanup \ + _tablejump \ + _tablejump_elpm \ + _load_3 _load_4 \ + _xload_1 _xload_2 _xload_3 _xload_4 \ + _movmemx \ + _copy_data \ + _clear_bss \ + _ctors \ + _dtors \ + _ffssi2 \ + _ffshi2 \ + _loop_ffsqi2 \ + _ctzsi2 \ + _ctzhi2 \ + _clzdi2 \ + _clzsi2 \ + _clzhi2 \ + _paritydi2 \ + _paritysi2 \ + _parityhi2 \ + _popcounthi2 \ + _popcountsi2 \ + _popcountdi2 \ + _popcountqi2 \ + _bswapsi2 \ + _bswapdi2 \ + _ashldi3 _ashrdi3 _lshrdi3 _rotldi3 \ + _adddi3 _adddi3_s8 _subdi3 \ + _cmpdi2 _cmpdi2_s8 \ + _fmul _fmuls _fmulsu + +# Fixed point routines in avr/lib1funcs-fixed.S +LIB1ASMFUNCS += \ + _fractqqsf _fractuqqsf \ + _fracthqsf _fractuhqsf _fracthasf _fractuhasf \ + _fractsasf _fractusasf _fractsqsf _fractusqsf \ + \ + _fractsfqq _fractsfuqq \ + _fractsfhq _fractsfuhq _fractsfha _fractsfuha \ + _fractsfsq _fractsfusq _fractsfsa _fractsfusa \ + _mulqq3 \ + _mulhq3 _muluhq3 \ + _mulha3 _muluha3 _muluha3_round \ + _mulsa3 _mulusa3 \ + _usmuluha3 _ssmulha3 \ + _usmulusa3 _ssmulsa3 \ + _divqq3 _udivuqq3 _divqq_helper \ + _divhq3 _udivuhq3 \ + _divha3 _udivuha3 \ + _divsa3 _udivusa3 \ + _clr_8 \ + _ssneg_2 _ssneg_4 _ssneg_8 \ + _ssabs_1 _ssabs_2 _ssabs_4 _ssabs_8 \ + _ssadd_8 _sssub_8 \ + _usadd_8 _ussub_8 \ + _mask1 _ret \ + _roundqq3 _rounduqq3 \ + _round_s2 _round_u2 _round_2_const _addmask_2 \ + _round_s4 _round_u4 _round_4_const _addmask_4 \ + _round_x8 \ + _rounddq3 _roundudq3 \ + _roundda3 _rounduda3 \ + _roundta3 _rounduta3 \ + + +LIB2FUNCS_EXCLUDE = \ + _moddi3 _umoddi3 \ + _clz \ + _clrsbdi2 \ + + +# We do not have the DF type. +# Most of the C functions in libgcc2 use almost all registers, +# so use -mcall-prologues for smaller code size. +HOST_LIBGCC2_CFLAGS += -DDF=SF -Dinhibit_libc -mcall-prologues -Os + +# Extra 16-bit integer functions. +intfuncs16 = _absvXX2 _addvXX3 _subvXX3 _mulvXX3 _negvXX2 _clrsbXX2 + +hiintfuncs16 = $(subst XX,hi,$(intfuncs16)) +siintfuncs16 = $(subst XX,si,$(intfuncs16)) + +iter-items := $(hiintfuncs16) +iter-labels := $(siintfuncs16) +iter-sizes := $(patsubst %,2,$(siintfuncs16)) $(patsubst %,2,$(hiintfuncs16)) + + +include $(srcdir)/empty.mk $(patsubst %,$(srcdir)/siditi-object.mk,$(iter-items)) +libgcc-objects += $(patsubst %,%$(objext),$(hiintfuncs16)) + +ifeq ($(enable_shared),yes) +libgcc-s-objects += $(patsubst %,%_s$(objext),$(hiintfuncs16)) +endif + +### + +conv_XY=$(conv)$(mode1)$(mode2) +func_X=$(func)$(mode) + +# Compile C functions from lib2funcs.c and add them to libgcc.a. +# +# Some functions which are not performance.critical are more convenient +# to implement in C than in assembler. Most of them serve as implementation +# for AVR-specific builtins in the case where the address of a builtin +# function is taken or if there is no insn that implements the builtin. +# +# We don't use LIB2ADD because we want to iterate over the source for +# different modes, fixed-point suffixes, etc. See iter-labels and L_LABEL. +# iter-label will get one more underscore in order to avoid too short +# labels like -DLk and we use -DL_k instead. + +# Build roundFX functions from lib2funcs.c + +round_suffix := hr r lr uhr ur ulr \ + hk k uhk uk +round_funcs := $(foreach func,_round,\ + $(foreach mode,$(round_suffix),$(func_X))) + +iter-items := $(round_funcs) +iter-labels := $(round_suffix) +iter-flags := $(patsubst %,-DL_round,$(iter-items)) + +include $(srcdir)/empty.mk $(patsubst %,$(srcdir)/config/avr/lib2-object.mk,$(iter-items)) + +libgcc-objects += $(patsubst %,%$(objext),$(round_funcs)) + +# Build clrsbXX functions from lib2funcs.c + +clrsb_modes := qi di +clrsb_funcs := $(foreach func,_clrsb,\ + $(foreach mode,$(clrsb_modes),$(func_X))) + +iter-items := $(clrsb_funcs) +iter-labels := $(clrsb_funcs) +iter-flags := $(patsubst %,-DL_clrsb,$(iter-items)) + +include $(srcdir)/empty.mk $(patsubst %,$(srcdir)/config/avr/lib2-object.mk,$(iter-items)) + +libgcc-objects += $(patsubst %,%$(objext),$(clrsb_funcs)) + +# Build signed countlsFX functions from lib2funcs.c + +countls_modes := qi hi si di +countls_funcs := $(foreach func,_countls,\ + $(foreach mode,$(countls_modes),$(func_X))) + +iter-items := $(countls_funcs) +iter-labels := $(countls_modes) +iter-flags := $(patsubst %,-DL_countls,$(iter-items)) + +include $(srcdir)/empty.mk $(patsubst %,$(srcdir)/config/avr/lib2-object.mk,$(iter-items)) + +libgcc-objects += $(patsubst %,%$(objext),$(countls_funcs)) + +# Build unsigned countlsFX functions from lib2funcs.c + +countlsu_modes := qi hi si di +countlsu_funcs := $(foreach func,_countlsu,\ + $(foreach mode,$(countlsu_modes),$(func_X))) + +iter-items := $(countlsu_funcs) +iter-labels := $(countlsu_modes) +iter-flags := $(patsubst %,-DL_countlsu,$(iter-items)) + +include $(srcdir)/empty.mk $(patsubst %,$(srcdir)/config/avr/lib2-object.mk,$(iter-items)) + +libgcc-objects += $(patsubst %,%$(objext),$(countlsu_funcs)) + + +# Filter out supported conversions from fixed-bit.c +# Also filter out TQ and UTQ. + +# Conversions supported by the compiler + +convf_modes = QI UQI QQ UQQ \ + HI UHI HQ UHQ HA UHA \ + SI USI SQ USQ SA USA \ + DI UDI DQ UDQ DA UDA \ + TI UTI TQ UTQ TA UTA + +LIB2FUNCS_EXCLUDE += \ + $(foreach conv,_fract _fractuns,\ + $(foreach mode1,$(convf_modes),\ + $(foreach mode2,$(convf_modes),$(conv_XY)))) + +# Conversions supported by lib1funcs-fixed.S + +conv_to_sf_modes = QQ UQQ HQ UHQ HA UHA SQ USQ SA USA +conv_from_sf_modes = QQ UQQ HQ UHQ HA UHA SA USA + +LIB2FUNCS_EXCLUDE += \ + $(foreach conv,_fract, \ + $(foreach mode1,$(conv_to_sf_modes), \ + $(foreach mode2,SF,$(conv_XY)))) + +LIB2FUNCS_EXCLUDE += \ + $(foreach conv,_fract,\ + $(foreach mode1,SF,\ + $(foreach mode2,$(conv_from_sf_modes),$(conv_XY)))) + +# Arithmetik supported by the compiler + +allfix_modes = QQ UQQ HQ UHQ HA UHA SQ USQ SA USA DA UDA DQ UDQ TQ UTQ TA UTA + +LIB2FUNCS_EXCLUDE += \ + $(foreach func,_add _sub,\ + $(foreach mode,$(allfix_modes),$(func_X))) + +LIB2FUNCS_EXCLUDE += \ + $(foreach func,_lshr _ashl _ashr _cmp,\ + $(foreach mode,$(allfix_modes),$(func_X))) + + +usat_modes = UQQ UHQ UHA USQ USA UDQ UDA UTQ UTA +ssat_modes = QQ HQ HA SQ SA DQ DA TQ TA + +LIB2FUNCS_EXCLUDE += \ + $(foreach func,_ssadd _sssub _ssneg _ssabs,\ + $(foreach mode,$(ssat_modes),$(func_X))) + +LIB2FUNCS_EXCLUDE += \ + $(foreach func,_usadd _ussub _usneg,\ + $(foreach mode,$(usat_modes),$(func_X))) + + +smul_modes = QQ HQ HA SA +umul_modes = UQQ UHQ UHA USA +sdiv_modes = QQ HQ HA SA +udiv_modes = UQQ UHQ UHA USA + +LIB2FUNCS_EXCLUDE += \ + $(foreach func,_mul,\ + $(foreach mode,$(smul_modes) $(umul_modes),$(func_X))) + +LIB2FUNCS_EXCLUDE += \ + $(foreach func,_div,\ + $(foreach mode,$(sdiv_modes) $(udiv_modes),$(func_X))) + + +ssmul_modes = HA SA +usmul_modes = UHA USA + +LIB2FUNCS_EXCLUDE += \ + $(foreach func,_usmul,\ + $(foreach mode,$(usmul_modes),$(func_X))) + +LIB2FUNCS_EXCLUDE += \ + $(foreach func,_ssmul,\ + $(foreach mode,$(ssmul_modes),$(func_X))) |