替换“typedef int64_t x_t __attribute __((vector_size(16)));

时间:2015-04-03 15:46:36

标签: c++ visual-c++

我在某些代码中遇到了上面的typedef我尝试在VS2013社区C ++下编译。

我找到了对__declspec(align(16))和allignas(16)的引用,但无论我如何尝试将这些引用与typedef一起使用,代码中的某些部分会抱怨;使用此typedef:

typedef __declspec(align(16)) int64_t   x_t;

对于函数声明,我得到以下错误:

bool funcSame(x_t e1, x_t e2)
{
return e1[eStart] == e2[eStart] && e1[eEnd] == e2[eEnd];
}

上述错误' [' with:没有操作员" []"匹配这些操作数

对于变量声明:

x_t a = { 0, 0 }; // at the 2nd '0' error too many initializer values

代码依赖于x_t被视为两个64位值的向量,这些值利用了SSE操作。

有人可以解释我如何替换这个typedef来获取编译和使用SSE操作的代码吗?

谢谢你,     格雷厄姆....

1 个答案:

答案 0 :(得分:0)

如果我正确读取the documentation for the vector_size attribute,对齐只是结果的一部分(尽管在链接页面上甚至没有提到它,提到了SIMD,而且SSE需要,更喜欢对齐的操作数)。

不幸的是,我不认为存在直接的1:1替代方案。 VC ++内在函数包含类型__m128,它是一个16字节对齐的类型,与“向量”具有相同的大小。

有关如何比较两个__m128变量的信息,请参见this question