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); } } }
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); } }
public override void AddTo(AsmFileInfo fileInfo) { fileInfo.Add(this); }