README.md
1# How to update SystemZ tables.
2
3* Checkout LLVM. Patches are tested on commit `c13d5969^`, because
4 `c13d5969` changed the decode table format.
5* Apply patches from the current directory.
6* Run tablegen.
7 ```
8 cd $LLVM
9 mkdir build
10 cd build
11 cmake -DCMAKE_CXX_FLAGS=-DCAPSTONE ..
12 make SystemZCommonTableGen -j$(getconf _NPROCESSORS_ONLN)
13 ```
14* Copy `.inc` files.
15 ```
16 cp arch/SystemZ/SystemZGenInsnNameMaps.inc \
17 arch/SystemZ/SystemZGenInsnNameMaps.inc.old
18 for inc in $(cd arch/SystemZ && ls *.inc); do
19 cp $LLVM/build/lib/Target/SystemZ/$inc arch/SystemZ/
20 done
21 ```
22* Fixup `SystemZGenInsnNameMaps.inc`.
23 ```
24 comm -1 -3 \
25 <(grep SYSZ_INS_ <arch/SystemZ/SystemZGenInsnNameMaps.inc.old \
26 | sort -u) \
27 <(grep SYSZ_INS_ <arch/SystemZ/SystemZGenInsnNameMaps.inc \
28 | sort -u) \
29 >arch/SystemZ/SystemZGenInsnNameMaps.inc.new
30 cat arch/SystemZ/SystemZGenInsnNameMaps.inc.old \
31 arch/SystemZ/SystemZGenInsnNameMaps.inc.new \
32 >arch/SystemZ/SystemZGenInsnNameMaps.inc
33 ```
34* Add new groups, insns, registers and formats.
35 * `include/capstone/systemz.h`
36 * `enum sysz_insn`:
37 ```
38 comm -1 -3 \
39 <(perl -ne 'if (/(SYSZ_INS_.+),/) { print "\t$1,\n" }' \
40 <include/capstone/systemz.h | sort -u) \
41 <(perl -ne 'if (/(SYSZ_INS_.+),/) { print "\t$1,\n" }' \
42 <arch/SystemZ/SystemZMappingInsn.inc | sort -u)
43 ```
44 * `enum sysz_insn_group`:
45 ```
46 perl -ne 'if (/(SYSZ_GRP_.*?),/) { print "\t$1,\n"; }' < \
47 arch/SystemZ/SystemZMappingInsn.inc | sort -u
48 ```
49 * `arch/SystemZ/SystemZDisassembler.c`
50 * `arch/SystemZ/SystemZInstPrinter.c`
51 * `arch/SystemZ/SystemZMCTargetDesc.c`
52 * `arch/SystemZ/SystemZMCTargetDesc.h`
53 * `arch/SystemZ/SystemZMapping.c`
54 * `enum group_name_maps`:
55 ```
56 perl -ne 'if (/(SYSZ_GRP_(.*?)),/) { print "\t{ $1, \"" . lc($2) . "\" },\n"; }' \
57 arch/SystemZ/SystemZMappingInsn.inc | sort -u
58 ```
59