Visual Studio C++ 中的 v4sf 和 __attribute__ 等效项是什么?

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

Mys*_*ial 6

如果您正在寻找 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)