• Home
  • History
  • Annotate
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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