gpt4 book ai didi

c++ - _MM_TRANSPOSE4_PS 导致 GCC 中的编译器错误?

转载 作者:太空狗 更新时间:2023-10-29 20:40:08 26 4
gpt4 key购买 nike

我第一次在 GCC 而不是 MSVC 中编译我的数学库,并经历了所有的小错误,我遇到了一个根本没有意义的错误:

第 284 行:错误:需要左值作为赋值的左操作数

第 284 行是什么?这个:

_MM_TRANSPOSE4_PS(r, u, t, _mm_setr_ps(0.0f, 0.0f, 0.0f, 1.0f));

(r、u 和 t 都是 __m128 的实例)

那些熟悉使用 xmmintrin.h 的人会意识到 _MM_TRANSPOSE4_PS 实际上不是一个函数,而是一个宏,它扩展为:

/* Transpose the 4x4 matrix composed of row[0-3].  */
#define _MM_TRANSPOSE4_PS(row0, row1, row2, row3) \
do { \
__v4sf __r0 = (row0), __r1 = (row1), __r2 = (row2), __r3 = (row3); \
__v4sf __t0 = __builtin_ia32_unpcklps (__r0, __r1); \
__v4sf __t1 = __builtin_ia32_unpcklps (__r2, __r3); \
__v4sf __t2 = __builtin_ia32_unpckhps (__r0, __r1); \
__v4sf __t3 = __builtin_ia32_unpckhps (__r2, __r3); \
(row0) = __builtin_ia32_movlhps (__t0, __t1); \
(row1) = __builtin_ia32_movhlps (__t1, __t0); \
(row2) = __builtin_ia32_movlhps (__t2, __t3); \
(row3) = __builtin_ia32_movhlps (__t3, __t2); \
} while (0)

那么……是什么导致了我的编译器错误?我不会在这里重新定义任何我知道的东西。当我使用 MSVC 时,这段完全相同的代码编译并运行得非常好。

最佳答案

你需要改变:

_MM_TRANSPOSE4_PS(r, u, t, _mm_setr_ps(0.0f, 0.0f, 0.0f, 1.0f));

到:

__m128 v = _mm_setr_ps(0.0f, 0.0f, 0.0f, 1.0f);
_MM_TRANSPOSE4_PS(r, u, t, v);

因为这是一个就地转置,而且 4 个输入 vector 也用于输出。

关于c++ - _MM_TRANSPOSE4_PS 导致 GCC 中的编译器错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25360355/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com