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