diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2011-04-29 21:50:57 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2011-04-29 21:50:57 +0000 |
commit | 1f6c87554a0d78103b95816fd2c1ce392b366bcf (patch) | |
tree | 4ce59bde943a509b7b2458faa842c480ac6804eb | |
parent | 7f46b08082b08ac0760ffeca6670bf85910b305b (diff) |
Avoid some uses of .uleb128. This is a small speedup and more importantly
lets this code be used when producing assembly code for old assemblers without
uleb support.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@130544 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/MC/MCDwarf.cpp | 39 |
1 files changed, 22 insertions, 17 deletions
diff --git a/lib/MC/MCDwarf.cpp b/lib/MC/MCDwarf.cpp index 3b816682d6..0296951490 100644 --- a/lib/MC/MCDwarf.cpp +++ b/lib/MC/MCDwarf.cpp @@ -679,15 +679,23 @@ const MCSymbol &FrameEmitterImpl::EmitCIE(MCStreamer &streamer, streamer.EmitULEB128IntValue(asmInfo.getDwarfRARegNum(true)); // Augmentation Data Length (optional) - MCSymbol *augmentationStart = streamer.getContext().CreateTempSymbol(); - MCSymbol *augmentationEnd = streamer.getContext().CreateTempSymbol(); - const MCExpr *augmentationLength = MakeStartMinusEndExpr(streamer, - *augmentationStart, - *augmentationEnd, 0); - streamer.EmitULEB128Value(augmentationLength); + + unsigned augmentationLength = 0; + if (personality) { + // Personality Encoding + augmentationLength += 1; + // Personality + augmentationLength += getSizeForEncoding(streamer, personalityEncoding); + } + if (lsda) { + augmentationLength += 1; + } + // Encoding of the FDE pointers + augmentationLength += 1; + + streamer.EmitULEB128IntValue(augmentationLength); // Augmentation Data (optional) - streamer.EmitLabel(augmentationStart); if (personality) { // Personality Encoding streamer.EmitIntValue(personalityEncoding, 1); @@ -700,7 +708,6 @@ const MCSymbol &FrameEmitterImpl::EmitCIE(MCStreamer &streamer, } // Encoding of the FDE pointers streamer.EmitIntValue(asmInfo.getFDEEncoding(), 1); - streamer.EmitLabel(augmentationEnd); // Initial Instructions @@ -763,15 +770,14 @@ MCSymbol *FrameEmitterImpl::EmitFDE(MCStreamer &streamer, streamer.EmitAbsValue(Range, size); // Augmentation Data Length - MCSymbol *augmentationStart = streamer.getContext().CreateTempSymbol(); - MCSymbol *augmentationEnd = streamer.getContext().CreateTempSymbol(); - const MCExpr *augmentationLength = MakeStartMinusEndExpr(streamer, - *augmentationStart, - *augmentationEnd, 0); - streamer.EmitULEB128Value(augmentationLength); + unsigned augmentationLength = 0; + + if (frame.Lsda || forceLsda) + augmentationLength += getSizeForEncoding(streamer, frame.LsdaEncoding); + + streamer.EmitULEB128IntValue(augmentationLength); // Augmentation Data - streamer.EmitLabel(augmentationStart); // When running in "CodeGen compatibility mode" a FDE with no LSDA can be // assigned to a CIE that requires one. In that case we output a 0 (as does @@ -779,9 +785,8 @@ MCSymbol *FrameEmitterImpl::EmitFDE(MCStreamer &streamer, if (frame.Lsda) EmitSymbol(streamer, *frame.Lsda, frame.LsdaEncoding); else if (forceLsda) - streamer.EmitIntValue(0, size); + streamer.EmitIntValue(0, getSizeForEncoding(streamer, frame.LsdaEncoding)); - streamer.EmitLabel(augmentationEnd); // Call Frame Instructions EmitCFIInstructions(streamer, frame.Instructions, frame.Begin); |