5

SSSE3 組み込みコマンド (トリプル S に注意) を使用するコードと、それを使用するかどうかのランタイム チェックがあるため、アプリケーションは SSSE3 をサポートしていない CPU で実行する必要があると想定しました。ただし、-O1 最適化で -mssse3 を使用すると、コンパイラは、明示的に呼び出していない SSSE3 命令も挿入するため、プログラムがクラッシュします。

関連する組み込み関数を明示的に呼び出すときに SSSE3 コードを有効にする方法はありますが、コンパイラが独自の SSSE3 コードを追加するのを止める方法はありますか?

-O1 最適化を無効にすることはできないことに注意してください。

4

2 に答える 2

10

この問題の解決策は、すべてのプログラム コードを -mssse3 オプションでコンパイルするのではなく、実際にこれらの機能を使用する部分のみをそのオプションでコンパイルすることです。言い換えると:

 // main.cpp
 ... 

     if (use_ssse3()) 
         do_something_ssse3();
     else
         do_something_traditional();

 // traditional.cpp:
 void do_something_traditional()
 {
     ... 
     code goes here ... 
 }

 // ssse3.cpp:
 void do_something_ssse3()
 {
     ... 
     code goes here ... 
 }

-mssse3このフラグを使用してコンパイルする必要があるのは、「ssse3.cpp」のみです。

于 2013-07-16T08:35:33.587 に答える
0

gcc を使用する場合は、-mssse3スイッチを使用せずにコードをコンパイルし、SSSE3 組み込み関数を次のようにプルできます。

#define __SSSE3__ 1
#include <tmmintrin.h>

あなたがそれらを必要とする場所。

于 2013-07-16T16:00:07.127 に答える