函数中的编译错误在C中返回结构

时间:2010-12-02 02:10:40

标签: c

我不断收到此编译错误:

  

错误:在'&'标记

之前预期';',','或')'

在下面的标记行上:

//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时,你究竟是什么意思?

感谢您的帮助。

4 个答案:

答案 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内在函数而不是您正在做的事情。