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