Cpp*_*ner 1 c++ gcc sse intrinsics visual-c++
typedef float v4sf __attribute__ ((mode(V4SF)));
Run Code Online (Sandbox Code Playgroud)
这是在海湾合作委员会。有人知道等价语法吗?
VS 2010将显示__attribute__没有此类型的存储类,并且模式未定义。
我在网上搜索了一下,上面说
相当于
__attribute__( aligned( size ) )GCC 中的对于以前的 UNIX 开发人员或编写在多个平台上工作的代码的人来说,这很有帮助,在 GCC 中,您可以使用 属性(aligned(...))获得相同的结果
有关更多信息,请参阅此处: http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Type-Attributes.html#Type-Attributes
完整的 GCC 代码在这里: http: //pastebin.com/bKkTTmH1
如果您正在寻找 VC++ 中的对齐指令,那就是__declspec(align(16)). (或者任何你想要的对齐方式)
示例用法是这样的:
__declspec(align(16)) float x[] = {1.,2.,3.,4.};
Run Code Online (Sandbox Code Playgroud)
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;
}
Run Code Online (Sandbox Code Playgroud)