1*9a0e4156SSadaf EbrahimiFrom a73fe8ac18d3ca81fa7a8d8c404cd7e0faf92ddc Mon Sep 17 00:00:00 2001 2*9a0e4156SSadaf EbrahimiFrom: mephi42 <[email protected]> 3*9a0e4156SSadaf EbrahimiDate: Tue, 7 Aug 2018 17:59:43 +0200 4*9a0e4156SSadaf EbrahimiSubject: [PATCH 3/7] capstone: generate *GenInstrInfo.inc 5*9a0e4156SSadaf Ebrahimi 6*9a0e4156SSadaf Ebrahimi--- 7*9a0e4156SSadaf Ebrahimi utils/TableGen/InstrInfoEmitter.cpp | 49 ++++++++++++++++++++++++++--- 8*9a0e4156SSadaf Ebrahimi 1 file changed, 44 insertions(+), 5 deletions(-) 9*9a0e4156SSadaf Ebrahimi 10*9a0e4156SSadaf Ebrahimidiff --git a/utils/TableGen/InstrInfoEmitter.cpp b/utils/TableGen/InstrInfoEmitter.cpp 11*9a0e4156SSadaf Ebrahimiindex 0aff1aa6f94..2f3a2729262 100644 12*9a0e4156SSadaf Ebrahimi--- a/utils/TableGen/InstrInfoEmitter.cpp 13*9a0e4156SSadaf Ebrahimi+++ b/utils/TableGen/InstrInfoEmitter.cpp 14*9a0e4156SSadaf Ebrahimi@@ -92,6 +92,7 @@ private: 15*9a0e4156SSadaf Ebrahimi 16*9a0e4156SSadaf Ebrahimi } // end anonymous namespace 17*9a0e4156SSadaf Ebrahimi 18*9a0e4156SSadaf Ebrahimi+#ifndef CAPSTONE 19*9a0e4156SSadaf Ebrahimi static void PrintDefList(const std::vector<Record*> &Uses, 20*9a0e4156SSadaf Ebrahimi unsigned Num, raw_ostream &OS) { 21*9a0e4156SSadaf Ebrahimi OS << "static const MCPhysReg ImplicitList" << Num << "[] = { "; 22*9a0e4156SSadaf Ebrahimi@@ -99,6 +100,7 @@ static void PrintDefList(const std::vector<Record*> &Uses, 23*9a0e4156SSadaf Ebrahimi OS << getQualifiedName(U) << ", "; 24*9a0e4156SSadaf Ebrahimi OS << "0 };\n"; 25*9a0e4156SSadaf Ebrahimi } 26*9a0e4156SSadaf Ebrahimi+#endif 27*9a0e4156SSadaf Ebrahimi 28*9a0e4156SSadaf Ebrahimi //===----------------------------------------------------------------------===// 29*9a0e4156SSadaf Ebrahimi // Operand Info Emission. 30*9a0e4156SSadaf Ebrahimi@@ -426,8 +428,17 @@ void InstrInfoEmitter::emitTIIHelperMethods(raw_ostream &OS) { 31*9a0e4156SSadaf Ebrahimi // run - Emit the main instruction description records for the target... 32*9a0e4156SSadaf Ebrahimi void InstrInfoEmitter::run(raw_ostream &OS) { 33*9a0e4156SSadaf Ebrahimi emitSourceFileHeader("Target Instruction Enum Values and Descriptors", OS); 34*9a0e4156SSadaf Ebrahimi+ 35*9a0e4156SSadaf Ebrahimi+#ifdef CAPSTONE 36*9a0e4156SSadaf Ebrahimi+ OS << "/* Capstone Disassembly Engine */\n" 37*9a0e4156SSadaf Ebrahimi+ "/* By Nguyen Anh Quynh <[email protected]>, 2013-2015 */\n" 38*9a0e4156SSadaf Ebrahimi+ "\n" 39*9a0e4156SSadaf Ebrahimi+ "\n"; 40*9a0e4156SSadaf Ebrahimi+#endif 41*9a0e4156SSadaf Ebrahimi+ 42*9a0e4156SSadaf Ebrahimi emitEnums(OS); 43*9a0e4156SSadaf Ebrahimi 44*9a0e4156SSadaf Ebrahimi+#ifndef CAPSTONE 45*9a0e4156SSadaf Ebrahimi OS << "#ifdef GET_INSTRINFO_MC_DESC\n"; 46*9a0e4156SSadaf Ebrahimi OS << "#undef GET_INSTRINFO_MC_DESC\n"; 47*9a0e4156SSadaf Ebrahimi 48*9a0e4156SSadaf Ebrahimi@@ -545,6 +556,7 @@ void InstrInfoEmitter::run(raw_ostream &OS) { 49*9a0e4156SSadaf Ebrahimi emitOperandTypesEnum(OS, Target); 50*9a0e4156SSadaf Ebrahimi 51*9a0e4156SSadaf Ebrahimi emitMCIIHelperMethods(OS); 52*9a0e4156SSadaf Ebrahimi+#endif 53*9a0e4156SSadaf Ebrahimi } 54*9a0e4156SSadaf Ebrahimi 55*9a0e4156SSadaf Ebrahimi void InstrInfoEmitter::emitRecord(const CodeGenInstruction &Inst, unsigned Num, 56*9a0e4156SSadaf Ebrahimi@@ -659,7 +671,9 @@ void InstrInfoEmitter::emitEnums(raw_ostream &OS) { 57*9a0e4156SSadaf Ebrahimi OS << "#ifdef GET_INSTRINFO_ENUM\n"; 58*9a0e4156SSadaf Ebrahimi OS << "#undef GET_INSTRINFO_ENUM\n"; 59*9a0e4156SSadaf Ebrahimi 60*9a0e4156SSadaf Ebrahimi+#ifndef CAPSTONE 61*9a0e4156SSadaf Ebrahimi OS << "namespace llvm {\n\n"; 62*9a0e4156SSadaf Ebrahimi+#endif 63*9a0e4156SSadaf Ebrahimi 64*9a0e4156SSadaf Ebrahimi CodeGenTarget Target(Records); 65*9a0e4156SSadaf Ebrahimi 66*9a0e4156SSadaf Ebrahimi@@ -669,17 +683,39 @@ void InstrInfoEmitter::emitEnums(raw_ostream &OS) { 67*9a0e4156SSadaf Ebrahimi if (Namespace.empty()) 68*9a0e4156SSadaf Ebrahimi PrintFatalError("No instructions defined!"); 69*9a0e4156SSadaf Ebrahimi 70*9a0e4156SSadaf Ebrahimi+#ifndef CAPSTONE 71*9a0e4156SSadaf Ebrahimi OS << "namespace " << Namespace << " {\n"; 72*9a0e4156SSadaf Ebrahimi- OS << " enum {\n"; 73*9a0e4156SSadaf Ebrahimi+#endif 74*9a0e4156SSadaf Ebrahimi+#ifdef CAPSTONE 75*9a0e4156SSadaf Ebrahimi+ OS << "\n" 76*9a0e4156SSadaf Ebrahimi+#else 77*9a0e4156SSadaf Ebrahimi+ OS << " " 78*9a0e4156SSadaf Ebrahimi+#endif 79*9a0e4156SSadaf Ebrahimi+ << "enum {\n"; 80*9a0e4156SSadaf Ebrahimi unsigned Num = 0; 81*9a0e4156SSadaf Ebrahimi for (const CodeGenInstruction *Inst : Target.getInstructionsByEnumValue()) 82*9a0e4156SSadaf Ebrahimi- OS << " " << Inst->TheDef->getName() << "\t= " << Num++ << ",\n"; 83*9a0e4156SSadaf Ebrahimi- OS << " INSTRUCTION_LIST_END = " << Num << "\n"; 84*9a0e4156SSadaf Ebrahimi+ OS << " " 85*9a0e4156SSadaf Ebrahimi+#ifdef CAPSTONE 86*9a0e4156SSadaf Ebrahimi+ << Target.getName() << "_" 87*9a0e4156SSadaf Ebrahimi+#endif 88*9a0e4156SSadaf Ebrahimi+ << Inst->TheDef->getName() << "\t= " << Num++ << ",\n"; 89*9a0e4156SSadaf Ebrahimi+ OS << " " 90*9a0e4156SSadaf Ebrahimi+#ifdef CAPSTONE 91*9a0e4156SSadaf Ebrahimi+ << Target.getName() << "_" 92*9a0e4156SSadaf Ebrahimi+#endif 93*9a0e4156SSadaf Ebrahimi+ << "INSTRUCTION_LIST_END = " << Num << "\n"; 94*9a0e4156SSadaf Ebrahimi OS << " };\n\n"; 95*9a0e4156SSadaf Ebrahimi+#ifndef CAPSTONE 96*9a0e4156SSadaf Ebrahimi OS << "} // end " << Namespace << " namespace\n"; 97*9a0e4156SSadaf Ebrahimi OS << "} // end llvm namespace\n"; 98*9a0e4156SSadaf Ebrahimi- OS << "#endif // GET_INSTRINFO_ENUM\n\n"; 99*9a0e4156SSadaf Ebrahimi- 100*9a0e4156SSadaf Ebrahimi+#endif 101*9a0e4156SSadaf Ebrahimi+ OS << "#endif // GET_INSTRINFO_ENUM\n" 102*9a0e4156SSadaf Ebrahimi+#ifndef CAPSTONE 103*9a0e4156SSadaf Ebrahimi+ << "\n" 104*9a0e4156SSadaf Ebrahimi+#endif 105*9a0e4156SSadaf Ebrahimi+ ; 106*9a0e4156SSadaf Ebrahimi+ 107*9a0e4156SSadaf Ebrahimi+#ifndef CAPSTONE 108*9a0e4156SSadaf Ebrahimi OS << "#ifdef GET_INSTRINFO_SCHED_ENUM\n"; 109*9a0e4156SSadaf Ebrahimi OS << "#undef GET_INSTRINFO_SCHED_ENUM\n"; 110*9a0e4156SSadaf Ebrahimi OS << "namespace llvm {\n\n"; 111*9a0e4156SSadaf Ebrahimi@@ -696,13 +732,16 @@ void InstrInfoEmitter::emitEnums(raw_ostream &OS) { 112*9a0e4156SSadaf Ebrahimi OS << "} // end llvm namespace\n"; 113*9a0e4156SSadaf Ebrahimi 114*9a0e4156SSadaf Ebrahimi OS << "#endif // GET_INSTRINFO_SCHED_ENUM\n\n"; 115*9a0e4156SSadaf Ebrahimi+#endif 116*9a0e4156SSadaf Ebrahimi } 117*9a0e4156SSadaf Ebrahimi 118*9a0e4156SSadaf Ebrahimi namespace llvm { 119*9a0e4156SSadaf Ebrahimi 120*9a0e4156SSadaf Ebrahimi void EmitInstrInfo(RecordKeeper &RK, raw_ostream &OS) { 121*9a0e4156SSadaf Ebrahimi InstrInfoEmitter(RK).run(OS); 122*9a0e4156SSadaf Ebrahimi+#ifndef CAPSTONE 123*9a0e4156SSadaf Ebrahimi EmitMapTable(RK, OS); 124*9a0e4156SSadaf Ebrahimi+#endif 125*9a0e4156SSadaf Ebrahimi } 126*9a0e4156SSadaf Ebrahimi 127*9a0e4156SSadaf Ebrahimi } // end llvm namespace 128*9a0e4156SSadaf Ebrahimi-- 129*9a0e4156SSadaf Ebrahimi2.19.1 130*9a0e4156SSadaf Ebrahimi 131