https://gcc.gnu.org/bugzilla/show_bug.cgi?id=49857

--- Comment #15 from Georg-Johann Lay <gjl at gcc dot gnu.org> ---
Created attachment 41829
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=41829&action=edit
pr49857-v2-all.diff: Proposed patch

        PR 49857
        * target.def (TARGET_ADDR_SPACE_FOR_ARTIFICIAL_RODATA): New hook.
        * targhooks.c (default_addr_space_for_artificial_rodata): New function.
        * targhooks.h (default_addr_space_for_artificial_rodata): New proto.
        * tree-switch-conversion.c (target.h): Include it.
        (build_one_array): Set address space of array_type according to
        targetm.addr_space.for_artificial_rodata().
        * doc/tm.texi.in (Named Address Spaces)
        [TARGET_ADDR_SPACE_FOR_ARTIFICIAL_RODATA]: Add hook anchor.
        * doc/tm.texi: Regenerate.

        * config/avr/avr-opts.h: New file.
        * config/avr/avr.opt: Include it.
        (-maddr-space-for-lookup=): New option and...
        (avr_opt_addr_space_for_lookup): ...associated Var.
        (avr_aspace_for_lookup): New option enums used by above.
        * config/avr/avr-protos.h (avr_out_load_flashx): New proto.
        * config/avr/avr.c (avr_out_load_flashx): New function.
        * avr_adjust_insn_length [ADJUST_LEN_LOAD_FLASHX]: Handle it.
        * avr_rtx_costs_1 [ZERO_EXTEND, SIGN_EXTEND]: Handle
        shift-and-extend-by-1 of HI -> PSI.
        [ASHIFT,PSImode]: Describe cost of extend-and-shift-by-1.
        (TARGET_ADDR_SPACE_FOR_ARTIFICIAL_RODATA): Define to...
        (avr_addr_space_for_artificial_rodata): ...this new static function.
        * config/avr/avr.md (unspec): Add UNSPEC_LOAD_FLASHX.
        (adjust_len): Add load_flashx.
        (*ashiftpsi.1_sign_extend.hi, *ashiftpsi.1_zero_extend.hi)
        (*extendpsi.ashift.1.uqi, *load<mode>-flashx): New insns.
        (*split_xload<mode>-cswtch): New insn-and-split.
        * doc/invoke.texi (AVR Options) <-maddr-space-for-lookup=>: Document.

Reply via email to