From: Charlie Jenkins <charlie@rivosinc.com>
To: "Andrew Jones" <ajones@ventanamicro.com>,
"Björn Töpel" <bjorn@kernel.org>,
"Palmer Dabbelt" <palmer@dabbelt.com>,
"Jessica Clarke" <jrtc27@jrtc27.com>,
linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org
Subject: [RFC] riscv: Script to autogenerate instruction handling code
Date: Sun, 24 Sep 2023 20:19:35 -0700 [thread overview]
Message-ID: <ZRD8RzBeA2RMrcki@ghost> (raw)
I have heeded Andrew Jones' advice and written a script to generate the
instruction handling code. It is still in development, but currently
lives on a fork of riscv-opcodes [1]. I am interested if what I have
produced so far is in line with what people would want to see.
An insn.h file can be generated by running the following in the repo:
make
python3 parse_linux.py instr_dict.yaml insn.h opcodes_config variable_field_data.yaml
I have pushed the generated files to the repo so people do not need to
run the script.
Each instruction has "variable fields" such as registers and immediates.
For each variable field that appears in any provided instruction 3 functions
are provided: extract a variable field from an instruction, insert a value into
a variable field of an instruction, update a value into a variable field of an
instruction. Update first clears the previous value of the variable field of the
instruction. Then for each instruction, the script generates a function to check if an
arbitrary 32-bit value matches the given instruction, and a function to
generate the binary for the instruction given the required variable
fields.
I was able to use riscv-opcodes to parse the instruction files, but
needed to create a new data structure in variable_field_data.py [2] which
holds the positioning of immediates inside of an instruction.
I envision that opcodes_config [3] would live inside of the kernel alongside
a simple script to call riscv-opcodes (that resides somewhere in the
user's file system) with appropriate parameters. When somebody wants to
add a new instruction, they can add an instruction to opcodes_config,
run the script, and commit the resulting generated file.
If this script is in a direction that people like, I will continue to
fix up the issues in it and try to get it upstreamed to riscv-opcodes
before I send a kernel patch.
- Charlie
[1] https://github.com/charlie-rivos/riscv-opcodes/tree/linux_parsing
[2] https://github.com/charlie-rivos/riscv-opcodes/blob/linux_parsing/variable_field_data.py
[3] https://github.com/charlie-rivos/riscv-opcodes/blob/linux_parsing/opcodes_config
next reply other threads:[~2023-09-25 3:19 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-09-25 3:19 Charlie Jenkins [this message]
2023-10-23 9:19 ` [RFC] riscv: Script to autogenerate instruction handling code Andrew Jones
2023-10-27 18:58 ` Charlie Jenkins
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ZRD8RzBeA2RMrcki@ghost \
--to=charlie@rivosinc.com \
--cc=ajones@ventanamicro.com \
--cc=bjorn@kernel.org \
--cc=jrtc27@jrtc27.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-riscv@lists.infradead.org \
--cc=palmer@dabbelt.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox