我在某些代码中遇到了上面的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操作的代码吗?
谢谢你, 格雷厄姆....
答案 0 :(得分:0)
如果我正确读取the documentation for the vector_size
attribute,对齐只是结果的一部分(尽管在链接页面上甚至没有提到它,提到了SIMD,而且SSE需要,更喜欢对齐的操作数)。
不幸的是,我不认为存在直接的1:1替代方案。 VC ++内在函数包含类型__m128
,它是一个16字节对齐的类型,与“向量”具有相同的大小。
有关如何比较两个__m128
变量的信息,请参见this question。