目次 - SDL 3.0 API(機能別) - 組み込み関数の検知
組み込み関数の検知
概要
CPU固有のコンパイラの組み込み関数の有無のプリプロセッサによるチェックをSDLで行う. これはシステムの複雑な要因, ビルドツールのバージョン, その他の外部要因に依存し, 必ずしも簡単ではないためである.
SDLヘッダをインクルードしたアプリケーションは, 特定のCPUアーキテクチャの組み込み関数を安全に使用できるか判断するために, プリプロセッサの定義をチェックできる.
これはコンパイラが組み込み命令を使えるかをチェックするだけで, 実行時には, SDL_HasSSE()やSDL_HasNEON()のようなシステムのCPU情報関数でチェックする必要がある.
そうしないと, 対応していないCPU命令を使用したときクラッシュする.
SDLは, CPU組み込み関数が対応しているときプリプロセッサの定義を設定するだけなので, アプリケーションは#ifではなく#ifdefでチェックする必要がある.
SDLは適切な命令セット固有のヘッダもインクルードする.
例えば, もしSDLがSDL_SSE2_INTRINSICSが定義されていれば, #include <emmintrin.h>も同様に定義されている.
マクロ
- SDL_ALTIVEC_INTRINSICS - コンパイラがPowerPC Altivec組み込み関数に対応しているとき(その場合のみ)定義されているマクロ
- SDL_AVX2_INTRINSICS - コンパイラがIntel AVX2 intrinsics組み込み関数に対応しているとき(その場合のみ)定義されているマクロ
- SDL_AVX512F_INTRINSICS - コンパイラがIntel AVX-512F組み込み関数に対応しているとき(その場合のみ)定義されているマクロ
- SDL_AVX_INTRINSICS - コンパイラがIntel AVX組み込み関数に対応しているとき(その場合のみ)定義されているマクロ
- SDL_HAS_TARGET_ATTRIBS - コンパイラが__attribute__((target))に対応しているとき定義されているマクロ
- SDL_LASX_INTRINSICS - コンパイラがLoongarch LASX組み込み関数に対応しているとき(その場合のみ)定義されているマクロ
- SDL_LSX_INTRINSICS - コンパイラがLoongarch LSX組み込み関数に対応しているとき(その場合のみ)定義されているマクロ
- SDL_MMX_INTRINSICS - コンパイラがIntel MMX組み込み関数に対応しているとき(その場合のみ)定義されているマクロ
- SDL_NEON_INTRINSICS - コンパイラがARM NEON組み込み関数に対応しているとき(その場合のみ)定義されているマクロ
- SDL_SSE2_INTRINSICS - コンパイラがIntel SSE2組み込み関数に対応しているとき(その場合のみ)定義されているマクロ
- SDL_SSE3_INTRINSICS - コンパイラがIntel SSE3組み込み関数に対応しているとき(その場合のみ)定義されているマクロ
- SDL_SSE4_1_INTRINSICS - コンパイラがIntel SSE4.1組み込み関数に対応しているとき(その場合のみ)定義されているマクロ
- SDL_SSE4_2_INTRINSICS - コンパイラがIntel SSE4.2組み込み関数に対応しているとき(その場合のみ)定義されているマクロ
- SDL_SSE_INTRINSICS - コンパイラがIntel SSE組み込み関数に対応しているとき(その場合のみ)定義されているマクロ
- SDL_TARGETING - 特定のCPUアーキテクチャを対象とした関数のタグ付けのマクロ
SDL Wikiへのリンク
SDL3/CategoryIntrinsics - SDL Wiki