diff options
author | Anton Blanchard <anton@samba.org> | 2015-03-25 13:44:28 +1100 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2015-07-10 19:57:35 +0930 |
commit | c71d757c7a858115d4c7545c87ce26b08106d250 (patch) | |
tree | 8d62d391572423b6662d988607fb98134588ea4d | |
parent | 587c9bc4050982247fa1649a5f32a22860686af5 (diff) | |
download | gdb-c71d757c7a858115d4c7545c87ce26b08106d250.zip gdb-c71d757c7a858115d4c7545c87ce26b08106d250.tar.gz gdb-c71d757c7a858115d4c7545c87ce26b08106d250.tar.bz2 |
powerpc: Only initialise opcode indices once
The gdb TUI is calling gdb_print_insn() (which calls
disassemble_init_powerpc()) enough to show up high in profiles. As
suggested by Alan, only initialise if the indices are empty.
* ppc-dis.c (disassemble_init_powerpc): Only initialise
powerpc_opcd_indices and vle_opcd_indices once.
-rw-r--r-- | opcodes/ChangeLog | 4 | ||||
-rw-r--r-- | opcodes/ppc-dis.c | 54 |
2 files changed, 33 insertions, 25 deletions
diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog index 86a6e2f..0cc7f54 100644 --- a/opcodes/ChangeLog +++ b/opcodes/ChangeLog @@ -2,6 +2,10 @@ Apply from master 2015-03-25 Anton Blanchard <anton@samba.org> + * ppc-dis.c (disassemble_init_powerpc): Only initialise + powerpc_opcd_indices and vle_opcd_indices once. + + 2015-03-25 Anton Blanchard <anton@samba.org> * ppc-opc.c (powerpc_opcodes): Add slbfee. 2015-06-16 Matthew Wahab <matthew.wahab@arm.com> diff --git a/opcodes/ppc-dis.c b/opcodes/ppc-dis.c index 2bfd017..85bbeba 100644 --- a/opcodes/ppc-dis.c +++ b/opcodes/ppc-dis.c @@ -341,37 +341,41 @@ disassemble_init_powerpc (struct disassemble_info *info) int i; unsigned short last; - i = powerpc_num_opcodes; - while (--i >= 0) + if (powerpc_opcd_indices[PPC_OPCD_SEGS] == 0) { - unsigned op = PPC_OP (powerpc_opcodes[i].opcode); - powerpc_opcd_indices[op] = i; - } + i = powerpc_num_opcodes; + while (--i >= 0) + { + unsigned op = PPC_OP (powerpc_opcodes[i].opcode); - last = powerpc_num_opcodes; - for (i = PPC_OPCD_SEGS; i > 0; --i) - { - if (powerpc_opcd_indices[i] == 0) - powerpc_opcd_indices[i] = last; - last = powerpc_opcd_indices[i]; - } + powerpc_opcd_indices[op] = i; + } - i = vle_num_opcodes; - while (--i >= 0) - { - unsigned op = VLE_OP (vle_opcodes[i].opcode, vle_opcodes[i].mask); - unsigned seg = VLE_OP_TO_SEG (op); + last = powerpc_num_opcodes; + for (i = PPC_OPCD_SEGS; i > 0; --i) + { + if (powerpc_opcd_indices[i] == 0) + powerpc_opcd_indices[i] = last; + last = powerpc_opcd_indices[i]; + } - vle_opcd_indices[seg] = i; - } + i = vle_num_opcodes; + while (--i >= 0) + { + unsigned op = VLE_OP (vle_opcodes[i].opcode, vle_opcodes[i].mask); + unsigned seg = VLE_OP_TO_SEG (op); - last = vle_num_opcodes; - for (i = VLE_OPCD_SEGS; i > 0; --i) - { - if (vle_opcd_indices[i] == 0) - vle_opcd_indices[i] = last; - last = vle_opcd_indices[i]; + vle_opcd_indices[seg] = i; + } + + last = vle_num_opcodes; + for (i = VLE_OPCD_SEGS; i > 0; --i) + { + if (vle_opcd_indices[i] == 0) + vle_opcd_indices[i] = last; + last = vle_opcd_indices[i]; + } } if (info->arch == bfd_arch_powerpc) |