Пример #1
0
 public void CopyLiterals(AsmFileInfo fileInfo)
 {
     for (int copyIndex = 0; copyIndex < theList.Count; copyIndex++)
     {
         AsmLiteral lit = theList[copyIndex];
         if (lit.LtorgNumber == fileInfo.LtorgIdentifier)
         {
             lit.AddTo(fileInfo);
         }
     }
 }
Пример #2
0
        public void ApplyLtorg(AsmFileInfo fileInfo)
        {
            int currSubsection       = fileInfo.CurrSubSection;
            List <AsmLiteral> align4 = new List <AsmLiteral>();
            List <AsmLiteral> align2 = new List <AsmLiteral>();
            List <AsmLiteral> align1 = new List <AsmLiteral>();

            // scan to find unplaced constants in current subsection
            for (int i = 0; i < theList.Count; i++)
            {
                AsmLiteral lit = theList[i];
                if (lit.Subsection != currSubsection)
                {
                    continue;
                }
                if (lit.Offset >= 0)
                {
                    continue;               // already placed
                }
                // lit.LtorgNumber = fileInfo.LtorgIdentifier;
                AsmLiteral dup;
                switch (lit.Align())
                {
                case 4:
                    dup = findDuplicate(align4, lit);
                    if (dup == null)
                    {
                        align4.Add(lit);
                    }
                    else
                    {
                        theList[i] = dup;
                    }
                    break;

                case 2:
                    dup = findDuplicate(align2, lit);
                    if (dup == null)
                    {
                        align2.Add(lit);
                    }
                    else
                    {
                        theList[i] = dup;
                    }
                    break;

                case 1:
                    dup = findDuplicate(align1, lit);
                    if (dup == null)
                    {
                        align1.Add(lit);
                    }
                    else
                    {
                        theList[i] = dup;
                    }
                    break;
                }
            }
            foreach (AsmLiteral lit in align4)
            {
                lit.Offset = fileInfo.AdvancePosition(lit.Size(), 4);
            }
            foreach (AsmLiteral lit in align2)
            {
                lit.Offset = fileInfo.AdvancePosition(lit.Size(), 2);
            }
            foreach (AsmLiteral lit in align1)
            {
                lit.Offset = fileInfo.AdvancePosition(lit.Size(), 1);
            }
        }
Пример #3
0
	public override void AddTo(AsmFileInfo fileInfo) { fileInfo.Add(this); }