This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH 7/8] gas: xtensa: implement trampoline coalescing


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.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]