【发布时间】:2011-04-18 13:00:44
【问题描述】:
我正在将游戏移植到 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, float vector)' 必须有一个类或枚举类型的参数
错误:'浮动矢量 operator*(float vector, float vector)' 必须有一个类或枚举类型的参数
我找到了link,将此类错误描述为GCC bug,在v4.0中已解决...
现在我完全迷路了...请帮我解决这个问题...
【问题讨论】:
-
为什么
__m128需要重载运算符?内置的-和*运算符已经生成了subps和mulps指令。 -
其实这是一个有趣的问题,KennyTM...你能告诉我,如果 -=、+=、*= 和 /= 运算符也在 GCC 中实现?
-
我也担心下面的代码: typedef __m128 Vec3sse_t; __forceinline bool 运算符 == ( Vec3sse_t a, Vec3sse_t b ); { __m128 c = _mm_cmpneq_ps (a, b);整数掩码 = _mm_movemask_ps ( c ) & 7;返回掩码 == 0;如果我删除这种逻辑,一切都会正常吗?
-
对不起,我似乎无法格式化我的 cmets...
-
@I_really:如果还实现了 -=、+=、*= 和 /= 运算符 - 是的。