質問

時に書き込んで非常に短い組み立て機能

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すべての種類の効果の登録利用、ローカルな変数などであることをコンパイラは、インライン。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top