diff options
author | 2023-10-10 14:33:42 +0000 | |
---|---|---|
committer | 2023-10-10 14:33:42 +0000 | |
commit | af1a266670d040d2f4083ff309d732d648afba2a (patch) | |
tree | 2fc46203448ddcc6f81546d379abfaeb323575e9 /capstone/contrib/riscv_update | |
parent | e02cda008591317b1625707ff8e115a4841aa889 (diff) |
Change-Id: Iaf8d18082d3991dec7c0ebbea540f092188eb4ec
Diffstat (limited to 'capstone/contrib/riscv_update')
-rw-r--r-- | capstone/contrib/riscv_update/README.md | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/capstone/contrib/riscv_update/README.md b/capstone/contrib/riscv_update/README.md new file mode 100644 index 000000000..48e1a5b19 --- /dev/null +++ b/capstone/contrib/riscv_update/README.md @@ -0,0 +1,61 @@ +# How to update RISCV tables. + +* Checkout LLVM. Patches are tested on commit `b81d715c`. + ``` + git clone https://github.com/llvm/llvm-project.git + git checkout b81d715c + ``` +* Apply patches from the current directory. +* Run tablegen. + ``` + cd $LLVM + mkdir build + cd build + cmake -DCMAKE_CXX_FLAGS=-DCAPSTONE -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD="RISCV" .. + make RISCVCommonTableGen + ``` +* Copy `.inc` files. + ``` + cp arch/RISCV/RISCVGenInsnNameMaps.inc \ + arch/RISCV/RISCVGenInsnNameMaps.inc.old + for inc in $(cd arch/RISCV && ls *.inc); do + cp $LLVM/build/lib/Target/RISCV/$inc arch/RISCV/ + done + ``` +* Fixup `RISCVGenInsnNameMaps.inc`. + ``` + comm -1 -3 \ + <(grep RISCV_INS_ <arch/RISCV/RISCVGenInsnNameMaps.inc.old \ + | sort -u) \ + <(grep RISCV_INS_ <arch/RISCV/RISCVGenInsnNameMaps.inc \ + | sort -u) \ + >arch/RISCV/RISCVGenInsnNameMaps.inc.new + cat arch/RISCV/RISCVGenInsnNameMaps.inc.old \ + arch/RISCV/RISCVGenInsnNameMaps.inc.new \ + >arch/RISCV/RISCVGenInsnNameMaps.inc + ``` +* Add new groups, insns, registers and formats. + * `include/capstone/RISCV.h` + * `enum RISCV_insn`: + ``` + comm -1 -3 \ + <(perl -ne 'if (/(RISCV_INS_.+),/) { print "\t$1,\n" }' \ + <include/capstone/RISCV.h | sort -u) \ + <(perl -ne 'if (/(RISCV_INS_.+),/) { print "\t$1,\n" }' \ + <arch/RISCV/RISCVMappingInsn.inc | sort -u) + ``` + * `enum RISCV_insn_group`: + ``` + perl -ne 'if (/(\{.RISCV_GRP_.*?\}),/) { print "\t$1,\n"; }' < \ + arch/RISCV/RISCVMappingInsn.inc | sort -u + ``` + * `arch/RISCV/RISCVDisassembler.c` + * `arch/RISCV/RISCVInstPrinter.c` + * `arch/RISCV/RISCVMCTargetDesc.c` + * `arch/RISCV/RISCVMCTargetDesc.h` + * `arch/RISCV/RISCVMapping.c` + * `enum group_name_maps`: + ``` + perl -ne 'if (/(RISCV_GRP_(.*?)),/) { print "\t{ $1, \"" . lc($2) . "\" },\n"; }' \ + arch/RISCV/RISCVMappingInsn.inc | sort -u + ``` |