1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
|
# 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
```
|