12

私はいくつかのコードを書いており、SIMD 組み込み関数 SSE2/3 を使用して高速化しようとしています。私のコードは、いくつかのデータを XMM レジスターにロードして何度も操作する必要があるような性質のものです。生成されたアセンブラー コードを見ていると、XMM0 と XMM1 で別のものをリロードするために、GCC がデータをメモリにフラッシュし続けているようです。x86-64 用にコンパイルしているので、15 個のレジスタがあります。GCC が 2 つしか使用していないのはなぜですか? さらに使用するように依頼するにはどうすればよいですか? レジスタに値を「固定」する方法はありますか? 変数定義に "register" キーワードを追加しましたが、生成されたアセンブリ コードは同じです。

4

2 に答える 2

2

はい、できます。Explicit Reg Varsでは、変数を特定のレジスタに固定するために必要な構文について説明しています。

于 2008-09-23T22:58:57.500 に答える
1

組み込み関数ごとに個別のレジスタを指定する段階に達している場合は、多くの場合、組み込み関数を不必要に悲観化するという gcc の厄介な習慣を考えると、アセンブリ ディレクトリを記述するだけでもかまいません。

于 2008-09-23T23:06:46.703 に答える