2

SSE コマンドを使用するインライン アセンブラを組み込み関数に移植しています。アセンブラ命令に適した組み込み関数を見つけるには、多くの作業が必要です。インターネットのどこかで、この作業を簡素化する Python スクリプトを見ましたが、今は見つかりません。

4

3 に答える 3

1

あなたが求めていることを正確に実行するスクリプトを知りません。多くの場合、非 SSE 命令がアセンブリにインターリーブされ、すべてのアセンブリ命令が組み込みまたはプリミティブ C 操作にマップできるわけではありません。

おそらく、検索と置換を使用してハッキングできると思います。(これは実際にはそれほど悪くないかもしれません。どのくらいのコードを移植しようとしていますか? 何千行も?)

また、VC++ は 64 ビットでのインライン アセンブリをまったく許可しません。したがって、組み込み関数または完全に別のアセンブリ ファイルを使用してすべてを行う必要があります。

組み込み関数を使用することがアセンブリに完全に劣るとは言いませんが (自分が何をしているのかを理解していると仮定して)、適切にコンパイルされ、最適化されたアセンブリと同じくらい高速に実行される優れた組み込みコードを作成することは、それ自体が芸術作品です。 . ただし、移植性と使いやすさ (手動でレジスタを割り当てる必要がない) という 2 つの利点があります。

于 2011-09-02T16:29:34.120 に答える
1

私はあなたがそのようなスクリプトに満足するとは思わない.

まず、私の意見では、組み込み関数は 1 つまたは 2 つのライナーにのみ役立ちます。より多くの命令がある場合は、別のアセンブラー ファイルを作成する方がよいでしょう。また、アセンブラ命令の長いリストでは、とにかく結果を制御する必要があります。これには、各命令とその結果を理解することが含まれます。これは、基本的に、同じ時間で再度書き込むことができることを意味します。

第二に、ソフトウェアを 32 ビットから 64 ビットに移植したいので、このようなものを探していると思いますよね? 私の経験では、コードのすべての行を確認しないと、予期しない型キャストが原因で奇妙なエラーが発生することがわかりました。

3 つ目は、Visual Studio のことですか? 組み込み関数をサポートする他のコンパイラはありますか? 組み込み関数を使用してソフトウェアを移植しているときに奇妙なエラーが発生しました。これは、組み込み関数を使用しているときに、主にスタックを台無しにすることによるいくつかの醜いコンパイラのバグがあるためです。これらを見つけ出し、最終的にこれらの関数をアセンブラで記述するのに苦労しました。

したがって、私の提案は、組み込み関数に注意することです!

于 2011-09-02T15:46:31.890 に答える