MC: Switch MCFillFragment to storing total fill size instead of a count. This allows...
authorDaniel Dunbar <daniel@zuster.org>
Wed, 12 May 2010 22:51:32 +0000 (22:51 +0000)
committerDaniel Dunbar <daniel@zuster.org>
Wed, 12 May 2010 22:51:32 +0000 (22:51 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@103662 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/MC/MCAssembler.h
lib/MC/MCAssembler.cpp

index ddf4ec958999a3adbf4b4718c0b1d73f1afbe407..22b8ff4671a596c6e00b70b24efa2409cdcd4f4d 100644 (file)
@@ -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; }
 
   /// @}
 
index fbda26b4ce8a0db2bbf2d45be7fa842dd0d5997b..6cdef20d2496d371eef5fbd4d618a19bfe89d3d6 100644 (file)
@@ -395,7 +395,7 @@ void MCAssembler::LayoutFragment(MCAsmLayout &Layout, MCFragment &F) {
 
   case MCFragment::FT_Fill: {
     MCFillFragment &FF = cast<MCFillFragment>(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<MCFillFragment>(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() {