[llvm-commits] [llvm] r118609 - /llvm/trunk/lib/Target/ARM/ARMAsmPrinter.cpp
Jim Grosbach
grosbach at apple.com
Tue Nov 9 11:40:22 PST 2010
Author: grosbach
Date: Tue Nov 9 13:40:22 2010
New Revision: 118609
URL: http://llvm.org/viewvc/llvm-project?rev=118609&view=rev
Log:
Handle ARM constant pool values that need an explicit reference to the '.'
pseudo-label. (TLS stuff).
Modified:
llvm/trunk/lib/Target/ARM/ARMAsmPrinter.cpp
Modified: llvm/trunk/lib/Target/ARM/ARMAsmPrinter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMAsmPrinter.cpp?rev=118609&r1=118608&r2=118609&view=diff
==============================================================================
--- llvm/trunk/lib/Target/ARM/ARMAsmPrinter.cpp (original)
+++ llvm/trunk/lib/Target/ARM/ARMAsmPrinter.cpp Tue Nov 9 13:40:22 2010
@@ -666,7 +666,7 @@
Twine Text(DataDirective, OS.str());
OutStreamer.EmitRawText(Text);
} else {
- assert(!ACPV->hasModifier() && !ACPV->mustAddCurrentAddress() &&
+ assert(!ACPV->hasModifier() &&
"ARM binary streamer of non-trivial constant pool value!");
if (ACPV->getPCAdjustment()) {
MCSymbol *PCLabel = getPICLabel(MAI->getPrivateGlobalPrefix(),
@@ -679,6 +679,14 @@
MCConstantExpr::Create(ACPV->getPCAdjustment(),
OutContext),
OutContext);
+ if (ACPV->mustAddCurrentAddress()) {
+ // We want "(<expr> - .)", but MC doesn't have a concept of the '.'
+ // label, so just emit a local label end reference that instead.
+ MCSymbol *DotSym = OutContext.CreateTempSymbol();
+ OutStreamer.EmitLabel(DotSym);
+ const MCExpr *DotExpr = MCSymbolRefExpr::Create(DotSym, OutContext);
+ Expr = MCBinaryExpr::CreateSub(Expr, DotExpr, OutContext);
+ }
Expr = MCBinaryExpr::CreateSub(Expr, PCRelExpr, OutContext);
}
OutStreamer.EmitValue(Expr, Size);
More information about the llvm-commits
mailing list