コードを他のコンパイラで動作させたい場合は、それらの GCC 拡張機能を使用しないでください。set/load/store 組み込み関数を使用します。 _mm_setr_ps
定数値の設定には問題ありませんが、ループでは使用しないでください。要素にアクセスするには、通常、最初に値を配列に格納してから、配列を読み取ります。
配列がある場合は、a
それを読み取り/保存する必要があります
__m128 t = _mm_loadu_ps(a);
_mm_storeu_ps(a, t);
配列が 16 バイトにアラインされている場合、アラインされたロード/ストアを使用できます。これは、新しいシステムではわずかに高速ですが、古いシステムでははるかに高速です。
__m128 t = _mm_load_ps(a);
_mm_store_ps(a, t);
スタックで 16 バイト アラインされたメモリを取得するには、次を使用します。
__declspec(align(16)) const float a[] = ...//MSVC
__attribute__((aligned(16))) const float a[] ...//GCC, ICC
16 バイト アラインされた動的配列の場合は、次を使用します。
float *a = (float*)_mm_malloc(sizeof(float)*n, 16); //MSVC, GCC, ICC, MinGW