diff options
| author | Rafael Espindola <rafael.espindola@gmail.com> | 2010-12-03 02:54:21 +0000 |
|---|---|---|
| committer | Rafael Espindola <rafael.espindola@gmail.com> | 2010-12-03 02:54:21 +0000 |
| commit | 4c70eeaf3302bd2f7a3e7800cbf8cf9ae7eba935 (patch) | |
| tree | 8baf6120c9770da81773ac30c641db5148b3203a /llvm/lib/MC/MCObjectStreamer.cpp | |
| parent | 4e7eb12f6f728eb4193a57642205d3c9dbaaaf82 (diff) | |
| download | bcm5719-llvm-4c70eeaf3302bd2f7a3e7800cbf8cf9ae7eba935.tar.gz bcm5719-llvm-4c70eeaf3302bd2f7a3e7800cbf8cf9ae7eba935.zip | |
Make EmitIntValue more efficient and more like what we do for leb128. The
difference is much smaller (about 0.3s) but significant.
llvm-svn: 120787
Diffstat (limited to 'llvm/lib/MC/MCObjectStreamer.cpp')
| -rw-r--r-- | llvm/lib/MC/MCObjectStreamer.cpp | 16 |
1 files changed, 7 insertions, 9 deletions
diff --git a/llvm/lib/MC/MCObjectStreamer.cpp b/llvm/lib/MC/MCObjectStreamer.cpp index f6753e3d1e1..1538a589966 100644 --- a/llvm/lib/MC/MCObjectStreamer.cpp +++ b/llvm/lib/MC/MCObjectStreamer.cpp @@ -83,16 +83,14 @@ void MCObjectStreamer::EmitValue(const MCExpr *Value, unsigned Size, // Avoid fixups when possible. int64_t AbsValue; - if (AddValueSymbols(Value)->EvaluateAsAbsolute(AbsValue)) { - // FIXME: Endianness assumption. - for (unsigned i = 0; i != Size; ++i) - DF->getContents().push_back(uint8_t(AbsValue >> (i * 8))); - } else { - DF->addFixup(MCFixup::Create(DF->getContents().size(), - AddValueSymbols(Value), - MCFixup::getKindForSize(Size, false))); - DF->getContents().resize(DF->getContents().size() + Size, 0); + if (AddValueSymbols(Value)->EvaluateAsAbsolute(AbsValue, &getAssembler())) { + EmitIntValue(AbsValue, Size, AddrSpace); + return; } + DF->addFixup(MCFixup::Create(DF->getContents().size(), + AddValueSymbols(Value), + MCFixup::getKindForSize(Size, false))); + DF->getContents().resize(DF->getContents().size() + Size, 0); } void MCObjectStreamer::EmitLabel(MCSymbol *Symbol) { |

