AsmPrinterDwarf.cpp revision 0b8c9a80f20772c3793201ab5b251d3520b9cea3
1ff1f3280ded10c6844c07f0e466ca02224e48b62Stephen M. Cameron//===-- AsmPrinterDwarf.cpp - AsmPrinter Dwarf Support --------------------===// 2ff1f3280ded10c6844c07f0e466ca02224e48b62Stephen M. Cameron// 3ff1f3280ded10c6844c07f0e466ca02224e48b62Stephen M. Cameron// The LLVM Compiler Infrastructure 4ff1f3280ded10c6844c07f0e466ca02224e48b62Stephen M. Cameron// 5c0187f3b2f62ff914d7869403213bdf4ec0b3aa7Jens Axboe// This file is distributed under the University of Illinois Open Source 6ff1f3280ded10c6844c07f0e466ca02224e48b62Stephen M. Cameron// License. See LICENSE.TXT for details. 7ff1f3280ded10c6844c07f0e466ca02224e48b62Stephen M. Cameron// 8ff1f3280ded10c6844c07f0e466ca02224e48b62Stephen M. Cameron//===----------------------------------------------------------------------===// 9ff1f3280ded10c6844c07f0e466ca02224e48b62Stephen M. Cameron// 10ff1f3280ded10c6844c07f0e466ca02224e48b62Stephen M. Cameron// This file implements the Dwarf emissions parts of AsmPrinter. 11ff1f3280ded10c6844c07f0e466ca02224e48b62Stephen M. Cameron// 12ff1f3280ded10c6844c07f0e466ca02224e48b62Stephen M. Cameron//===----------------------------------------------------------------------===// 13ff1f3280ded10c6844c07f0e466ca02224e48b62Stephen M. Cameron 14ff1f3280ded10c6844c07f0e466ca02224e48b62Stephen M. Cameron#define DEBUG_TYPE "asm-printer" 15ff1f3280ded10c6844c07f0e466ca02224e48b62Stephen M. Cameron#include "llvm/CodeGen/AsmPrinter.h" 16ff1f3280ded10c6844c07f0e466ca02224e48b62Stephen M. Cameron#include "llvm/ADT/Twine.h" 17ff1f3280ded10c6844c07f0e466ca02224e48b62Stephen M. Cameron#include "llvm/IR/DataLayout.h" 18ff1f3280ded10c6844c07f0e466ca02224e48b62Stephen M. Cameron#include "llvm/MC/MCAsmInfo.h" 19ff1f3280ded10c6844c07f0e466ca02224e48b62Stephen M. Cameron#include "llvm/MC/MCSection.h" 20ff1f3280ded10c6844c07f0e466ca02224e48b62Stephen M. Cameron#include "llvm/MC/MCStreamer.h" 21ff1f3280ded10c6844c07f0e466ca02224e48b62Stephen M. Cameron#include "llvm/MC/MCSymbol.h" 22ff1f3280ded10c6844c07f0e466ca02224e48b62Stephen M. Cameron#include "llvm/MC/MachineLocation.h" 23ff1f3280ded10c6844c07f0e466ca02224e48b62Stephen M. Cameron#include "llvm/Support/Dwarf.h" 248232e2855c87697a95d00d920d1fd11b30d0fcaaStephen M. Cameron#include "llvm/Support/ErrorHandling.h" 2560f6b33079c8ffbd09f448060f58b82ba920b620Stephen M. Cameron#include "llvm/Target/TargetFrameLowering.h" 266b79c80c14766df7b0507c4ec679507a315ad61aJens Axboe#include "llvm/Target/TargetLoweringObjectFile.h" 278232e2855c87697a95d00d920d1fd11b30d0fcaaStephen M. Cameron#include "llvm/Target/TargetMachine.h" 285b7573ab40a30b389602d4b0ec3805957b483a19Stephen M. Cameron#include "llvm/Target/TargetRegisterInfo.h" 292fd3bb0ecbe17e8168a480cbdb8318b69bf51087Jens Axboeusing namespace llvm; 30ff1f3280ded10c6844c07f0e466ca02224e48b62Stephen M. Cameron 31ff1f3280ded10c6844c07f0e466ca02224e48b62Stephen M. Cameron//===----------------------------------------------------------------------===// 328232e2855c87697a95d00d920d1fd11b30d0fcaaStephen M. Cameron// Dwarf Emission Helper Routines 332fd3bb0ecbe17e8168a480cbdb8318b69bf51087Jens Axboe//===----------------------------------------------------------------------===// 348232e2855c87697a95d00d920d1fd11b30d0fcaaStephen M. Cameron 3563a130b7f037b55b56de05921803254a7b9ed9bbJens Axboe/// EmitSLEB128 - emit the specified signed leb128 value. 36f3e8440f75f98ced28cdd19ba785718e734cf7c5Jens Axboevoid AsmPrinter::EmitSLEB128(int Value, const char *Desc) const { 3763a130b7f037b55b56de05921803254a7b9ed9bbJens Axboe if (isVerbose() && Desc) 383e47bd250cac5fb81a5c0ad578dfbe90c6ddf6deJens Axboe OutStreamer.AddComment(Desc); 396b79c80c14766df7b0507c4ec679507a315ad61aJens Axboe 403e47bd250cac5fb81a5c0ad578dfbe90c6ddf6deJens Axboe OutStreamer.EmitSLEB128IntValue(Value); 41f3074008948b51ec380b4f06791ceec89a40d8a6Stephen M. Cameron} 42f3074008948b51ec380b4f06791ceec89a40d8a6Stephen M. Cameron 43f3074008948b51ec380b4f06791ceec89a40d8a6Stephen M. Cameron/// EmitULEB128 - emit the specified signed leb128 value. 44f3074008948b51ec380b4f06791ceec89a40d8a6Stephen M. Cameronvoid AsmPrinter::EmitULEB128(unsigned Value, const char *Desc, 453e47bd250cac5fb81a5c0ad578dfbe90c6ddf6deJens Axboe unsigned PadTo) const { 46f3074008948b51ec380b4f06791ceec89a40d8a6Stephen M. Cameron if (isVerbose() && Desc) 47b9d2f30a214ebd274340f888739be250838d63c2Jens Axboe OutStreamer.AddComment(Desc); 48f3074008948b51ec380b4f06791ceec89a40d8a6Stephen M. Cameron 49f3074008948b51ec380b4f06791ceec89a40d8a6Stephen M. Cameron OutStreamer.EmitULEB128IntValue(Value, 0/*addrspace*/, PadTo); 50f3074008948b51ec380b4f06791ceec89a40d8a6Stephen M. Cameron} 51f3074008948b51ec380b4f06791ceec89a40d8a6Stephen M. Cameron 52f3074008948b51ec380b4f06791ceec89a40d8a6Stephen M. Cameron/// EmitCFAByte - Emit a .byte 42 directive for a DW_CFA_xxx value. 533e47bd250cac5fb81a5c0ad578dfbe90c6ddf6deJens Axboevoid AsmPrinter::EmitCFAByte(unsigned Val) const { 54f3074008948b51ec380b4f06791ceec89a40d8a6Stephen M. Cameron if (isVerbose()) { 553e47bd250cac5fb81a5c0ad578dfbe90c6ddf6deJens Axboe if (Val >= dwarf::DW_CFA_offset && Val < dwarf::DW_CFA_offset+64) 56b9d2f30a214ebd274340f888739be250838d63c2Jens Axboe OutStreamer.AddComment("DW_CFA_offset + Reg (" + 57b9d2f30a214ebd274340f888739be250838d63c2Jens Axboe Twine(Val-dwarf::DW_CFA_offset) + ")"); 583e47bd250cac5fb81a5c0ad578dfbe90c6ddf6deJens Axboe else 59b9d2f30a214ebd274340f888739be250838d63c2Jens Axboe OutStreamer.AddComment(dwarf::CallFrameString(Val)); 60b9d2f30a214ebd274340f888739be250838d63c2Jens Axboe } 613e47bd250cac5fb81a5c0ad578dfbe90c6ddf6deJens Axboe OutStreamer.EmitIntValue(Val, 1, 0/*addrspace*/); 62f3074008948b51ec380b4f06791ceec89a40d8a6Stephen M. Cameron} 63f3074008948b51ec380b4f06791ceec89a40d8a6Stephen M. Cameron 64843ad23782b4e6061dcc0e14b0fbc5f4fecf55f9Jens Axboestatic const char *DecodeDWARFEncoding(unsigned Encoding) { 65843ad23782b4e6061dcc0e14b0fbc5f4fecf55f9Jens Axboe switch (Encoding) { 66843ad23782b4e6061dcc0e14b0fbc5f4fecf55f9Jens Axboe case dwarf::DW_EH_PE_absptr: return "absptr"; 67843ad23782b4e6061dcc0e14b0fbc5f4fecf55f9Jens Axboe case dwarf::DW_EH_PE_omit: return "omit"; 68843ad23782b4e6061dcc0e14b0fbc5f4fecf55f9Jens Axboe case dwarf::DW_EH_PE_pcrel: return "pcrel"; 69843ad23782b4e6061dcc0e14b0fbc5f4fecf55f9Jens Axboe case dwarf::DW_EH_PE_udata4: return "udata4"; 70843ad23782b4e6061dcc0e14b0fbc5f4fecf55f9Jens Axboe case dwarf::DW_EH_PE_udata8: return "udata8"; 713e47bd250cac5fb81a5c0ad578dfbe90c6ddf6deJens Axboe case dwarf::DW_EH_PE_sdata4: return "sdata4"; 72807f9971e7bfedfc905d2cb2c38a6e558db2f343Jens Axboe case dwarf::DW_EH_PE_sdata8: return "sdata8"; 73807f9971e7bfedfc905d2cb2c38a6e558db2f343Jens Axboe case dwarf::DW_EH_PE_pcrel | dwarf::DW_EH_PE_udata4: return "pcrel udata4"; 74807f9971e7bfedfc905d2cb2c38a6e558db2f343Jens Axboe case dwarf::DW_EH_PE_pcrel | dwarf::DW_EH_PE_sdata4: return "pcrel sdata4"; 75807f9971e7bfedfc905d2cb2c38a6e558db2f343Jens Axboe case dwarf::DW_EH_PE_pcrel | dwarf::DW_EH_PE_udata8: return "pcrel udata8"; 763e47bd250cac5fb81a5c0ad578dfbe90c6ddf6deJens Axboe case dwarf::DW_EH_PE_pcrel | dwarf::DW_EH_PE_sdata8: return "pcrel sdata8"; 773e47bd250cac5fb81a5c0ad578dfbe90c6ddf6deJens Axboe case dwarf::DW_EH_PE_indirect | dwarf::DW_EH_PE_pcrel |dwarf::DW_EH_PE_udata4: 783e47bd250cac5fb81a5c0ad578dfbe90c6ddf6deJens Axboe return "indirect pcrel udata4"; 793e47bd250cac5fb81a5c0ad578dfbe90c6ddf6deJens Axboe case dwarf::DW_EH_PE_indirect | dwarf::DW_EH_PE_pcrel |dwarf::DW_EH_PE_sdata4: 803e47bd250cac5fb81a5c0ad578dfbe90c6ddf6deJens Axboe return "indirect pcrel sdata4"; 813e47bd250cac5fb81a5c0ad578dfbe90c6ddf6deJens Axboe case dwarf::DW_EH_PE_indirect | dwarf::DW_EH_PE_pcrel |dwarf::DW_EH_PE_udata8: 823e47bd250cac5fb81a5c0ad578dfbe90c6ddf6deJens Axboe return "indirect pcrel udata8"; 833e47bd250cac5fb81a5c0ad578dfbe90c6ddf6deJens Axboe case dwarf::DW_EH_PE_indirect | dwarf::DW_EH_PE_pcrel |dwarf::DW_EH_PE_sdata8: 843e47bd250cac5fb81a5c0ad578dfbe90c6ddf6deJens Axboe return "indirect pcrel sdata8"; 853e47bd250cac5fb81a5c0ad578dfbe90c6ddf6deJens Axboe } 863e47bd250cac5fb81a5c0ad578dfbe90c6ddf6deJens Axboe 873e47bd250cac5fb81a5c0ad578dfbe90c6ddf6deJens Axboe return "<unknown encoding>"; 88ff1f3280ded10c6844c07f0e466ca02224e48b62Stephen M. Cameron} 89ff1f3280ded10c6844c07f0e466ca02224e48b62Stephen M. Cameron 905b7573ab40a30b389602d4b0ec3805957b483a19Stephen M. Cameron 91c36f98d9487c4b3a9b5c1f77aedb15e674b5a192Stephen M. Cameron/// EmitEncodingByte - Emit a .byte 42 directive that corresponds to an 92c36f98d9487c4b3a9b5c1f77aedb15e674b5a192Stephen M. Cameron/// encoding. If verbose assembly output is enabled, we output comments 93c36f98d9487c4b3a9b5c1f77aedb15e674b5a192Stephen M. Cameron/// describing the encoding. Desc is an optional string saying what the 9404cc6b77973636a914de3dff8ca6ae0857cf453bStephen M. Cameron/// encoding is specifying (e.g. "LSDA"). 95f3074008948b51ec380b4f06791ceec89a40d8a6Stephen M. Cameronvoid AsmPrinter::EmitEncodingByte(unsigned Val, const char *Desc) const { 96f3074008948b51ec380b4f06791ceec89a40d8a6Stephen M. Cameron if (isVerbose()) { 97736f2dff9fa6af83434bc4decafc6d8b40054ca0Stephen M. Cameron if (Desc != 0) 982fd3bb0ecbe17e8168a480cbdb8318b69bf51087Jens Axboe OutStreamer.AddComment(Twine(Desc)+" Encoding = " + 992fd3bb0ecbe17e8168a480cbdb8318b69bf51087Jens Axboe Twine(DecodeDWARFEncoding(Val))); 1002fd3bb0ecbe17e8168a480cbdb8318b69bf51087Jens Axboe else 1013ea48b883bcac5ad0c119205805b741af45427e3Stephen M. Cameron OutStreamer.AddComment(Twine("Encoding = ") + 1023ea48b883bcac5ad0c119205805b741af45427e3Stephen M. Cameron DecodeDWARFEncoding(Val)); 1030420ba6a85617cb02e196ac92e519191dafc6c52Jens Axboe } 1040420ba6a85617cb02e196ac92e519191dafc6c52Jens Axboe 105f9d40b4814d88ca1ca13a05cf45b6f36cfb2ba55Jens Axboe OutStreamer.EmitIntValue(Val, 1, 0/*addrspace*/); 106f9d40b4814d88ca1ca13a05cf45b6f36cfb2ba55Jens Axboe} 1079b260bdfc79dfc55855ffddce15ac1ca7025376fJens Axboe 1089b260bdfc79dfc55855ffddce15ac1ca7025376fJens Axboe/// GetSizeOfEncodedValue - Return the size of the encoding in bytes. 1094cbe721180807c629dc521e368692025d9cac288Jens Axboeunsigned AsmPrinter::GetSizeOfEncodedValue(unsigned Encoding) const { 110736f2dff9fa6af83434bc4decafc6d8b40054ca0Stephen M. Cameron if (Encoding == dwarf::DW_EH_PE_omit) 111843ad23782b4e6061dcc0e14b0fbc5f4fecf55f9Jens Axboe return 0; 1123e47bd250cac5fb81a5c0ad578dfbe90c6ddf6deJens Axboe 1133ec62ec45ce971b76dd3029412dfd3d0c6221384Jens Axboe switch (Encoding & 0x07) { 11425927259f482b0288d962e36dbfd33ec90a69521Stephen M. Cameron default: llvm_unreachable("Invalid encoded value."); 11563a130b7f037b55b56de05921803254a7b9ed9bbJens Axboe case dwarf::DW_EH_PE_absptr: return TM.getDataLayout()->getPointerSize(); 1160420ba6a85617cb02e196ac92e519191dafc6c52Jens Axboe case dwarf::DW_EH_PE_udata2: return 2; 1172fd3bb0ecbe17e8168a480cbdb8318b69bf51087Jens Axboe case dwarf::DW_EH_PE_udata4: return 4; 1182fd3bb0ecbe17e8168a480cbdb8318b69bf51087Jens Axboe case dwarf::DW_EH_PE_udata8: return 8; 119b9d2f30a214ebd274340f888739be250838d63c2Jens Axboe } 1200420ba6a85617cb02e196ac92e519191dafc6c52Jens Axboe} 1210420ba6a85617cb02e196ac92e519191dafc6c52Jens Axboe 1225b7573ab40a30b389602d4b0ec3805957b483a19Stephen M. Cameronvoid AsmPrinter::EmitTTypeReference(const GlobalValue *GV, 123ff1f3280ded10c6844c07f0e466ca02224e48b62Stephen M. Cameron unsigned Encoding) const { 124e0681f3edfb755e710fe7016e470d947bc5dbc3cJens Axboe if (GV) { 125e0681f3edfb755e710fe7016e470d947bc5dbc3cJens Axboe const TargetLoweringObjectFile &TLOF = getObjFileLowering(); 126b9d2f30a214ebd274340f888739be250838d63c2Jens Axboe 127e0681f3edfb755e710fe7016e470d947bc5dbc3cJens Axboe const MCExpr *Exp = 128e0681f3edfb755e710fe7016e470d947bc5dbc3cJens Axboe TLOF.getTTypeGlobalReference(GV, Mang, MMI, Encoding, OutStreamer); 1296b79c80c14766df7b0507c4ec679507a315ad61aJens Axboe OutStreamer.EmitValue(Exp, GetSizeOfEncodedValue(Encoding), /*addrspace*/0); 130dcaeb6060f2c7aef184cca5699e12c264ef0b834Jens Axboe } else 131dcaeb6060f2c7aef184cca5699e12c264ef0b834Jens Axboe OutStreamer.EmitIntValue(0, GetSizeOfEncodedValue(Encoding), 0); 132e0681f3edfb755e710fe7016e470d947bc5dbc3cJens Axboe} 133e0681f3edfb755e710fe7016e470d947bc5dbc3cJens Axboe 1342fd3bb0ecbe17e8168a480cbdb8318b69bf51087Jens Axboe/// EmitSectionOffset - Emit the 4-byte offset of Label from the start of its 1352fd3bb0ecbe17e8168a480cbdb8318b69bf51087Jens Axboe/// section. This can be done with a special directive if the target supports 1362fd3bb0ecbe17e8168a480cbdb8318b69bf51087Jens Axboe/// it (e.g. cygwin) or by emitting it as an offset from a label at the start 1372fd3bb0ecbe17e8168a480cbdb8318b69bf51087Jens Axboe/// of the section. 13887d5f276b14f42b09062d499ebb3f524e3aa86f3Jens Axboe/// 139f3e8440f75f98ced28cdd19ba785718e734cf7c5Jens Axboe/// SectionLabel is a temporary label emitted at the start of the section that 1402fd3bb0ecbe17e8168a480cbdb8318b69bf51087Jens Axboe/// Label lives in. 141b04ad8d1af96a011cf41c7c477fcddbb9e399b03Stephen M. Cameronvoid AsmPrinter::EmitSectionOffset(const MCSymbol *Label, 142019dd47743caec2954f9960d178516b760abca26Stephen M. Cameron const MCSymbol *SectionLabel) const { 1432fd3bb0ecbe17e8168a480cbdb8318b69bf51087Jens Axboe // On COFF targets, we have to emit the special .secrel32 directive. 1442fd3bb0ecbe17e8168a480cbdb8318b69bf51087Jens Axboe if (MAI->getDwarfSectionOffsetDirective()) { 1459f4883aa0c1bf90a499e729389ca2169f4637a00Jens Axboe OutStreamer.EmitCOFFSecRel32(Label); 1469f4883aa0c1bf90a499e729389ca2169f4637a00Jens Axboe return; 147fe8afddb903447278f37afc4e1adb226ca2cb699Stephen M. Cameron } 1482fd3bb0ecbe17e8168a480cbdb8318b69bf51087Jens Axboe 1492fd3bb0ecbe17e8168a480cbdb8318b69bf51087Jens Axboe // Get the section that we're referring to, based on SectionLabel. 1502fd3bb0ecbe17e8168a480cbdb8318b69bf51087Jens Axboe const MCSection &Section = SectionLabel->getSection(); 1512fd3bb0ecbe17e8168a480cbdb8318b69bf51087Jens Axboe 1522fd3bb0ecbe17e8168a480cbdb8318b69bf51087Jens Axboe // If Label has already been emitted, verify that it is in the same section as 1532fd3bb0ecbe17e8168a480cbdb8318b69bf51087Jens Axboe // section label for sanity. 15487d5f276b14f42b09062d499ebb3f524e3aa86f3Jens Axboe assert((!Label->isInSection() || &Label->getSection() == &Section) && 155f3e8440f75f98ced28cdd19ba785718e734cf7c5Jens Axboe "Section offset using wrong section base for label"); 1562fd3bb0ecbe17e8168a480cbdb8318b69bf51087Jens Axboe 157b04ad8d1af96a011cf41c7c477fcddbb9e399b03Stephen M. Cameron // If the section in question will end up with an address of 0 anyway, we can 158019dd47743caec2954f9960d178516b760abca26Stephen M. Cameron // just emit an absolute reference to save a relocation. 1592fd3bb0ecbe17e8168a480cbdb8318b69bf51087Jens Axboe if (Section.isBaseAddressKnownZero()) { 1602fd3bb0ecbe17e8168a480cbdb8318b69bf51087Jens Axboe OutStreamer.EmitSymbolValue(Label, 4, 0/*AddrSpace*/); 1619f4883aa0c1bf90a499e729389ca2169f4637a00Jens Axboe return; 1629f4883aa0c1bf90a499e729389ca2169f4637a00Jens Axboe } 163fe8afddb903447278f37afc4e1adb226ca2cb699Stephen M. Cameron 1642fd3bb0ecbe17e8168a480cbdb8318b69bf51087Jens Axboe // Otherwise, emit it as a label difference from the start of the section. 1652fd3bb0ecbe17e8168a480cbdb8318b69bf51087Jens Axboe EmitLabelDifference(Label, SectionLabel, 4); 1668663ea652b8ca7a368b39ef97e991180edebb57fJens Axboe} 1678663ea652b8ca7a368b39ef97e991180edebb57fJens Axboe 1688663ea652b8ca7a368b39ef97e991180edebb57fJens Axboe//===----------------------------------------------------------------------===// 1698663ea652b8ca7a368b39ef97e991180edebb57fJens Axboe// Dwarf Lowering Routines 1708663ea652b8ca7a368b39ef97e991180edebb57fJens Axboe//===----------------------------------------------------------------------===// 1718663ea652b8ca7a368b39ef97e991180edebb57fJens Axboe 172ca850992888df61f347ad839be0c4091ff25bea3Jens Axboe/// EmitCFIFrameMove - Emit a frame instruction. 173ca850992888df61f347ad839be0c4091ff25bea3Jens Axboevoid AsmPrinter::EmitCFIFrameMove(const MachineMove &Move) const { 174ca850992888df61f347ad839be0c4091ff25bea3Jens Axboe const TargetRegisterInfo *RI = TM.getRegisterInfo(); 175ca850992888df61f347ad839be0c4091ff25bea3Jens Axboe 176ca850992888df61f347ad839be0c4091ff25bea3Jens Axboe const MachineLocation &Dst = Move.getDestination(); 177ca850992888df61f347ad839be0c4091ff25bea3Jens Axboe const MachineLocation &Src = Move.getSource(); 178ca850992888df61f347ad839be0c4091ff25bea3Jens Axboe 179ca850992888df61f347ad839be0c4091ff25bea3Jens Axboe // If advancing cfa. 180ca850992888df61f347ad839be0c4091ff25bea3Jens Axboe if (Dst.isReg() && Dst.getReg() == MachineLocation::VirtualFP) { 181ca850992888df61f347ad839be0c4091ff25bea3Jens Axboe if (Src.getReg() == MachineLocation::VirtualFP) { 1828663ea652b8ca7a368b39ef97e991180edebb57fJens Axboe OutStreamer.EmitCFIDefCfaOffset(-Src.getOffset()); 1838663ea652b8ca7a368b39ef97e991180edebb57fJens Axboe } else { 1843650a3ca2ccbfefe7564d6ebde03bf7f89255e89Jens Axboe // Reg + Offset 1853650a3ca2ccbfefe7564d6ebde03bf7f89255e89Jens Axboe OutStreamer.EmitCFIDefCfa(RI->getDwarfRegNum(Src.getReg(), true), 1863650a3ca2ccbfefe7564d6ebde03bf7f89255e89Jens Axboe Src.getOffset()); 1873650a3ca2ccbfefe7564d6ebde03bf7f89255e89Jens Axboe } 1883650a3ca2ccbfefe7564d6ebde03bf7f89255e89Jens Axboe } else if (Src.isReg() && Src.getReg() == MachineLocation::VirtualFP) { 1893650a3ca2ccbfefe7564d6ebde03bf7f89255e89Jens Axboe assert(Dst.isReg() && "Machine move not supported yet."); 1901c1e4a5bbe3ebb614eacfa902c06564e6739a750Jens Axboe OutStreamer.EmitCFIDefCfaRegister(RI->getDwarfRegNum(Dst.getReg(), true)); 1913650a3ca2ccbfefe7564d6ebde03bf7f89255e89Jens Axboe } else { 1923650a3ca2ccbfefe7564d6ebde03bf7f89255e89Jens Axboe assert(!Dst.isReg() && "Machine move not supported yet."); 1933650a3ca2ccbfefe7564d6ebde03bf7f89255e89Jens Axboe OutStreamer.EmitCFIOffset(RI->getDwarfRegNum(Src.getReg(), true), 1943650a3ca2ccbfefe7564d6ebde03bf7f89255e89Jens Axboe Dst.getOffset()); 1953650a3ca2ccbfefe7564d6ebde03bf7f89255e89Jens Axboe } 1963650a3ca2ccbfefe7564d6ebde03bf7f89255e89Jens Axboe} 1973650a3ca2ccbfefe7564d6ebde03bf7f89255e89Jens Axboe