[llvm-commits] CVS: llvm/utils/TableGen/RegisterInfoEmitter.cpp
Jim Laskey
jlaskey at apple.com
Fri Mar 24 13:16:15 PST 2006
Changes in directory llvm/utils/TableGen:
RegisterInfoEmitter.cpp updated: 1.39 -> 1.40
---
Log message:
Add dwarf register numbering to register data.
---
Diffs of the changes: (+18 -1)
RegisterInfoEmitter.cpp | 19 ++++++++++++++++++-
1 files changed, 18 insertions(+), 1 deletion(-)
Index: llvm/utils/TableGen/RegisterInfoEmitter.cpp
diff -u llvm/utils/TableGen/RegisterInfoEmitter.cpp:1.39 llvm/utils/TableGen/RegisterInfoEmitter.cpp:1.40
--- llvm/utils/TableGen/RegisterInfoEmitter.cpp:1.39 Tue Dec 27 04:56:22 2005
+++ llvm/utils/TableGen/RegisterInfoEmitter.cpp Fri Mar 24 15:15:58 2006
@@ -60,7 +60,8 @@
<< " " << ClassName
<< "(int CallFrameSetupOpcode = -1, int CallFrameDestroyOpcode = -1);\n"
<< " const unsigned* getCalleeSaveRegs() const;\n"
- << "const TargetRegisterClass* const *getCalleeSaveRegClasses() const;\n"
+ << " const TargetRegisterClass* const *getCalleeSaveRegClasses() const;\n"
+ << " int getDwarfRegNum(unsigned RegNum) const;\n"
<< "};\n\n";
const std::vector<CodeGenRegisterClass> &RegisterClasses =
@@ -277,6 +278,22 @@
OS << "&" << getQualifiedName(RC->TheDef) << "RegClass, ";
}
OS << " 0\n };\n return CalleeSaveRegClasses;\n}\n\n";
+
+ // Emit information about the dwarf register numbers.
+ OS << "int " << ClassName << "::getDwarfRegNum(unsigned RegNum) const {\n";
+ OS << " static const int DwarfRegNums[] = { -1, // NoRegister";
+ for (unsigned i = 0, e = Registers.size(); i != e; ++i) {
+ if (!(i % 16)) OS << "\n ";
+ const CodeGenRegister &Reg = Registers[i];
+ int DwarfRegNum = Reg.TheDef->getValueAsInt("DwarfNumber");
+ OS << DwarfRegNum;
+ if ((i + 1) != e) OS << ", ";
+ }
+ OS << "\n };\n";
+ OS << " assert(RegNum < (sizeof(DwarfRegNums)/sizeof(int)) &&\n";
+ OS << " \"RegNum exceeds number of registers\");\n";
+ OS << " return DwarfRegNums[RegNum];\n";
+ OS << "}\n\n";
OS << "} // End llvm namespace \n";
}
More information about the llvm-commits
mailing list