diff options
author | Devang Patel <dpatel@apple.com> | 2011-04-21 21:07:35 +0000 |
---|---|---|
committer | Devang Patel <dpatel@apple.com> | 2011-04-21 21:07:35 +0000 |
commit | 2266aa84a1658553fad54e0d33ca1df32e0fa05f (patch) | |
tree | 39379b3ed8662e960c4be8e7d1bc523317d3395b /llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp | |
parent | 72c40825ddc595c3e38dd18a6c145d9c7a3c9f8e (diff) | |
download | bcm5719-llvm-2266aa84a1658553fad54e0d33ca1df32e0fa05f.tar.gz bcm5719-llvm-2266aa84a1658553fad54e0d33ca1df32e0fa05f.zip |
Refactor.
llvm-svn: 129938
Diffstat (limited to 'llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp')
-rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp b/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp index 8c367d1d7a6..609da254fce 100644 --- a/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp @@ -752,6 +752,40 @@ getDebugValueLocation(const MachineInstr *MI) const { return MachineLocation(); } +/// EmitDwarfRegOp - Emit dwarf register operation. +void AsmPrinter::EmitDwarfRegOp(const MachineLocation &MLoc) const { + const TargetRegisterInfo *RI = TM.getRegisterInfo(); + unsigned Reg = RI->getDwarfRegNum(MLoc.getReg(), false); + if (int Offset = MLoc.getOffset()) { + // If the value is at a certain offset from frame register then + // use DW_OP_fbreg. + unsigned OffsetSize = Offset ? MCAsmInfo::getSLEB128Size(Offset) : 1; + OutStreamer.AddComment("Loc expr size"); + EmitInt16(1 + OffsetSize); + OutStreamer.AddComment( + dwarf::OperationEncodingString(dwarf::DW_OP_fbreg)); + EmitInt8(dwarf::DW_OP_fbreg); + OutStreamer.AddComment("Offset"); + EmitSLEB128(Offset); + } else { + if (Reg < 32) { + OutStreamer.AddComment("Loc expr size"); + EmitInt16(1); + OutStreamer.AddComment( + dwarf::OperationEncodingString(dwarf::DW_OP_reg0 + Reg)); + EmitInt8(dwarf::DW_OP_reg0 + Reg); + } else { + OutStreamer.AddComment("Loc expr size"); + EmitInt16(1 + MCAsmInfo::getULEB128Size(Reg)); + OutStreamer.AddComment( + dwarf::OperationEncodingString(dwarf::DW_OP_regx)); + EmitInt8(dwarf::DW_OP_regx); + OutStreamer.AddComment(Twine(Reg)); + EmitULEB128(Reg); + } + } +} + bool AsmPrinter::doFinalization(Module &M) { // Emit global variables. for (Module::const_global_iterator I = M.global_begin(), E = M.global_end(); |