なぜDelphiコンパイラはインライン組立機?
質問
時に書き込んで非常に短い組み立て機能
function SeniorBit(Value: LongWord): Integer;
asm
OR EAX,EAX
JZ @@Done
BSR EAX,EAX
INC EAX
@@Done:
end;
と思われる最高の候補者inlining:
function SeniorBit(Value: LongWord): Integer; inline;
はDelphiコンパイラなすことはありません。なぜですか?
更新:
コldsandonあ5.5歳開 報告QC.報告書のcontaines一部の提出が伸びるようなasm指令)の簡素化にasm inliningのコンパイラです。私の好きには"裸"に関する指令の手続きの機能レベルとともに、ここにはコンパイラがいません作のスタックフレームのための手続きオプションとしてどのレジスタ(eax、edxやecx)保全されるべきである。
場合、一般課題の効率的なinlining手続きBASMコードが可能unnessessary)良いアイデアをinliningのための最も重要な場合(裸の機能explicitely宣言を登録しました。
解決
参照質中央報告#9283(投票ます。基本的には問題は、コンパイラは理解できるようレジスタに保存前にインラインコードに復元します。どのコンパイラの登録が容易で、利用はしないで制御ではありません。自例は非常に簡単ですが、コンパイラに対応する必要があるより複雑である。報告書には開状態で、希望のコンパイラできるインラインBASMコードします。
他のヒント
できないインライン手作りの組み立てます。
うにすることができinliningのこれらのアセンブラ;通常のinliningすべての種類の効果の登録利用、ローカルな変数などであることをコンパイラは、インライン。
所属していません StackOverflow