diff options
author | 2019-10-15 23:04:14 +1030 | |
---|---|---|
committer | 2019-10-16 11:03:34 +1030 | |
commit | 8ef6decbc1f3a5965fff70289e2bdccae3f9aa3c (patch) | |
tree | e20a037c9de93b42f9ec7ead0a97dcbcfcadd89b /gas | |
parent | Automatic date update in version.in (diff) | |
download | binutils-gdb-8ef6decbc1f3a5965fff70289e2bdccae3f9aa3c.tar.gz binutils-gdb-8ef6decbc1f3a5965fff70289e2bdccae3f9aa3c.tar.bz2 binutils-gdb-8ef6decbc1f3a5965fff70289e2bdccae3f9aa3c.zip |
qsort: tc-xtensa.c tidy
Not much to see here, just reduce the number of calls to S_GET_VALUE
and symbol_symbolS in the comparison functions.
* config/tc-xtensa.c (xg_order_trampoline_chain_entry): Don't
call S_GET_VALUE multiple times for a symbol. Rearrange code
so it is obvious what is the primary sort key.
(xg_order_trampoline_chain): Similarly.
Diffstat (limited to 'gas')
-rw-r--r-- | gas/ChangeLog | 7 | ||||
-rw-r--r-- | gas/config/tc-xtensa.c | 48 |
2 files changed, 33 insertions, 22 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog index 33cc6ffc9af..ac2e3d75aa2 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,10 @@ +2019-10-16 Alan Modra <amodra@gmail.com> + + * config/tc-xtensa.c (xg_order_trampoline_chain_entry): Don't + call S_GET_VALUE multiple times for a symbol. Rearrange code + so it is obvious what is the primary sort key. + (xg_order_trampoline_chain): Similarly. + 2019-10-15 Alan Modra <amodra@gmail.com> * config/tc-nds32.c (nds32_set_section_relocs): Use relocs and n diff --git a/gas/config/tc-xtensa.c b/gas/config/tc-xtensa.c index c68128e2897..60f9563585a 100644 --- a/gas/config/tc-xtensa.c +++ b/gas/config/tc-xtensa.c @@ -7584,14 +7584,17 @@ static int xg_order_trampoline_chain_entry (const void *a, const void *b) const struct trampoline_chain_entry *pa = a; const struct trampoline_chain_entry *pb = b; - if (pa->sym == pb->sym || - S_GET_VALUE (pa->sym) == S_GET_VALUE (pb->sym)) - if (pa->offset == pb->offset) - return 0; - else - return pa->offset < pb->offset ? -1 : 1; - else - return S_GET_VALUE (pa->sym) < S_GET_VALUE (pb->sym) ? -1 : 1; + if (pa->sym != pb->sym) + { + valueT aval = S_GET_VALUE (pa->sym); + valueT bval = S_GET_VALUE (pb->sym); + + if (aval != bval) + return aval < bval ? -1 : 1; + } + if (pa->offset != pb->offset) + return pa->offset < pb->offset ? -1 : 1; + return 0; } static void xg_sort_trampoline_chain (struct trampoline_chain *tc) @@ -7674,23 +7677,24 @@ static int xg_order_trampoline_chain (const void *a, const void *b) const struct trampoline_chain_entry *pb = &_pb->target; symbolS *s1 = pa->sym; symbolS *s2 = pb->sym; - symbolS *tmp; - tmp = symbol_symbolS (s1); - if (tmp) - s1 = tmp; + if (s1 != s2) + { + symbolS *tmp = symbol_symbolS (s1); + if (tmp) + s1 = tmp; - tmp = symbol_symbolS (s2); - if (tmp) - s2 = tmp; + tmp = symbol_symbolS (s2); + if (tmp) + s2 = tmp; - if (s1 == s2) - if (pa->offset == pb->offset) - return 0; - else - return pa->offset < pb->offset ? -1 : 1; - else - return s1 < s2 ? -1 : 1; + if (s1 != s2) + return s1 < s2 ? -1 : 1; + } + + if (pa->offset != pb->offset) + return pa->offset < pb->offset ? -1 : 1; + return 0; } static struct trampoline_chain * |