From: Denis Chertykov <chertykov@gmail.com>
To: Georg-Johann Lay <avr@gjlay.de>
Cc: gcc-patches@gcc.gnu.org,
Eric Weddington <eric.weddington@atmel.com>,
Joerg Wunsch <joerg_wunsch@uriah.heep.sax.de>,
Anatoly Sokolov <aesok@post.ru>
Subject: Re: [Patch]: PR49868: Named address space support for AVR, #4
Date: Tue, 15 Nov 2011 07:41:00 -0000 [thread overview]
Message-ID: <CADOs=za62jMiBUi8R+dzODFk2shFBvzzewtVm809nNGKq3LXwg@mail.gmail.com> (raw)
In-Reply-To: <4EC17808.2010200@gjlay.de>
2011/11/15 Georg-Johann Lay <avr@gjlay.de>:
> Denis Chertykov wrote:
>
>> Let's wait for
>> http://gcc.gnu.org/ml/gcc-patches/2011-10/msg01874.html
>
> As that patch is now upstream, here the updated version.
>
> Difference to the prior implementation of AS1 is:
>
> o If no LPMX instruction is available and more than 2 bytes
> have to be loaded, a libgcc call is used. This also makes
> the implementation simpler.
>
>
> o Some functions are more general than actually needed.
> This will reduce the number of changes for the 24-bit
> address spaces.
>
> o There are 2 new predicates to filter out loads from
> non-generic address space. This is needed in shift
> insns for example because they allow mem.
>
> Tested without regressions.
>
> Ok for trunk?
>
> Johann
>
> 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-devices.c (avr_arch_types): Set field n_segments.
>
> * 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.
>
Please commit.
Denis.
next prev parent reply other threads:[~2011-11-15 4:40 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-10-06 15:16 [Patch]: PR49868: Named address space support for AVR Georg-Johann Lay
2011-10-28 11:00 ` Georg-Johann Lay
2011-10-28 11:21 ` Georg-Johann Lay
2011-10-28 11:35 ` Denis Chertykov
2011-11-06 18:53 ` Georg-Johann Lay
2011-11-07 11:34 ` Georg-Johann Lay
2011-11-07 13:53 ` Denis Chertykov
2011-11-14 20:44 ` [Patch]: PR49868: Named address space support for AVR, #4 Georg-Johann Lay
2011-11-15 7:41 ` Denis Chertykov [this message]
2011-11-17 14:02 ` [Patch]: PR49868: Named address space support for AVR, #5 Georg-Johann Lay
2011-11-18 16:17 ` Denis Chertykov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='CADOs=za62jMiBUi8R+dzODFk2shFBvzzewtVm809nNGKq3LXwg@mail.gmail.com' \
--to=chertykov@gmail.com \
--cc=aesok@post.ru \
--cc=avr@gjlay.de \
--cc=eric.weddington@atmel.com \
--cc=gcc-patches@gcc.gnu.org \
--cc=joerg_wunsch@uriah.heep.sax.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).