#define SDL_TARGETING(x) __attribute__((target(x)))
これは, プログラムの他の部分は別でも, 特定の関数を特定のCPU命令セットでビルドしたい場合のコンパイラのヒントである
詳細はGCCのドキュメントに記述されている:
https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html#index-target-function-attribute
この機能を使用して, ソースコードの他の部分はSSE2コードを使用しない場合でも, 特定の関数をSSE2対応にする例:
#ifdef SDL_SSE2_INTRINSICS
static void SDL_TARGETING("sse2") DoSomethingWithSSE2(char *x) {
..ここでSSE組み込み関数を使用する, など...
}
#endif
// その後で...
#ifdef SDL_SSE2_INTRINSICS
if (SDL_HasSSE2()) {
DoSomethingWithSSE2(str);
}
#endif
アプリケーションは, 全体的にはSSE2の命令セットを使用せずにビルドされており, SSE2に対応していないIntelマシンでも実行できる. しかし, 実行時にシステムが対応する命令をチェックし, 対応しているならばSSE2命令を使用する関数を呼び出す. ifdefはSSE2命令のない環境ならばこのコードを実行しないようにするためのものである.
コンパイラが対応していない場合, 何もない定義になる.
このシンボルはSDL内部で使用されているが, アプリケーションや他のライブラリもそのインターフェースで使ってもよい.