From 597eb48168ba18fd4b1ff669e23ed3a647690cef Mon Sep 17 00:00:00 2001 From: Daniel Dunbar Date: Wed, 12 May 2010 22:51:32 +0000 Subject: [PATCH] MC: Switch MCFillFragment to storing total fill size instead of a count. This allows using ValueSize==0 to represent a virtual fill. llvm-svn: 103662 --- llvm/include/llvm/MC/MCAssembler.h | 16 ++++++++++------ llvm/lib/MC/MCAssembler.cpp | 6 +++--- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/llvm/include/llvm/MC/MCAssembler.h b/llvm/include/llvm/MC/MCAssembler.h index ddf4ec958999..22b8ff4671a5 100644 --- a/llvm/include/llvm/MC/MCAssembler.h +++ b/llvm/include/llvm/MC/MCAssembler.h @@ -293,17 +293,21 @@ class MCFillFragment : public MCFragment { /// Value - Value to use for filling bytes. int64_t Value; - /// ValueSize - The size (in bytes) of \arg Value to use when filling. + /// ValueSize - The size (in bytes) of \arg Value to use when filling, or 0 if + /// this is a virtual fill fragment. unsigned ValueSize; - /// Count - The number of copies of \arg Value to insert. - uint64_t Count; + /// Size - The number of bytes to insert. + uint64_t Size; public: - MCFillFragment(int64_t _Value, unsigned _ValueSize, uint64_t _Count, + MCFillFragment(int64_t _Value, unsigned _ValueSize, uint64_t _Size, MCSectionData *SD = 0) : MCFragment(FT_Fill, SD), - Value(_Value), ValueSize(_ValueSize), Count(_Count) {} + Value(_Value), ValueSize(_ValueSize), Size(_Size) { + assert((!ValueSize || (Size % ValueSize) == 0) && + "Fill size must be a multiple of the value size!"); + } /// @name Accessors /// @{ @@ -312,7 +316,7 @@ public: unsigned getValueSize() const { return ValueSize; } - uint64_t getCount() const { return Count; } + uint64_t getSize() const { return Size; } /// @} diff --git a/llvm/lib/MC/MCAssembler.cpp b/llvm/lib/MC/MCAssembler.cpp index fbda26b4ce8a..6cdef20d2496 100644 --- a/llvm/lib/MC/MCAssembler.cpp +++ b/llvm/lib/MC/MCAssembler.cpp @@ -395,7 +395,7 @@ void MCAssembler::LayoutFragment(MCAsmLayout &Layout, MCFragment &F) { case MCFragment::FT_Fill: { MCFillFragment &FF = cast(F); - EffectiveSize = FF.getValueSize() * FF.getCount(); + EffectiveSize = FF.getSize(); break; } @@ -534,7 +534,7 @@ static void WriteFragmentData(const MCAssembler &Asm, const MCAsmLayout &Layout, case MCFragment::FT_Fill: { MCFillFragment &FF = cast(F); - for (uint64_t i = 0, e = FF.getCount(); i != e; ++i) { + for (uint64_t i = 0, e = FF.getSize() / FF.getValueSize(); i != e; ++i) { switch (FF.getValueSize()) { default: assert(0 && "Invalid size!"); @@ -876,7 +876,7 @@ void MCFillFragment::dump() { this->MCFragment::dump(); OS << "\n "; OS << " Value:" << getValue() << " ValueSize:" << getValueSize() - << " Count:" << getCount() << ">"; + << " Size:" << getSize() << ">"; } void MCInstFragment::dump() {