1*9a0e4156SSadaf EbrahimiFrom 5d631cb16e7ba5dd0380ff1ee9dda192b1cdad18 Mon Sep 17 00:00:00 2001
2*9a0e4156SSadaf EbrahimiFrom: mephi42 <[email protected]>
3*9a0e4156SSadaf EbrahimiDate: Tue, 7 Aug 2018 17:02:40 +0200
4*9a0e4156SSadaf EbrahimiSubject: [PATCH 1/7] capstone: generate *GenRegisterInfo.inc
5*9a0e4156SSadaf Ebrahimi
6*9a0e4156SSadaf Ebrahimi---
7*9a0e4156SSadaf Ebrahimi utils/TableGen/RegisterInfoEmitter.cpp | 130 ++++++++++++++++++++++---
8*9a0e4156SSadaf Ebrahimi 1 file changed, 115 insertions(+), 15 deletions(-)
9*9a0e4156SSadaf Ebrahimi
10*9a0e4156SSadaf Ebrahimidiff --git a/utils/TableGen/RegisterInfoEmitter.cpp b/utils/TableGen/RegisterInfoEmitter.cpp
11*9a0e4156SSadaf Ebrahimiindex 49016cca799..6ebb7148b1b 100644
12*9a0e4156SSadaf Ebrahimi--- a/utils/TableGen/RegisterInfoEmitter.cpp
13*9a0e4156SSadaf Ebrahimi+++ b/utils/TableGen/RegisterInfoEmitter.cpp
14*9a0e4156SSadaf Ebrahimi@@ -99,6 +99,12 @@ private:
15*9a0e4156SSadaf Ebrahimi
16*9a0e4156SSadaf Ebrahimi } // end anonymous namespace
17*9a0e4156SSadaf Ebrahimi
18*9a0e4156SSadaf Ebrahimi+#ifdef CAPSTONE
19*9a0e4156SSadaf Ebrahimi+#define NAME_PREFIX Target.getName() << "_" <<
20*9a0e4156SSadaf Ebrahimi+#else
21*9a0e4156SSadaf Ebrahimi+#define NAME_PREFIX
22*9a0e4156SSadaf Ebrahimi+#endif
23*9a0e4156SSadaf Ebrahimi+
24*9a0e4156SSadaf Ebrahimi // runEnums - Print out enum values for all of the registers.
25*9a0e4156SSadaf Ebrahimi void RegisterInfoEmitter::runEnums(raw_ostream &OS,
26*9a0e4156SSadaf Ebrahimi                                    CodeGenTarget &Target, CodeGenRegBank &Bank) {
27*9a0e4156SSadaf Ebrahimi@@ -107,13 +113,22 @@ void RegisterInfoEmitter::runEnums(raw_ostream &OS,
28*9a0e4156SSadaf Ebrahimi   // Register enums are stored as uint16_t in the tables. Make sure we'll fit.
29*9a0e4156SSadaf Ebrahimi   assert(Registers.size() <= 0xffff && "Too many regs to fit in tables");
30*9a0e4156SSadaf Ebrahimi
31*9a0e4156SSadaf Ebrahimi+#ifndef CAPSTONE
32*9a0e4156SSadaf Ebrahimi   StringRef Namespace = Registers.front().TheDef->getValueAsString("Namespace");
33*9a0e4156SSadaf Ebrahimi+#endif
34*9a0e4156SSadaf Ebrahimi
35*9a0e4156SSadaf Ebrahimi   emitSourceFileHeader("Target Register Enum Values", OS);
36*9a0e4156SSadaf Ebrahimi
37*9a0e4156SSadaf Ebrahimi+#ifdef CAPSTONE
38*9a0e4156SSadaf Ebrahimi+  OS << "/* Capstone Disassembly Engine */\n"
39*9a0e4156SSadaf Ebrahimi+        "/* By Nguyen Anh Quynh <[email protected]>, 2013-2015 */\n"
40*9a0e4156SSadaf Ebrahimi+        "\n";
41*9a0e4156SSadaf Ebrahimi+#endif
42*9a0e4156SSadaf Ebrahimi+
43*9a0e4156SSadaf Ebrahimi   OS << "\n#ifdef GET_REGINFO_ENUM\n";
44*9a0e4156SSadaf Ebrahimi   OS << "#undef GET_REGINFO_ENUM\n\n";
45*9a0e4156SSadaf Ebrahimi
46*9a0e4156SSadaf Ebrahimi+#ifndef CAPSTONE
47*9a0e4156SSadaf Ebrahimi   OS << "namespace llvm {\n\n";
48*9a0e4156SSadaf Ebrahimi
49*9a0e4156SSadaf Ebrahimi   OS << "class MCRegisterClass;\n"
50*9a0e4156SSadaf Ebrahimi@@ -122,16 +137,20 @@ void RegisterInfoEmitter::runEnums(raw_ostream &OS,
51*9a0e4156SSadaf Ebrahimi
52*9a0e4156SSadaf Ebrahimi   if (!Namespace.empty())
53*9a0e4156SSadaf Ebrahimi     OS << "namespace " << Namespace << " {\n";
54*9a0e4156SSadaf Ebrahimi-  OS << "enum {\n  NoRegister,\n";
55*9a0e4156SSadaf Ebrahimi+#endif
56*9a0e4156SSadaf Ebrahimi+
57*9a0e4156SSadaf Ebrahimi+  OS << "enum {\n  " << NAME_PREFIX "NoRegister,\n";
58*9a0e4156SSadaf Ebrahimi
59*9a0e4156SSadaf Ebrahimi   for (const auto &Reg : Registers)
60*9a0e4156SSadaf Ebrahimi-    OS << "  " << Reg.getName() << " = " << Reg.EnumValue << ",\n";
61*9a0e4156SSadaf Ebrahimi+    OS << "  " << NAME_PREFIX Reg.getName() << " = " << Reg.EnumValue << ",\n";
62*9a0e4156SSadaf Ebrahimi   assert(Registers.size() == Registers.back().EnumValue &&
63*9a0e4156SSadaf Ebrahimi          "Register enum value mismatch!");
64*9a0e4156SSadaf Ebrahimi-  OS << "  NUM_TARGET_REGS \t// " << Registers.size()+1 << "\n";
65*9a0e4156SSadaf Ebrahimi+  OS << "  " << NAME_PREFIX "NUM_TARGET_REGS \t// " << Registers.size()+1 << "\n";
66*9a0e4156SSadaf Ebrahimi   OS << "};\n";
67*9a0e4156SSadaf Ebrahimi+#ifndef CAPSTONE
68*9a0e4156SSadaf Ebrahimi   if (!Namespace.empty())
69*9a0e4156SSadaf Ebrahimi     OS << "} // end namespace " << Namespace << "\n";
70*9a0e4156SSadaf Ebrahimi+#endif
71*9a0e4156SSadaf Ebrahimi
72*9a0e4156SSadaf Ebrahimi   const auto &RegisterClasses = Bank.getRegClasses();
73*9a0e4156SSadaf Ebrahimi   if (!RegisterClasses.empty()) {
74*9a0e4156SSadaf Ebrahimi@@ -140,18 +159,29 @@ void RegisterInfoEmitter::runEnums(raw_ostream &OS,
75*9a0e4156SSadaf Ebrahimi     assert(RegisterClasses.size() <= 0xffff &&
76*9a0e4156SSadaf Ebrahimi            "Too many register classes to fit in tables");
77*9a0e4156SSadaf Ebrahimi
78*9a0e4156SSadaf Ebrahimi-    OS << "\n// Register classes\n\n";
79*9a0e4156SSadaf Ebrahimi+    OS << "\n// Register classes\n";
80*9a0e4156SSadaf Ebrahimi+#ifndef CAPSTONE
81*9a0e4156SSadaf Ebrahimi+    OS << "\n";
82*9a0e4156SSadaf Ebrahimi     if (!Namespace.empty())
83*9a0e4156SSadaf Ebrahimi       OS << "namespace " << Namespace << " {\n";
84*9a0e4156SSadaf Ebrahimi+#endif
85*9a0e4156SSadaf Ebrahimi     OS << "enum {\n";
86*9a0e4156SSadaf Ebrahimi     for (const auto &RC : RegisterClasses)
87*9a0e4156SSadaf Ebrahimi-      OS << "  " << RC.getName() << "RegClassID"
88*9a0e4156SSadaf Ebrahimi+      OS << "  " << NAME_PREFIX RC.getName() << "RegClassID"
89*9a0e4156SSadaf Ebrahimi          << " = " << RC.EnumValue << ",\n";
90*9a0e4156SSadaf Ebrahimi-    OS << "\n  };\n";
91*9a0e4156SSadaf Ebrahimi+#ifdef CAPSTONE
92*9a0e4156SSadaf Ebrahimi+    OS
93*9a0e4156SSadaf Ebrahimi+#else
94*9a0e4156SSadaf Ebrahimi+    OS << "\n  "
95*9a0e4156SSadaf Ebrahimi+#endif
96*9a0e4156SSadaf Ebrahimi+       << "};\n";
97*9a0e4156SSadaf Ebrahimi+#ifndef CAPSTONE
98*9a0e4156SSadaf Ebrahimi     if (!Namespace.empty())
99*9a0e4156SSadaf Ebrahimi       OS << "} // end namespace " << Namespace << "\n\n";
100*9a0e4156SSadaf Ebrahimi+#endif
101*9a0e4156SSadaf Ebrahimi   }
102*9a0e4156SSadaf Ebrahimi
103*9a0e4156SSadaf Ebrahimi+#ifndef CAPSTONE
104*9a0e4156SSadaf Ebrahimi   const std::vector<Record*> &RegAltNameIndices = Target.getRegAltNameIndices();
105*9a0e4156SSadaf Ebrahimi   // If the only definition is the default NoRegAltName, we don't need to
106*9a0e4156SSadaf Ebrahimi   // emit anything.
107*9a0e4156SSadaf Ebrahimi@@ -182,8 +212,11 @@ void RegisterInfoEmitter::runEnums(raw_ostream &OS,
108*9a0e4156SSadaf Ebrahimi     if (!Namespace.empty())
109*9a0e4156SSadaf Ebrahimi       OS << "} // end namespace " << Namespace << "\n\n";
110*9a0e4156SSadaf Ebrahimi   }
111*9a0e4156SSadaf Ebrahimi+#endif
112*9a0e4156SSadaf Ebrahimi
113*9a0e4156SSadaf Ebrahimi+#ifndef CAPSTONE
114*9a0e4156SSadaf Ebrahimi   OS << "} // end namespace llvm\n\n";
115*9a0e4156SSadaf Ebrahimi+#endif
116*9a0e4156SSadaf Ebrahimi   OS << "#endif // GET_REGINFO_ENUM\n\n";
117*9a0e4156SSadaf Ebrahimi }
118*9a0e4156SSadaf Ebrahimi
119*9a0e4156SSadaf Ebrahimi@@ -830,7 +863,9 @@ RegisterInfoEmitter::runMCDesc(raw_ostream &OS, CodeGenTarget &Target,
120*9a0e4156SSadaf Ebrahimi
121*9a0e4156SSadaf Ebrahimi   const auto &Regs = RegBank.getRegisters();
122*9a0e4156SSadaf Ebrahimi
123*9a0e4156SSadaf Ebrahimi+#ifndef CAPSTONE
124*9a0e4156SSadaf Ebrahimi   auto &SubRegIndices = RegBank.getSubRegIndices();
125*9a0e4156SSadaf Ebrahimi+#endif
126*9a0e4156SSadaf Ebrahimi   // The lists of sub-registers and super-registers go in the same array.  That
127*9a0e4156SSadaf Ebrahimi   // allows us to share suffixes.
128*9a0e4156SSadaf Ebrahimi   typedef std::vector<const CodeGenRegister*> RegVec;
129*9a0e4156SSadaf Ebrahimi@@ -922,25 +957,40 @@ RegisterInfoEmitter::runMCDesc(raw_ostream &OS, CodeGenTarget &Target,
130*9a0e4156SSadaf Ebrahimi   LaneMaskSeqs.layout();
131*9a0e4156SSadaf Ebrahimi   SubRegIdxSeqs.layout();
132*9a0e4156SSadaf Ebrahimi
133*9a0e4156SSadaf Ebrahimi+#ifndef CAPSTONE
134*9a0e4156SSadaf Ebrahimi   OS << "namespace llvm {\n\n";
135*9a0e4156SSadaf Ebrahimi+#endif
136*9a0e4156SSadaf Ebrahimi
137*9a0e4156SSadaf Ebrahimi   const std::string &TargetName = Target.getName();
138*9a0e4156SSadaf Ebrahimi
139*9a0e4156SSadaf Ebrahimi   // Emit the shared table of differential lists.
140*9a0e4156SSadaf Ebrahimi-  OS << "extern const MCPhysReg " << TargetName << "RegDiffLists[] = {\n";
141*9a0e4156SSadaf Ebrahimi+#ifdef CAPSTONE
142*9a0e4156SSadaf Ebrahimi+  OS << "static"
143*9a0e4156SSadaf Ebrahimi+#else
144*9a0e4156SSadaf Ebrahimi+  OS << "extern"
145*9a0e4156SSadaf Ebrahimi+#endif
146*9a0e4156SSadaf Ebrahimi+     << " const MCPhysReg " << TargetName << "RegDiffLists[] = {\n";
147*9a0e4156SSadaf Ebrahimi   DiffSeqs.emit(OS, printDiff16);
148*9a0e4156SSadaf Ebrahimi   OS << "};\n\n";
149*9a0e4156SSadaf Ebrahimi
150*9a0e4156SSadaf Ebrahimi+#ifndef CAPSTONE
151*9a0e4156SSadaf Ebrahimi   // Emit the shared table of regunit lane mask sequences.
152*9a0e4156SSadaf Ebrahimi   OS << "extern const LaneBitmask " << TargetName << "LaneMaskLists[] = {\n";
153*9a0e4156SSadaf Ebrahimi   LaneMaskSeqs.emit(OS, printMask, "LaneBitmask::getAll()");
154*9a0e4156SSadaf Ebrahimi   OS << "};\n\n";
155*9a0e4156SSadaf Ebrahimi+#endif
156*9a0e4156SSadaf Ebrahimi
157*9a0e4156SSadaf Ebrahimi   // Emit the table of sub-register indexes.
158*9a0e4156SSadaf Ebrahimi-  OS << "extern const uint16_t " << TargetName << "SubRegIdxLists[] = {\n";
159*9a0e4156SSadaf Ebrahimi+#ifdef CAPSTONE
160*9a0e4156SSadaf Ebrahimi+  OS << "static"
161*9a0e4156SSadaf Ebrahimi+#else
162*9a0e4156SSadaf Ebrahimi+  OS << "extern"
163*9a0e4156SSadaf Ebrahimi+#endif
164*9a0e4156SSadaf Ebrahimi+     << " const uint16_t " << TargetName << "SubRegIdxLists[] = {\n";
165*9a0e4156SSadaf Ebrahimi   SubRegIdxSeqs.emit(OS, printSubRegIndex);
166*9a0e4156SSadaf Ebrahimi   OS << "};\n\n";
167*9a0e4156SSadaf Ebrahimi
168*9a0e4156SSadaf Ebrahimi+#ifndef CAPSTONE
169*9a0e4156SSadaf Ebrahimi   // Emit the table of sub-register index sizes.
170*9a0e4156SSadaf Ebrahimi   OS << "extern const MCRegisterInfo::SubRegCoveredBits "
171*9a0e4156SSadaf Ebrahimi      << TargetName << "SubRegIdxRanges[] = {\n";
172*9a0e4156SSadaf Ebrahimi@@ -950,14 +1000,22 @@ RegisterInfoEmitter::runMCDesc(raw_ostream &OS, CodeGenTarget &Target,
173*9a0e4156SSadaf Ebrahimi        << Idx.getName() << "\n";
174*9a0e4156SSadaf Ebrahimi   }
175*9a0e4156SSadaf Ebrahimi   OS << "};\n\n";
176*9a0e4156SSadaf Ebrahimi+#endif
177*9a0e4156SSadaf Ebrahimi
178*9a0e4156SSadaf Ebrahimi   // Emit the string table.
179*9a0e4156SSadaf Ebrahimi   RegStrings.layout();
180*9a0e4156SSadaf Ebrahimi+#ifndef CAPSTONE
181*9a0e4156SSadaf Ebrahimi   OS << "extern const char " << TargetName << "RegStrings[] = {\n";
182*9a0e4156SSadaf Ebrahimi   RegStrings.emit(OS, printChar);
183*9a0e4156SSadaf Ebrahimi   OS << "};\n\n";
184*9a0e4156SSadaf Ebrahimi+#endif
185*9a0e4156SSadaf Ebrahimi
186*9a0e4156SSadaf Ebrahimi-  OS << "extern const MCRegisterDesc " << TargetName
187*9a0e4156SSadaf Ebrahimi+#ifdef CAPSTONE
188*9a0e4156SSadaf Ebrahimi+  OS << "static"
189*9a0e4156SSadaf Ebrahimi+#else
190*9a0e4156SSadaf Ebrahimi+  OS << "extern"
191*9a0e4156SSadaf Ebrahimi+#endif
192*9a0e4156SSadaf Ebrahimi+     << " const MCRegisterDesc " << TargetName
193*9a0e4156SSadaf Ebrahimi      << "RegDesc[] = { // Descriptors\n";
194*9a0e4156SSadaf Ebrahimi   OS << "  { " << RegStrings.get("") << ", 0, 0, 0, 0, 0 },\n";
195*9a0e4156SSadaf Ebrahimi
196*9a0e4156SSadaf Ebrahimi@@ -973,6 +1031,7 @@ RegisterInfoEmitter::runMCDesc(raw_ostream &OS, CodeGenTarget &Target,
197*9a0e4156SSadaf Ebrahimi   }
198*9a0e4156SSadaf Ebrahimi   OS << "};\n\n";      // End of register descriptors...
199*9a0e4156SSadaf Ebrahimi
200*9a0e4156SSadaf Ebrahimi+#ifndef CAPSTONE
201*9a0e4156SSadaf Ebrahimi   // Emit the table of register unit roots. Each regunit has one or two root
202*9a0e4156SSadaf Ebrahimi   // registers.
203*9a0e4156SSadaf Ebrahimi   OS << "extern const MCPhysReg " << TargetName << "RegUnitRoots[][2] = {\n";
204*9a0e4156SSadaf Ebrahimi@@ -986,11 +1045,14 @@ RegisterInfoEmitter::runMCDesc(raw_ostream &OS, CodeGenTarget &Target,
205*9a0e4156SSadaf Ebrahimi     OS << " },\n";
206*9a0e4156SSadaf Ebrahimi   }
207*9a0e4156SSadaf Ebrahimi   OS << "};\n\n";
208*9a0e4156SSadaf Ebrahimi+#endif
209*9a0e4156SSadaf Ebrahimi
210*9a0e4156SSadaf Ebrahimi   const auto &RegisterClasses = RegBank.getRegClasses();
211*9a0e4156SSadaf Ebrahimi
212*9a0e4156SSadaf Ebrahimi   // Loop over all of the register classes... emitting each one.
213*9a0e4156SSadaf Ebrahimi+#ifndef CAPSTONE
214*9a0e4156SSadaf Ebrahimi   OS << "namespace {     // Register classes...\n";
215*9a0e4156SSadaf Ebrahimi+#endif
216*9a0e4156SSadaf Ebrahimi
217*9a0e4156SSadaf Ebrahimi   SequenceToOffsetTable<std::string> RegClassStrings;
218*9a0e4156SSadaf Ebrahimi
219*9a0e4156SSadaf Ebrahimi@@ -1005,15 +1067,28 @@ RegisterInfoEmitter::runMCDesc(raw_ostream &OS, CodeGenTarget &Target,
220*9a0e4156SSadaf Ebrahimi
221*9a0e4156SSadaf Ebrahimi     // Emit the register list now.
222*9a0e4156SSadaf Ebrahimi     OS << "  // " << Name << " Register Class...\n"
223*9a0e4156SSadaf Ebrahimi-       << "  const MCPhysReg " << Name
224*9a0e4156SSadaf Ebrahimi+       << "  "
225*9a0e4156SSadaf Ebrahimi+#ifdef CAPSTONE
226*9a0e4156SSadaf Ebrahimi+       << "static "
227*9a0e4156SSadaf Ebrahimi+#endif
228*9a0e4156SSadaf Ebrahimi+       << "const MCPhysReg " << Name
229*9a0e4156SSadaf Ebrahimi        << "[] = {\n    ";
230*9a0e4156SSadaf Ebrahimi     for (Record *Reg : Order) {
231*9a0e4156SSadaf Ebrahimi-      OS << getQualifiedName(Reg) << ", ";
232*9a0e4156SSadaf Ebrahimi+#ifdef CAPSTONE
233*9a0e4156SSadaf Ebrahimi+      OS << NAME_PREFIX Reg->getName()
234*9a0e4156SSadaf Ebrahimi+#else
235*9a0e4156SSadaf Ebrahimi+      OS << getQualifiedName(Reg)
236*9a0e4156SSadaf Ebrahimi+#endif
237*9a0e4156SSadaf Ebrahimi+         << ", ";
238*9a0e4156SSadaf Ebrahimi     }
239*9a0e4156SSadaf Ebrahimi     OS << "\n  };\n\n";
240*9a0e4156SSadaf Ebrahimi
241*9a0e4156SSadaf Ebrahimi     OS << "  // " << Name << " Bit set.\n"
242*9a0e4156SSadaf Ebrahimi-       << "  const uint8_t " << Name
243*9a0e4156SSadaf Ebrahimi+       << "  "
244*9a0e4156SSadaf Ebrahimi+#ifdef CAPSTONE
245*9a0e4156SSadaf Ebrahimi+       << "static "
246*9a0e4156SSadaf Ebrahimi+#endif
247*9a0e4156SSadaf Ebrahimi+       << "const uint8_t " << Name
248*9a0e4156SSadaf Ebrahimi        << "Bits[] = {\n    ";
249*9a0e4156SSadaf Ebrahimi     BitVectorEmitter BVE;
250*9a0e4156SSadaf Ebrahimi     for (Record *Reg : Order) {
251*9a0e4156SSadaf Ebrahimi@@ -1023,14 +1098,23 @@ RegisterInfoEmitter::runMCDesc(raw_ostream &OS, CodeGenTarget &Target,
252*9a0e4156SSadaf Ebrahimi     OS << "\n  };\n\n";
253*9a0e4156SSadaf Ebrahimi
254*9a0e4156SSadaf Ebrahimi   }
255*9a0e4156SSadaf Ebrahimi+#ifndef CAPSTONE
256*9a0e4156SSadaf Ebrahimi   OS << "} // end anonymous namespace\n\n";
257*9a0e4156SSadaf Ebrahimi+#endif
258*9a0e4156SSadaf Ebrahimi
259*9a0e4156SSadaf Ebrahimi   RegClassStrings.layout();
260*9a0e4156SSadaf Ebrahimi+#ifndef CAPSTONE
261*9a0e4156SSadaf Ebrahimi   OS << "extern const char " << TargetName << "RegClassStrings[] = {\n";
262*9a0e4156SSadaf Ebrahimi   RegClassStrings.emit(OS, printChar);
263*9a0e4156SSadaf Ebrahimi   OS << "};\n\n";
264*9a0e4156SSadaf Ebrahimi+#endif
265*9a0e4156SSadaf Ebrahimi
266*9a0e4156SSadaf Ebrahimi-  OS << "extern const MCRegisterClass " << TargetName
267*9a0e4156SSadaf Ebrahimi+#ifdef CAPSTONE
268*9a0e4156SSadaf Ebrahimi+  OS << "static"
269*9a0e4156SSadaf Ebrahimi+#else
270*9a0e4156SSadaf Ebrahimi+  OS << "extern"
271*9a0e4156SSadaf Ebrahimi+#endif
272*9a0e4156SSadaf Ebrahimi+     << " const MCRegisterClass " << TargetName
273*9a0e4156SSadaf Ebrahimi      << "MCRegisterClasses[] = {\n";
274*9a0e4156SSadaf Ebrahimi
275*9a0e4156SSadaf Ebrahimi   for (const auto &RC : RegisterClasses) {
276*9a0e4156SSadaf Ebrahimi@@ -1041,7 +1125,12 @@ RegisterInfoEmitter::runMCDesc(raw_ostream &OS, CodeGenTarget &Target,
277*9a0e4156SSadaf Ebrahimi     OS << "  { " << RC.getName() << ", " << RC.getName() << "Bits, "
278*9a0e4156SSadaf Ebrahimi        << RegClassStrings.get(RC.getName()) << ", "
279*9a0e4156SSadaf Ebrahimi        << RC.getOrder().size() << ", sizeof(" << RC.getName() << "Bits), "
280*9a0e4156SSadaf Ebrahimi-       << RC.getQualifiedName() + "RegClassID" << ", "
281*9a0e4156SSadaf Ebrahimi+#ifdef CAPSTONE
282*9a0e4156SSadaf Ebrahimi+       << NAME_PREFIX RC.getName()
283*9a0e4156SSadaf Ebrahimi+#else
284*9a0e4156SSadaf Ebrahimi+       << RC.getQualifiedName()
285*9a0e4156SSadaf Ebrahimi+#endif
286*9a0e4156SSadaf Ebrahimi+       << "RegClassID" << ", "
287*9a0e4156SSadaf Ebrahimi        << RegSize/8 << ", "
288*9a0e4156SSadaf Ebrahimi        << RC.CopyCost << ", "
289*9a0e4156SSadaf Ebrahimi        << ( RC.Allocatable ? "true" : "false" ) << " },\n";
290*9a0e4156SSadaf Ebrahimi@@ -1049,6 +1138,7 @@ RegisterInfoEmitter::runMCDesc(raw_ostream &OS, CodeGenTarget &Target,
291*9a0e4156SSadaf Ebrahimi
292*9a0e4156SSadaf Ebrahimi   OS << "};\n\n";
293*9a0e4156SSadaf Ebrahimi
294*9a0e4156SSadaf Ebrahimi+#ifndef CAPSTONE
295*9a0e4156SSadaf Ebrahimi   EmitRegMappingTables(OS, Regs, false);
296*9a0e4156SSadaf Ebrahimi
297*9a0e4156SSadaf Ebrahimi   // Emit Reg encoding table
298*9a0e4156SSadaf Ebrahimi@@ -1067,7 +1157,9 @@ RegisterInfoEmitter::runMCDesc(raw_ostream &OS, CodeGenTarget &Target,
299*9a0e4156SSadaf Ebrahimi     OS << "  " << Value << ",\n";
300*9a0e4156SSadaf Ebrahimi   }
301*9a0e4156SSadaf Ebrahimi   OS << "};\n";       // End of HW encoding table
302*9a0e4156SSadaf Ebrahimi+#endif
303*9a0e4156SSadaf Ebrahimi
304*9a0e4156SSadaf Ebrahimi+#ifndef CAPSTONE
305*9a0e4156SSadaf Ebrahimi   // MCRegisterInfo initialization routine.
306*9a0e4156SSadaf Ebrahimi   OS << "static inline void Init" << TargetName
307*9a0e4156SSadaf Ebrahimi      << "MCRegisterInfo(MCRegisterInfo *RI, unsigned RA, "
308*9a0e4156SSadaf Ebrahimi@@ -1088,7 +1180,12 @@ RegisterInfoEmitter::runMCDesc(raw_ostream &OS, CodeGenTarget &Target,
309*9a0e4156SSadaf Ebrahimi   OS << "}\n\n";
310*9a0e4156SSadaf Ebrahimi
311*9a0e4156SSadaf Ebrahimi   OS << "} // end namespace llvm\n\n";
312*9a0e4156SSadaf Ebrahimi-  OS << "#endif // GET_REGINFO_MC_DESC\n\n";
313*9a0e4156SSadaf Ebrahimi+#endif
314*9a0e4156SSadaf Ebrahimi+  OS << "#endif // GET_REGINFO_MC_DESC\n"
315*9a0e4156SSadaf Ebrahimi+#ifndef CAPSTONE
316*9a0e4156SSadaf Ebrahimi+     << "\n"
317*9a0e4156SSadaf Ebrahimi+#endif
318*9a0e4156SSadaf Ebrahimi+     ;
319*9a0e4156SSadaf Ebrahimi }
320*9a0e4156SSadaf Ebrahimi
321*9a0e4156SSadaf Ebrahimi void
322*9a0e4156SSadaf Ebrahimi@@ -1568,10 +1665,13 @@ RegisterInfoEmitter::runTargetDesc(raw_ostream &OS, CodeGenTarget &Target,
323*9a0e4156SSadaf Ebrahimi
324*9a0e4156SSadaf Ebrahimi void RegisterInfoEmitter::run(raw_ostream &OS) {
325*9a0e4156SSadaf Ebrahimi   CodeGenRegBank &RegBank = Target.getRegBank();
326*9a0e4156SSadaf Ebrahimi+
327*9a0e4156SSadaf Ebrahimi   runEnums(OS, Target, RegBank);
328*9a0e4156SSadaf Ebrahimi   runMCDesc(OS, Target, RegBank);
329*9a0e4156SSadaf Ebrahimi+#ifndef CAPSTONE
330*9a0e4156SSadaf Ebrahimi   runTargetHeader(OS, Target, RegBank);
331*9a0e4156SSadaf Ebrahimi   runTargetDesc(OS, Target, RegBank);
332*9a0e4156SSadaf Ebrahimi+#endif
333*9a0e4156SSadaf Ebrahimi
334*9a0e4156SSadaf Ebrahimi   if (RegisterInfoDebug)
335*9a0e4156SSadaf Ebrahimi     debugDump(errs());
336*9a0e4156SSadaf Ebrahimi--
337*9a0e4156SSadaf Ebrahimi2.19.1
338*9a0e4156SSadaf Ebrahimi
339