[patch,avr] PR81075: Move jump-tables out of .text

Georg-Johann Lay avr@gjlay.de
Wed Jun 14 12:03:00 GMT 2017


Hi,

Since PR71151 we have jump-tables in .text so that branches
crossing the tables have longer offsets that needed.

This moves jump-tables out of test again, but not into
.progmem.gcc_sw_tables like before PR71151, but into
the currently unused but existing .jumptables.

Since PR63223 there is no restriction on the location
of jump-tables, they can even reside above 128KiB without
problems.

Also adds -mlog=insn_addresses to dump insn addresses
as asm comments before respective instruction.

The patch implements ASM_OUTPUT_ADDR_VEC so that avr.c
gains full control over the table generation.

Tested on ATmega2560.

Ok to apply?

Johann


gcc/
	Move jump-tables out of .text again.

	PR target/81075
	* config/avr/avr.c (ASM_OUTPUT_ADDR_VEC_ELT): Remove function.
	(ASM_OUTPUT_ADDR_VEC): New function.
	(avr_adjust_insn_length) [JUMP_TABLE_DATA_P]: Return 0.
	(avr_final_prescan_insn) [avr_log.insn_addresses]: Dump
	INSN_ADDRESSes as asm comment.
	* config/avr/avr.h (JUMP_TABLES_IN_TEXT_SECTION): Adjust comment.
	(ASM_OUTPUT_ADDR_VEC_ELT): Remove define.
	(ASM_OUTPUT_ADDR_VEC): Define to avr_output_addr_vec.
	* config/avr/avr.md (*tablejump): Adjust comment.
	* config/avr/elf.h (ASM_OUTPUT_BEFORE_CASE_LABEL): Remove.
	* config/avr/avr-log.c (avr_log_set_avr_log) <insn_addresses>:
	New detail.
	* config/avr/avr-protos.h (avr_output_addr_vec_elt): Remove proto.
	(avr_output_addr_vec): New proto.
	(avr_log_t) <insn_addresses>: New field.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: pr81075-jumptable.diff
Type: text/x-patch
Size: 7759 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/gcc-patches/attachments/20170614/b527a61a/attachment.bin>


More information about the Gcc-patches mailing list