VC++ でアライメント ディレクティブを探している場合は、__declspec(align(16))
. (またはあなたが配置したいものは何でも)
使用例は次のとおりです。
__declspec(align(16)) float x[] = {1.,2.,3.,4.};
http://msdn.microsoft.com/en-us/library/83ythb65.aspx
attribute
(GCC の場合) と__declspec
(VC++ の場合) の両方がコンパイラ固有の拡張機能であることに注意してください。
編集 :
コードをもう一度見てみる__attribute__
と、VC++ でコンパイルするには、行を VC++ に相当するものに置き換えるだけでなく、さらに多くの作業が必要になります。
VC++ には、使用しているこれらのマクロ/関数が含まれていません。
__builtin_ia32_xorps
__builtin_ia32_loadups
__builtin_ia32_mulps
__builtin_ia32_addps
__builtin_ia32_storeups
これらすべてをSSE 組み込み関数に置き換えるだけのほうがよいでしょう。これは GCC と VC++ の両方で動作します。
組み込み関数に変換されたコードは次のとおりです。
float *mv_mult(float mat[SIZE][SIZE], float vec[SIZE]) {
static float ret[SIZE];
float temp[4];
int i, j;
__m128 m, v, r;
for (i = 0; i < SIZE; i++) {
r = _mm_xor_ps(r, r);
for (j = 0; j < SIZE; j += 4) {
m = _mm_loadu_ps(&mat[i][j]);
v = _mm_loadu_ps(&vec[j]);
v = _mm_mul_ps(m, v);
r = _mm_add_ps(r, v);
}
_mm_storeu_ps(temp, r);
ret[i] = temp[0] + temp[1] + temp[2] + temp[3];
}
return ret;
}