[PATCH 05/11] RISC-V: One time CSR hash table initialization

Tsukasa OI research_trasio@irq.a4lg.com
Tue Nov 15 04:52:48 GMT 2022


The current disassembler intends to initialize the CSR hash table when CSR
name parsing is required at the first time. This is managed by a function-
scope static variable init_csr but... there's a problem.

It's never set to true.

Because of this issue, current disassembler actually initializes the CSR
hash table every time when CSR name parsing is required.  This commit sets
init_csr to true once the CSR hash table is initialized.

It is expected to have about 30% performance improvements alone when
thousands of only CSR instructions are disassembled (CSR instructions are
rare in general so real world performance improvement is not that high).

This commit alone will not affect real world performance that much but
after the efficient opcode hash is implemented, it will be much effective
(sometimes >x10 effect than this commit alone) so that even some regular
programs can benefit from it.

opcodes/ChangeLog:

	* riscv-dis.c (print_insn_args): Make sure that CSR hash table
	initialization occurs only once.
---
 opcodes/riscv-dis.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/opcodes/riscv-dis.c b/opcodes/riscv-dis.c
index 3135db30ccd..ec38bed747a 100644
--- a/opcodes/riscv-dis.c
+++ b/opcodes/riscv-dis.c
@@ -564,6 +564,7 @@ print_insn_args (const char *oparg, insn_t l, bfd_vma pc, disassemble_info *info
 		DECLARE_CSR (name, num, class, define_version, abort_version)
 #include "opcode/riscv-opc.h"
 #undef DECLARE_CSR
+		init_csr = true;
 	      }
 
 	    if (riscv_csr_hash[csr] != NULL)
-- 
2.37.2



More information about the Binutils mailing list