替换“typedef int64_t x_t___属性”(向量大小(16)); 我在VS2013 CudioC++中编译的一些代码中遇到了上面的Type,

替换“typedef int64_t x_t___属性”(向量大小(16)); 我在VS2013 CudioC++中编译的一些代码中遇到了上面的Type,,c++,visual-c++,C++,Visual C++,我找到了对u declspecalign16和allignas16的引用,但无论我如何尝试将它们与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]; } x_

我找到了对u declspecalign16和allignas16的引用,但无论我如何尝试将它们与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];
}
x_t a = { 0, 0 }; // at the 2nd '0' error too many initializer values
以上所有“[”的错误与:没有运算符[]匹配这些操作数

对于变量声明:

bool funcSame(x_t e1, x_t e2)
{
return e1[eStart] == e2[eStart] && e1[eEnd] == e2[eEnd];
}
x_t a = { 0, 0 }; // at the 2nd '0' error too many initializer values
该代码将x_t视为两个64位值的向量,利用SSE操作

有人能解释一下我如何替换这个typedef来获得编译和使用SSE操作的代码吗

谢谢,, Graham…

如果我读得正确,对齐只是结果的一部分,尽管链接页上甚至没有提到对齐,但提到了SIMD,SSE需要对齐的操作数,最好是对齐的操作数

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


查看如何比较两个uu m128变量。

评估与x_ut有什么关系?@Kerrek:感谢您发现了这一点,我进行了编辑。我试图删除上下文以帮助关注问题。由于x_ut是类似long的简单类型,除非eEnd和eStart都是指针,否则e1[eEnd]etc表示法肯定是错误的。@Jonathan:eStart&eEnd分别是值为0和1的枚举的一部分。gcc编译器似乎使用typedef定义了一个类型,该类型是两个连续的64位值,然后允许在该类型中按0和1进行索引。可能“向量大小”意味着这一点,但typedef u declspecalign16 int64_t x_t;确实如此esn没有声明数组类型,我对这是导致编译错误的原因有一定的信心。只是有一定的信心;我没有使用向量大小表示法,所以我没有研究它的作用。@rubenb:是的,从与此主题相关的其他线程(通常与结构联合类型相关)来看,似乎1:1不可用。对于现在我已经在代码中注释掉了这种类型的用法,以获得一个干净的编译。我认为答案可能是使用uu m128和相关的内部函数重新编写专门针对MSVC的那些部分。