
gcc/ PR target/49868 * config/avr/avr.h (ADDR_SPACE_PGM): New address spaces. (REGISTER_TARGET_PRAGMAS): New define. * config/avr/avr-protos.h (avr_mem_pgm_p): New. (avr_load_libgcc_p): New. (asm_output_external_libcall): Remove. (avr_register_target_pragmas): New. (avr_log_t): Add field "progmem". Order alphabetically. * config/avr/avr-log.c (avr_log_set_avr_log): Set avr_log.progmem. * config/avr/avr-c.c (langhooks.h): New include. (avr_register_target_pragmas): New function. Register address space __pgm. (avr_cpu_cpp_builtins): Add built-in define __PGM. * config/avr/avr.c: Include "c-family/c-common.h". (TARGET_LEGITIMATE_ADDRESS_P): Remove define. (TARGET_LEGITIMIZE_ADDRESS): Remove define. (TARGET_ADDR_SPACE_SUBSET_P): Define to... (avr_addr_space_subset_p): ...this new static function. (TARGET_ADDR_SPACE_CONVERT): Define to... (avr_addr_space_convert): ...this new static function. (TARGET_ADDR_SPACE_ADDRESS_MODE): Define to... (avr_addr_space_address_mode): ...this new static function. (TARGET_ADDR_SPACE_POINTER_MODE): Define to... (avr_addr_space_pointer_mode): ...this new static function. (TARGET_ADDR_SPACE_LEGITIMATE_ADDRESS_P): Define to... (avr_addr_space_legitimate_address_p): ...this new static function. (TARGET_ADDR_SPACE_LEGITIMIZE_ADDRESS): Define to... (avr_addr_space_legitimize_address): ...this new static function. (avr_mode_code_base_reg_class): Handle address spaces. (avr_regno_mode_code_ok_for_base_p): Ditto. (lpm_addr_reg_rtx, lpm_reg_rtx, all_regs_rtx): New static variables. (avr_option_override): Initialize them. (output_reload_in_const): Use all_regs_rtx. Fix signedness of loop variables. (avr_pgm_segment): New static function. (avr_decl_pgm_p, avr_mem_pgm_p): New static functions. (avr_out_lpm, avr_out_lpm_no_lpmx): New static functions. (output_movqi, output_movhi, output_movsisf, avr_out_movpsi): Call avr_out_lpm to handle loads from progmem. (avr_load_libgcc_p): New static function. (avr_progmem_p): Test if decl is in flash. (avr_pgm_pointer_const_p): New static function. (avr_nonconst_pointer_addrspace): New static function. (avr_pgm_check_var_decl): New static function. (avr_insert_attributes): Use it. Change error message to report cause (progmem or address space) when code wants to write to flash. (avr_section_type_flags): Unset section flag SECTION_BSS for data in progmem. * config/avr/predicates.md (nop_general_operand): New predicate. (nox_general_operand): New predicate. * config/avr/avr.md (LPM_REGNO): New define_constant. (load<mode>_libgcc): New expander. (*load.<mode>.libgcc): New insn. (mov<mode>): Handle loads from non-generic AS. (movmemhi): Ditto. Propagate address space information to newly created MEM. (movqi_insn, *movhi, *movpsi, *movsi, *movsf): Change predicate #1 to nox_general_operand. (ashrqi3, ashrhi3, ashrsi3): Change predicate #1 to nop_general_operand. (ashlqi3, *ashlqi3, ashlhi3, ashlsi3): Ditto. (lshrqi3, *lshrqi3, lshrhi3, lshrsi3): Ditto. (split-lpmx): New split. (*ashlhi3_const, *ashlsi3_const, *ashrhi3_const, *ashrsi3_const, *lshrhi3_const, *lshrsi3_const): Indent, unquote C. libgcc/ PR target/49868 * config/avr/t-avr (LIB1ASMFUNCS): Add _load_3, _load_4. * config/avr/lib1funcs.S (__load_3, __load_4, __xload_2): New functions. From-SVN: r181378
75 lines
1.5 KiB
Text
75 lines
1.5 KiB
Text
LIB1ASMSRC = avr/lib1funcs.S
|
|
LIB1ASMFUNCS = \
|
|
_mulqi3 \
|
|
_mulhi3 \
|
|
_mulhisi3 \
|
|
_umulhisi3 \
|
|
_usmulhisi3 \
|
|
_muluhisi3 \
|
|
_mulshisi3 \
|
|
_mulsi3 \
|
|
_udivmodqi4 \
|
|
_divmodqi4 \
|
|
_udivmodhi4 \
|
|
_divmodhi4 \
|
|
_divmodpsi4 _udivmodpsi4 \
|
|
_udivmodsi4 \
|
|
_divmodsi4 \
|
|
_prologue \
|
|
_epilogue \
|
|
_exit \
|
|
_cleanup \
|
|
_tablejump \
|
|
_tablejump_elpm \
|
|
_load_3 _load_4 \
|
|
_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 \
|
|
_fmul _fmuls _fmulsu
|
|
|
|
LIB2FUNCS_EXCLUDE = \
|
|
_clz
|
|
|
|
# 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
|