mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-12 13:38:21 +00:00
MC: Tweak MCInstFragment to include the encoded data and fixups, so that we don't need to recompute them during relaxation. I will revisit this once all the other pieces of fast relaxation are in place.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@99244 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -773,22 +773,14 @@ void MCAssembler::FinishLayout(MCAsmLayout &Layout) {
|
||||
SD.getFragmentList().insert(it2, DF);
|
||||
|
||||
// Update the data fragments layout data.
|
||||
DF->setParent(IF->getParent());
|
||||
DF->setOffset(IF->getOffset());
|
||||
DF->setFileSize(IF->getInstSize());
|
||||
|
||||
// Encode the final instruction.
|
||||
SmallVector<MCFixup, 4> Fixups;
|
||||
raw_svector_ostream VecOS(DF->getContents());
|
||||
getEmitter().EncodeInstruction(IF->getInst(), VecOS, Fixups);
|
||||
|
||||
// Copy over the fixups.
|
||||
//
|
||||
// FIXME-PERF: Encode fixups directly into the data fragment as well.
|
||||
for (unsigned i = 0, e = Fixups.size(); i != e; ++i) {
|
||||
MCFixup &F = Fixups[i];
|
||||
DF->addFixup(MCAsmFixup(DF->getContents().size()+F.getOffset(),
|
||||
*F.getValue(), F.getKind()));
|
||||
}
|
||||
// Copy in the data and the fixups.
|
||||
DF->getContents().append(IF->getCode().begin(), IF->getCode().end());
|
||||
for (unsigned i = 0, e = IF->getFixups().size(); i != e; ++i)
|
||||
DF->getFixups().push_back(IF->getFixups()[i]);
|
||||
|
||||
// Delete the instruction fragment and update the iterator.
|
||||
SD.getFragmentList().erase(IF);
|
||||
|
Reference in New Issue
Block a user