目次 - SDL 3.0 API(機能別) - 組み込み関数の検知 - SDL_TARGETING

SDL_TARGETING

特定のCPUアーキテクチャを対象とした関数のタグ付けのマクロ

ヘッダ

SDL3/SDL_intrin.h

構文

#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内部で使用されているが, アプリケーションや他のライブラリもそのインターフェースで使ってもよい.

バージョン

SDL 3.2.0以降

SDL Wikiへのリンク

SDL_TARGETING - SDL Wiki