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