From 8ef6decbc1f3a5965fff70289e2bdccae3f9aa3c Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Tue, 15 Oct 2019 23:04:14 +1030 Subject: 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. --- gas/config/tc-xtensa.c | 48 ++++++++++++++++++++++++++---------------------- 1 file changed, 26 insertions(+), 22 deletions(-) (limited to 'gas/config/tc-xtensa.c') diff --git a/gas/config/tc-xtensa.c b/gas/config/tc-xtensa.c index c68128e..60f9563 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 * -- cgit v1.1