1From 46ca491e1bbbc9ace2a91fe6a7b112c83b9b88cc Mon Sep 17 00:00:00 2001 2From: mephi42 <mephi42@gmail.com> 3Date: Tue, 7 Aug 2018 17:42:59 +0200 4Subject: [PATCH 2/7] capstone: generate *GenSubtargetInfo.inc 5 6--- 7 utils/TableGen/SubtargetEmitter.cpp | 28 +++++++++++++++++++++++++++- 8 1 file changed, 27 insertions(+), 1 deletion(-) 9 10diff --git a/utils/TableGen/SubtargetEmitter.cpp b/utils/TableGen/SubtargetEmitter.cpp 11index c5da8d8142f..98ab3240472 100644 12--- a/utils/TableGen/SubtargetEmitter.cpp 13+++ b/utils/TableGen/SubtargetEmitter.cpp 14@@ -147,7 +147,9 @@ void SubtargetEmitter::Enumeration(raw_ostream &OS) { 15 if (N > MAX_SUBTARGET_FEATURES) 16 PrintFatalError("Too many subtarget features! Bump MAX_SUBTARGET_FEATURES."); 17 18+#ifndef CAPSTONE 19 OS << "namespace " << Target << " {\n"; 20+#endif 21 22 // Open enumeration. 23 OS << "enum {\n"; 24@@ -158,12 +160,22 @@ void SubtargetEmitter::Enumeration(raw_ostream &OS) { 25 Record *Def = DefList[i]; 26 27 // Get and emit name 28- OS << " " << Def->getName() << " = " << i << ",\n"; 29+ OS << " " 30+#ifdef CAPSTONE 31+ << Target << "_" 32+#endif 33+ << Def->getName() << " = " 34+#ifdef CAPSTONE 35+ << "1ULL << " 36+#endif 37+ << i << ",\n"; 38 } 39 40 // Close enumeration and namespace 41 OS << "};\n"; 42+#ifndef CAPSTONE 43 OS << "} // end namespace " << Target << "\n"; 44+#endif 45 } 46 47 // 48@@ -1709,14 +1721,27 @@ void SubtargetEmitter::emitGenMCSubtargetInfo(raw_ostream &OS) { 49 void SubtargetEmitter::run(raw_ostream &OS) { 50 emitSourceFileHeader("Subtarget Enumeration Source Fragment", OS); 51 52+#ifdef CAPSTONE 53+ OS << "/* Capstone Disassembly Engine, http://www.capstone-engine.org */\n" 54+ "/* By Nguyen Anh Quynh <aquynh@gmail.com>, 2013-2015 */\n" 55+ "\n"; 56+#endif 57+ 58 OS << "\n#ifdef GET_SUBTARGETINFO_ENUM\n"; 59 OS << "#undef GET_SUBTARGETINFO_ENUM\n\n"; 60 61+#ifndef CAPSTONE 62 OS << "namespace llvm {\n"; 63+#endif 64 Enumeration(OS); 65+#ifdef CAPSTONE 66+ OS << "\n"; 67+#else 68 OS << "} // end namespace llvm\n\n"; 69+#endif 70 OS << "#endif // GET_SUBTARGETINFO_ENUM\n\n"; 71 72+#ifndef CAPSTONE 73 OS << "\n#ifdef GET_SUBTARGETINFO_MC_DESC\n"; 74 OS << "#undef GET_SUBTARGETINFO_MC_DESC\n\n"; 75 76@@ -1857,6 +1882,7 @@ void SubtargetEmitter::run(raw_ostream &OS) { 77 OS << "} // end namespace llvm\n\n"; 78 79 OS << "#endif // GET_SUBTARGETINFO_CTOR\n\n"; 80+#endif 81 } 82 83 namespace llvm { 84-- 852.19.1 86 87