如何使用Apple GCC 4.2.1为__m128 SSE类型重载+, - ,*,/,/ =等运算符?

时间:2011-04-18 13:00:44

标签: gcc operators

我正在将游戏移植到 OS X ,它使用运算符重载 __ m128 类型:

__forceinline __m128 operator - ( __m128 a, __m128 b )
{
    return _mm_sub_ps ( a, b );
}

__forceinline __m128 operator * ( __m128 a, __m128 b )
{
    return _mm_mul_ps ( a, b );
}

Apple GCC v4.2.1 给了我以下错误:

  

错误:'float vector   operator-(float vector ,float    vector )'必须具有类或枚举类型的参数

     

错误:'float vector   operator *(float vector ,float    vector )'必须具有类或枚举类型的参数

我找到了link,将此类错误描述为 GCC错误,已在v4.0中解决...

现在我完全迷失了......请帮我解决这个问题...

1 个答案:

答案 0 :(得分:1)

我正在使用g ++ 4.6.1并在类似情况下发现相同的错误消息,当两个参数都是内置类型时会发生:

algo operator +(const char * a,double b); 算法运算符+(double a,const char * b);

我理解重新定义+(int,int)是很棘手的,因为编译器依赖于它来进行计算,编译时计算出现,而不是运行时,因此您提供的代码在编译时不可用稍后在运行时,数据已经计算完毕。

太糟糕了我们不能这样做,只要类型不同(我的情况就是这样)就应该允许内置类型,对于那种情况,编译器没有默认答案。

对于案例+(int,int)我认为由于上面的解释,它永远不会被允许。除非编译器接受某种参数以将该计算结果留给运行时(并且我还没有检查那种参数)。我认为类似的事情发生在花车上。