中疑似命令を発する、Iは実(非擬似)命令の緩和などの疑似命令を発するたい。問題は、の出力に適用されるように私のTargetPassConfig
に擬似命令エキスパンダーパスを追加する方法を見つけることができないということです。LLVMバックエンドで緩和
リラクゼーション用のドライバであるように思われ、MCAssembler::relaxInstruction
を見ると、それは命令エンコーダに直接緩和の結果を渡します。
bool MCAssembler::relaxInstruction(MCAsmLayout &Layout,
MCRelaxableFragment &F) {
if (!fragmentNeedsRelaxation(&F, Layout))
return false;
++stats::RelaxedInstructions;
// FIXME-PERF: We could immediately lower out instructions if we can tell
// they are fully resolved, to avoid retesting on later passes.
// Relax the fragment.
MCInst Relaxed;
getBackend().relaxInstruction(F.getInst(), F.getSubtargetInfo(), Relaxed);
// Encode the new instruction.
//
// FIXME-PERF: If it matters, we could let the target do this. It can
// probably do so more efficiently in many cases.
SmallVector<MCFixup, 4> Fixups;
SmallString<256> Code;
raw_svector_ostream VecOS(Code);
getEmitter().encodeInstruction(Relaxed, VecOS, Fixups, F.getSubtargetInfo());
// Update the fragment.
F.setInst(Relaxed);
F.getContents() = Code;
F.getFixups() = Fixups;
return true;
}
私にとって、これは中に「自分で」私はあることを意味バックエンドのrelaxInstruction
が擬似命令を発行しないようにします。だから私の擬似命令エキスパンダーパスを私のrelaxInstruction
につなぐには?
。 – Cactus