[PATCH 0/1] RISC-V: Use faster hash table on disassembling

Tsukasa OI research_trasio@irq.a4lg.com
Sat Jul 9 03:49:10 GMT 2022


Hello,

This patchset intends to improve performance on disassembling RISC-V
code (which may possibly contain invalid data).  It replaces riscv_hash
(on opcodes/riscv-dis.c) with much faster data structure: sorted and
partitioned hash table.

Tracker on GitHub:
<https://github.com/a4lg/binutils-gdb/wiki/riscv_dis_opts_hashtable>

    Sidenote:
    I started listing my Binutils submissions on my GitHub Wiki:
    <https://github.com/a4lg/binutils-gdb/wiki/Patch-Queue>
    hoping that current status and conflicting patches are clear.

***WARNING***

This patchset conflicts with following patchset(s):
-   <https://sourceware.org/pipermail/binutils/2022-June/121441.html>
    (Tracker: <https://github.com/a4lg/binutils-gdb/wiki/riscv_dis_generics>)
If either of them is merged, I will submit rebased patchset.



This is a technique actually used on SPARC architecture
(opcodes/sparc-dis.c) and I simplified the algorithm even further.
Unlike SPARC, RISC-V hashed opcode table is not a table to linked lists,
it's just a table, pointing to "start" elements of the sorted opcode
list (sorted by hash code) plus global tail.

I benchmarked some of the programs and I measure somewhat between 2%
to 10% performance increase while disassembling code section of RISC-V
ELF files (objdump -d $FILE).  That is not significant but not bad for
such a small modification (with ~ 11KB heap memory allocation on 64-bit
environment).

This is not the end.  This structure significantly improves plain binary
file handling (on objdump, objdump -b binary -m riscv:rv[32|64] -D
$FILE).  I tested on a big vmlinux image with debug symbols and I got
over 50% performance boost.  This is due to the fact that, disassembling
about one quarter of invalid "instruction" words required iterating over
one thousand opcode entries (>= 348 being vector instructions with OP-V,
that can be easily skipped with this new data structure).

Thanks,
Tsukasa




Tsukasa OI (1):
  RISC-V: Use faster hash table on disassembling

 opcodes/riscv-dis.c | 214 ++++++++++++++++++++++++++++----------------
 1 file changed, 136 insertions(+), 78 deletions(-)


base-commit: d2acd4b0c5bab349aaa152d60268bc144634a844
-- 
2.34.1



More information about the Binutils mailing list