xtensa: add -mauto-litpools option

Programming / Compilers / GCC - jcmvbkbc [138bc75d-0d04-0410-961f-82ee72b054a4] - 12 August 2015 12:36 UTC

With support from assembler this option allows compiling huge functions, where single literal pool at the beginning of a function may not be reachable by L32R instructions at its end.

Currently assembler --auto-litpools option cannot deal with literals used from multiple locations separated by more than 256 KBytes of code. Don't turn constants into literals, instead use MOVI instruction to load them into registers and let the assembler turn them into literals as necessary.

2015-08-12 Max Filippov gcc/
- config/xtensa/constraints.md (define_constraint "Y"): New constraint.
- config/xtensa/elf.h (ASM_SPEC): Add m(no-)auto-litpools.
- config/xtensa/linux.h (ASM_SPEC): Likewise.
- config/xtensa/predicates.md (move_operand): Match constants and symbols in the presence of TARGET_AUTO_LITPOOLS.
- config/xtensa/xtensa.c (xtensa_valid_move): Don't allow immediate references to TLS data. (xtensa_emit_move_sequence): Don't force constants to memory in the presence of TARGET_AUTO_LITPOOLS. (print_operand): Add 'y' format, same as default, but capable of printing SF mode constants as well.
- config/xtensa/xtensa.md (movsi_internal, movhi_internal) (movsf_internal): Add movi pattern that loads literal. (movsf, movdf): Don't force constants to memory in the presence of TARGET_AUTO_LITPOOLS. (movdf_internal): Add 'Y' constraint.
- config/xtensa/xtensa.opt (mauto-litpools): New option.
- doc/invoke.text (Xtensa options): Document -mauto-litpools.

a2acdfa xtensa: add -mauto-litpools option
gcc/ChangeLog | 22 ++++++++++++++++++++++
gcc/config/xtensa/constraints.md | 5 +++++
gcc/config/xtensa/elf.h | 4 +++-
gcc/config/xtensa/linux.h | 4 +++-
gcc/config/xtensa/predicates.md | 3 ++-
gcc/config/xtensa/xtensa.c | 19 ++++++++++++++++++-
gcc/config/xtensa/xtensa.md | 35 +++++++++++++++++++----------------
gcc/config/xtensa/xtensa.opt | 4 ++++
gcc/doc/invoke.texi | 19 ++++++++++++++++++-
9 files changed, 94 insertions(+), 21 deletions(-)

Upstream: gcc.gnu.org


  • Share