我不断收到此编译错误:
错误:在'&'标记
之前预期';',','或')'
在下面的标记行上:
//128 bit vector struct (4 integers)
typedef struct {
int w, x, y, z;
} iVector4;
iVector4 SSEadd(iVector4 &v1, iVector4 &v2) // <-- this line
{
iVector4 vr;
asm
{
MOV EAX v1
MOV EBX v2
//
MOVUPS XMM0, [EAX]
MOVUPS XMM1, [EBX]
//
PADDD XMM0 XMM1
MOVUPS [rv]
}
return rv;
}
我真的看不出有什么问题:这似乎是什么问题?
编辑:
非常感谢所有回复。
我正在使用gcc作为编译器,我意识到我提供的汇编代码也是错误的。我想知道是否最好使用-msse / -msse2中的built_in函数。
此外,从v4si等向量中加载和提取值的最有效方法是什么?
我发现从载体中加载和提取是一项代价高昂的操作。
当你说sse intrinsics时,你究竟是什么意思?
感谢您的帮助。
答案 0 :(得分:7)
C没有参考。你需要为那些编译为C ++。
答案 1 :(得分:4)
C没有参考。您应该使用指针,或使用C ++。
iVector4 SSEadd(iVector4 *v1, iVector4 *v2)
现在接下来的问题 - 你可以在C中返回对象吗?我的C生锈了。如果不是这种情况,您需要:
void SSEadd(iVector4 *v1, iVector4 *v2, iVector4 *vOut)
编辑:Justin指出,这是可能的,所以你不需要走那条路。你仍然可以 - 根据具体情况,它可能会更高效。
答案 2 :(得分:1)
我认为你的函数定义实际应该是:
iVector4 SSEadd(iVector4 *v1, iVector4 *v2);
答案 3 :(得分:1)
您可能还想考虑使用SSE内在函数而不是您正在做的事情。