aboutsummaryrefslogtreecommitdiff
path: root/gas/config/tc-xtensa.c
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2019-10-15 23:04:14 +1030
committerAlan Modra <amodra@gmail.com>2019-10-16 11:03:34 +1030
commit8ef6decbc1f3a5965fff70289e2bdccae3f9aa3c (patch)
treee20a037c9de93b42f9ec7ead0a97dcbcfcadd89b /gas/config/tc-xtensa.c
parentd9f06fca198cd11bbfd8c03e389a75f5d735b3a4 (diff)
downloadgdb-8ef6decbc1f3a5965fff70289e2bdccae3f9aa3c.zip
gdb-8ef6decbc1f3a5965fff70289e2bdccae3f9aa3c.tar.gz
gdb-8ef6decbc1f3a5965fff70289e2bdccae3f9aa3c.tar.bz2
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/config/tc-xtensa.c')
-rw-r--r--gas/config/tc-xtensa.c48
1 files changed, 26 insertions, 22 deletions
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 *