On Tue, Aug 11, 2015 at 6:09 PM, Max Filippov <jcmvb...@gmail.com> wrote: > 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-11 Max Filippov <jcmvb...@gmail.com> > 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.
If this is OK with the linux people, it is OK with me. As I recall, they used to have a need to keep literals in page-level groups, but my memory is hazy.