1*9a0e4156SSadaf EbrahimiFrom b42f9f2014ec49a22077b6610863d9341a74e142 Mon Sep 17 00:00:00 2001
2*9a0e4156SSadaf EbrahimiFrom: mephi42 <[email protected]>
3*9a0e4156SSadaf EbrahimiDate: Fri, 17 Aug 2018 11:07:39 +0200
4*9a0e4156SSadaf EbrahimiSubject: [PATCH 7/7] capstone: generate *GenInsnNameMaps.inc
5*9a0e4156SSadaf Ebrahimi
6*9a0e4156SSadaf Ebrahimi---
7*9a0e4156SSadaf Ebrahimi lib/Target/SystemZ/CMakeLists.txt   |  1 +
8*9a0e4156SSadaf Ebrahimi utils/TableGen/InstrInfoEmitter.cpp | 29 +++++++++++++++++++++++++++++
9*9a0e4156SSadaf Ebrahimi utils/TableGen/TableGen.cpp         |  6 ++++++
10*9a0e4156SSadaf Ebrahimi utils/TableGen/TableGenBackends.h   |  1 +
11*9a0e4156SSadaf Ebrahimi 4 files changed, 37 insertions(+)
12*9a0e4156SSadaf Ebrahimi
13*9a0e4156SSadaf Ebrahimidiff --git a/lib/Target/SystemZ/CMakeLists.txt b/lib/Target/SystemZ/CMakeLists.txt
14*9a0e4156SSadaf Ebrahimiindex 4b5d9c4a3b2..2c64e0a94b8 100644
15*9a0e4156SSadaf Ebrahimi--- a/lib/Target/SystemZ/CMakeLists.txt
16*9a0e4156SSadaf Ebrahimi+++ b/lib/Target/SystemZ/CMakeLists.txt
17*9a0e4156SSadaf Ebrahimi@@ -7,6 +7,7 @@ tablegen(LLVM SystemZGenDAGISel.inc -gen-dag-isel)
18*9a0e4156SSadaf Ebrahimi tablegen(LLVM SystemZGenDisassemblerTables.inc -gen-disassembler)
19*9a0e4156SSadaf Ebrahimi tablegen(LLVM SystemZGenInstrInfo.inc -gen-instr-info)
20*9a0e4156SSadaf Ebrahimi tablegen(LLVM SystemZMappingInsn.inc -mapping-insn)
21*9a0e4156SSadaf Ebrahimi+tablegen(LLVM SystemZGenInsnNameMaps.inc -gen-insn-name-maps)
22*9a0e4156SSadaf Ebrahimi tablegen(LLVM SystemZGenMCCodeEmitter.inc -gen-emitter)
23*9a0e4156SSadaf Ebrahimi tablegen(LLVM SystemZGenRegisterInfo.inc -gen-register-info)
24*9a0e4156SSadaf Ebrahimi tablegen(LLVM SystemZGenSubtargetInfo.inc -gen-subtarget)
25*9a0e4156SSadaf Ebrahimidiff --git a/utils/TableGen/InstrInfoEmitter.cpp b/utils/TableGen/InstrInfoEmitter.cpp
26*9a0e4156SSadaf Ebrahimiindex 14ab1ea8a72..ccf8170ca62 100644
27*9a0e4156SSadaf Ebrahimi--- a/utils/TableGen/InstrInfoEmitter.cpp
28*9a0e4156SSadaf Ebrahimi+++ b/utils/TableGen/InstrInfoEmitter.cpp
29*9a0e4156SSadaf Ebrahimi@@ -837,6 +837,35 @@ void EmitMappingInsn(RecordKeeper &RK, raw_ostream &OS) {
30*9a0e4156SSadaf Ebrahimi        << "},\n";
31*9a0e4156SSadaf Ebrahimi   }
32*9a0e4156SSadaf Ebrahimi }
33*9a0e4156SSadaf Ebrahimi+
34*9a0e4156SSadaf Ebrahimi+std::string GetMnemonic(const CodeGenInstruction *Inst) {
35*9a0e4156SSadaf Ebrahimi+    std::string Mnemonic = Inst->AsmString;
36*9a0e4156SSadaf Ebrahimi+
37*9a0e4156SSadaf Ebrahimi+    for (size_t i = 0; i < Mnemonic.length(); i++) {
38*9a0e4156SSadaf Ebrahimi+      if (Mnemonic[i] == '\t') {
39*9a0e4156SSadaf Ebrahimi+        return Mnemonic.substr(0, i);
40*9a0e4156SSadaf Ebrahimi+      }
41*9a0e4156SSadaf Ebrahimi+    }
42*9a0e4156SSadaf Ebrahimi+    return Mnemonic;
43*9a0e4156SSadaf Ebrahimi+}
44*9a0e4156SSadaf Ebrahimi+
45*9a0e4156SSadaf Ebrahimi+void EmitInsnNameMaps(RecordKeeper &RK, raw_ostream &OS) {
46*9a0e4156SSadaf Ebrahimi+  OS << "// This is auto-gen data for Capstone engine (www.capstone-engine.org)\n"
47*9a0e4156SSadaf Ebrahimi+        "// By Nguyen Anh Quynh <[email protected]>\n"
48*9a0e4156SSadaf Ebrahimi+        "\n";
49*9a0e4156SSadaf Ebrahimi+  CodeGenTarget Target(RK);
50*9a0e4156SSadaf Ebrahimi+  std::map<std::string, std::string> M;
51*9a0e4156SSadaf Ebrahimi+  for (const CodeGenInstruction *Inst : Target.getInstructionsByEnumValue()) {
52*9a0e4156SSadaf Ebrahimi+    if (Inst->TheDef->getValueAsBit("isPseudo") ||
53*9a0e4156SSadaf Ebrahimi+        Inst->TheDef->getValueAsBit("isCodeGenOnly")) {
54*9a0e4156SSadaf Ebrahimi+      continue;
55*9a0e4156SSadaf Ebrahimi+    }
56*9a0e4156SSadaf Ebrahimi+    M[GetPublicName(Inst)] = GetMnemonic(Inst);
57*9a0e4156SSadaf Ebrahimi+  }
58*9a0e4156SSadaf Ebrahimi+  for (auto &P : M) {
59*9a0e4156SSadaf Ebrahimi+    OS << "\t{ " << P.first << ", \"" << P.second << "\" },\n";
60*9a0e4156SSadaf Ebrahimi+  }
61*9a0e4156SSadaf Ebrahimi+}
62*9a0e4156SSadaf Ebrahimi #endif
63*9a0e4156SSadaf Ebrahimi
64*9a0e4156SSadaf Ebrahimi } // end llvm namespace
65*9a0e4156SSadaf Ebrahimidiff --git a/utils/TableGen/TableGen.cpp b/utils/TableGen/TableGen.cpp
66*9a0e4156SSadaf Ebrahimiindex bbb4e860536..27c6603de5a 100644
67*9a0e4156SSadaf Ebrahimi--- a/utils/TableGen/TableGen.cpp
68*9a0e4156SSadaf Ebrahimi+++ b/utils/TableGen/TableGen.cpp
69*9a0e4156SSadaf Ebrahimi@@ -28,6 +28,7 @@ enum ActionType {
70*9a0e4156SSadaf Ebrahimi   GenRegisterInfo,
71*9a0e4156SSadaf Ebrahimi   GenInstrInfo,
72*9a0e4156SSadaf Ebrahimi   MappingInsn,
73*9a0e4156SSadaf Ebrahimi+  GenInsnNameMaps,
74*9a0e4156SSadaf Ebrahimi   GenInstrDocs,
75*9a0e4156SSadaf Ebrahimi   GenAsmWriter,
76*9a0e4156SSadaf Ebrahimi   GenAsmMatcher,
77*9a0e4156SSadaf Ebrahimi@@ -68,6 +69,8 @@ namespace {
78*9a0e4156SSadaf Ebrahimi                                "Generate instruction descriptions"),
79*9a0e4156SSadaf Ebrahimi                     clEnumValN(MappingInsn, "mapping-insn",
80*9a0e4156SSadaf Ebrahimi                                ""),
81*9a0e4156SSadaf Ebrahimi+                    clEnumValN(GenInsnNameMaps, "gen-insn-name-maps",
82*9a0e4156SSadaf Ebrahimi+                               ""),
83*9a0e4156SSadaf Ebrahimi                     clEnumValN(GenInstrDocs, "gen-instr-docs",
84*9a0e4156SSadaf Ebrahimi                                "Generate instruction documentation"),
85*9a0e4156SSadaf Ebrahimi                     clEnumValN(GenCallingConv, "gen-callingconv",
86*9a0e4156SSadaf Ebrahimi@@ -141,6 +144,9 @@ bool LLVMTableGenMain(raw_ostream &OS, RecordKeeper &Records) {
87*9a0e4156SSadaf Ebrahimi   case MappingInsn:
88*9a0e4156SSadaf Ebrahimi     EmitMappingInsn(Records, OS);
89*9a0e4156SSadaf Ebrahimi     break;
90*9a0e4156SSadaf Ebrahimi+  case GenInsnNameMaps:
91*9a0e4156SSadaf Ebrahimi+    EmitInsnNameMaps(Records, OS);
92*9a0e4156SSadaf Ebrahimi+    break;
93*9a0e4156SSadaf Ebrahimi   case GenInstrDocs:
94*9a0e4156SSadaf Ebrahimi     EmitInstrDocs(Records, OS);
95*9a0e4156SSadaf Ebrahimi     break;
96*9a0e4156SSadaf Ebrahimidiff --git a/utils/TableGen/TableGenBackends.h b/utils/TableGen/TableGenBackends.h
97*9a0e4156SSadaf Ebrahimiindex a41e46b1db0..5656e5be849 100644
98*9a0e4156SSadaf Ebrahimi--- a/utils/TableGen/TableGenBackends.h
99*9a0e4156SSadaf Ebrahimi+++ b/utils/TableGen/TableGenBackends.h
100*9a0e4156SSadaf Ebrahimi@@ -76,6 +76,7 @@ void EmitDisassembler(RecordKeeper &RK, raw_ostream &OS);
101*9a0e4156SSadaf Ebrahimi void EmitFastISel(RecordKeeper &RK, raw_ostream &OS);
102*9a0e4156SSadaf Ebrahimi void EmitInstrInfo(RecordKeeper &RK, raw_ostream &OS);
103*9a0e4156SSadaf Ebrahimi void EmitMappingInsn(RecordKeeper &RK, raw_ostream &OS);
104*9a0e4156SSadaf Ebrahimi+void EmitInsnNameMaps(RecordKeeper &RK, raw_ostream &OS);
105*9a0e4156SSadaf Ebrahimi void EmitInstrDocs(RecordKeeper &RK, raw_ostream &OS);
106*9a0e4156SSadaf Ebrahimi void EmitPseudoLowering(RecordKeeper &RK, raw_ostream &OS);
107*9a0e4156SSadaf Ebrahimi void EmitCompressInst(RecordKeeper &RK, raw_ostream &OS);
108*9a0e4156SSadaf Ebrahimi--
109*9a0e4156SSadaf Ebrahimi2.19.1
110*9a0e4156SSadaf Ebrahimi
111