From: Max Filippov Date: Mon, 20 Nov 2017 14:35:06 +0000 (-0800) Subject: gas: xtensa: speed up find_trampoline_seg X-Git-Tag: users/ARM/embedded-binutils-master-2017q4~21 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=407e1140841f7fc337e90a7ba4482fb5a10c1701;p=external%2Fbinutils.git gas: xtensa: speed up find_trampoline_seg find_trampoline_seg takes noticeable time when assembling source with many sections. Cache the result of the most recent search and check it first. No functional changes. gas/ 2017-11-27 Max Filippov * config/tc-xtensa.c (find_trampoline_seg): Add static variable that caches the result of the most recent search. --- diff --git a/gas/ChangeLog b/gas/ChangeLog index 92d0c36..81f9f83 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,5 +1,10 @@ 2017-11-27 Max Filippov + * config/tc-xtensa.c (find_trampoline_seg): Add static variable + that caches the result of the most recent search. + +2017-11-27 Max Filippov + * config/tc-xtensa.c (trampoline_chain_entry, trampoline_chain) (trampoline_chain_index): New structures. (trampoline_index): Add chain_index field. diff --git a/gas/config/tc-xtensa.c b/gas/config/tc-xtensa.c index 9defd73..ce7eb49 100644 --- a/gas/config/tc-xtensa.c +++ b/gas/config/tc-xtensa.c @@ -7453,11 +7453,18 @@ static struct trampoline_seg * find_trampoline_seg (asection *seg) { struct trampoline_seg *ts = trampoline_seg_list.next; + static struct trampoline_seg *mr; + + if (mr && mr->seg == seg) + return mr; for ( ; ts; ts = ts->next) { if (ts->seg == seg) - return ts; + { + mr = ts; + return ts; + } } return NULL;