You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
59 lines
2.1 KiB
59 lines
2.1 KiB
3 years ago
|
# How to update SystemZ tables.
|
||
|
|
||
|
* Checkout LLVM. Patches are tested on commit `c13d5969^`, because
|
||
|
`c13d5969` changed the decode table format.
|
||
|
* Apply patches from the current directory.
|
||
|
* Run tablegen.
|
||
|
```
|
||
|
cd $LLVM
|
||
|
mkdir build
|
||
|
cd build
|
||
|
cmake -DCMAKE_CXX_FLAGS=-DCAPSTONE ..
|
||
|
make SystemZCommonTableGen -j$(getconf _NPROCESSORS_ONLN)
|
||
|
```
|
||
|
* Copy `.inc` files.
|
||
|
```
|
||
|
cp arch/SystemZ/SystemZGenInsnNameMaps.inc \
|
||
|
arch/SystemZ/SystemZGenInsnNameMaps.inc.old
|
||
|
for inc in $(cd arch/SystemZ && ls *.inc); do
|
||
|
cp $LLVM/build/lib/Target/SystemZ/$inc arch/SystemZ/
|
||
|
done
|
||
|
```
|
||
|
* Fixup `SystemZGenInsnNameMaps.inc`.
|
||
|
```
|
||
|
comm -1 -3 \
|
||
|
<(grep SYSZ_INS_ <arch/SystemZ/SystemZGenInsnNameMaps.inc.old \
|
||
|
| sort -u) \
|
||
|
<(grep SYSZ_INS_ <arch/SystemZ/SystemZGenInsnNameMaps.inc \
|
||
|
| sort -u) \
|
||
|
>arch/SystemZ/SystemZGenInsnNameMaps.inc.new
|
||
|
cat arch/SystemZ/SystemZGenInsnNameMaps.inc.old \
|
||
|
arch/SystemZ/SystemZGenInsnNameMaps.inc.new \
|
||
|
>arch/SystemZ/SystemZGenInsnNameMaps.inc
|
||
|
```
|
||
|
* Add new groups, insns, registers and formats.
|
||
|
* `include/capstone/systemz.h`
|
||
|
* `enum sysz_insn`:
|
||
|
```
|
||
|
comm -1 -3 \
|
||
|
<(perl -ne 'if (/(SYSZ_INS_.+),/) { print "\t$1,\n" }' \
|
||
|
<include/capstone/systemz.h | sort -u) \
|
||
|
<(perl -ne 'if (/(SYSZ_INS_.+),/) { print "\t$1,\n" }' \
|
||
|
<arch/SystemZ/SystemZMappingInsn.inc | sort -u)
|
||
|
```
|
||
|
* `enum sysz_insn_group`:
|
||
|
```
|
||
|
perl -ne 'if (/(SYSZ_GRP_.*?),/) { print "\t$1,\n"; }' < \
|
||
|
arch/SystemZ/SystemZMappingInsn.inc | sort -u
|
||
|
```
|
||
|
* `arch/SystemZ/SystemZDisassembler.c`
|
||
|
* `arch/SystemZ/SystemZInstPrinter.c`
|
||
|
* `arch/SystemZ/SystemZMCTargetDesc.c`
|
||
|
* `arch/SystemZ/SystemZMCTargetDesc.h`
|
||
|
* `arch/SystemZ/SystemZMapping.c`
|
||
|
* `enum group_name_maps`:
|
||
|
```
|
||
|
perl -ne 'if (/(SYSZ_GRP_(.*?)),/) { print "\t{ $1, \"" . lc($2) . "\" },\n"; }' \
|
||
|
arch/SystemZ/SystemZMappingInsn.inc | sort -u
|
||
|
```
|