This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Re: [PATCH 7/8] gas: xtensa: implement trampoline coalescing
- From: "augustine dot sterling at gmail dot com" <augustine dot sterling at gmail dot com>
- To: Max Filippov <jcmvbkbc at gmail dot com>
- Cc: binutils at sourceware dot org, "linux-xtensa at linux-xtensa dot org" <linux-xtensa at linux-xtensa dot org>
- Date: Mon, 27 Nov 2017 14:10:46 -0800
- Subject: Re: [PATCH 7/8] gas: xtensa: implement trampoline coalescing
- Authentication-results: sourceware.org; auth=none
- References: <1511811574-11128-1-git-send-email-jcmvbkbc@gmail.com> <1511811574-11128-8-git-send-email-jcmvbkbc@gmail.com>
On Mon, Nov 27, 2017 at 11:39 AM, Max Filippov <jcmvbkbc@gmail.com> wrote:
> There is a recurring pattern in assembly files generated by a compiler
> where a lot of jumps in a function are going to the same place. When
> these jumps are relaxed with trampolines the assembler generates a
> separate jump thread from each source.
> Create an index of trampoline jump targets for each segment and see if a
> jump being relaxed goes to a location from that index, in which case
> replace its target with a location of existing trampoline jump that
> results in the shortest path to the original target.
>
> gas/
> 2017-11-20 Max Filippov <jcmvbkbc@gmail.com>
>
> * config/tc-xtensa.c (trampoline_chain_entry, trampoline_chain)
> (trampoline_chain_index): New structures.
> (trampoline_index): Add chain_index field.
> (xg_order_trampoline_chain_entry, xg_sort_trampoline_chain)
> (xg_find_chain_entry, xg_get_best_chain_entry)
> (xg_order_trampoline_chain, xg_get_trampoline_chain)
> (xg_find_best_eq_target, xg_add_location_to_chain)
> (xg_create_trampoline_chain, xg_get_single_symbol_slot): New
> functions.
> (xg_relax_fixups): Call xg_find_best_eq_target to adjust jump
> target to point to an existing jump. Call
> xg_create_trampoline_chain to create new jump target. Call
> xg_add_location_to_chain to add newly created trampoline jump
> to the corresponding chain.
> (add_jump_to_trampoline): Extract loop searching for a single
> slot with a symbol into a separate function, replace that code
> with a call to that function.
> (relax_frag_immed): Call xg_find_best_eq_target to adjust jump
> target to point to an existing jump.
> * testsuite/gas/xtensa/all.exp: Add trampoline-2 test.
> * testsuite/gas/xtensa/trampoline.d: Adjust absolute addresses
> as many duplicate trampoline chains are now coalesced.
> * testsuite/gas/xtensa/trampoline.s: Add _nop so that objdump
> stays in sync with instruction stream.
> * testsuite/gas/xtensa/trampoline-2.l: New test result file.
> * testsuite/gas/xtensa/trampoline-2.s: New test source file.
> ---
This is OK.