組み込み関数を使用するときに GCC に 3 つ以上の SIMD レジスタを使用させるにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/124405

  •  02-07-2019
  •  | 
  •  

質問

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

役に立ちましたか?

解決

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

他のヒント

組み込み関数ごとに個別のレジスタを指定するところまで来ている場合は、特に多くの場合に組み込み関数を不必要に悲観する gcc の厄介な習慣を考慮すると、単にアセンブリ ディレクトリを作成したほうがよいでしょう。

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