summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2011-04-29 21:50:57 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2011-04-29 21:50:57 +0000
commit6a85f9b42e6c6656843c375ae050d82a7b6b4a91 (patch)
tree046a55f7e67038c49bcbba0d4f54681021f59c58
parent6c961e1b750e63f281044898400dd7f29640677f (diff)
downloadbcm5719-llvm-6a85f9b42e6c6656843c375ae050d82a7b6b4a91.tar.gz
bcm5719-llvm-6a85f9b42e6c6656843c375ae050d82a7b6b4a91.zip
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. llvm-svn: 130544
-rw-r--r--llvm/lib/MC/MCDwarf.cpp39
1 files changed, 22 insertions, 17 deletions
diff --git a/llvm/lib/MC/MCDwarf.cpp b/llvm/lib/MC/MCDwarf.cpp
index 3b816682d6b..0296951490f 100644
--- a/llvm/lib/MC/MCDwarf.cpp
+++ b/llvm/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);
OpenPOWER on IntegriCloud