是否通过引用内联函数传递__m128i对象导致这些对象被移动到堆栈?

时间:2010-04-26 15:41:19

标签: c++ c intrinsics

我正在为具有SSE2内在函数的8x16bit向量编写转置函数。由于该函数有8个参数(8x8x16bit大小的矩阵),我不能做任何事情,只能通过引用传递它们。是否会由编译器优化(我的意思是,这些__m128i对象是否会在寄存器而不是堆栈中传递)?

代码段:

inline void transpose (__m128i &a0, __m128i &a1, __m128i &a2, __m128i &a3,
                       __m128i &a4, __m128i &a5, __m128i &a6, __m128i &a7) {
    ....
    }

3 个答案:

答案 0 :(得分:3)

谁能说出来?

为什么不编译它并查看反汇编?这是唯一确定的方法。

答案 1 :(得分:2)

有可能他们不会被推到堆叠中。如果函数是内联函数,编译器实际上会将操作(代码)从被调用函数推送到被调用函数,而不是将数据从调用者传递给被调用者。

现在,内联是一个提示,因此编译器可以决定不实际内联调用,然后你必须遵循Zan的建议并实际检查编译代码的样子。

答案 2 :(得分:0)

请注意,此限制仅适用于Windows和MSVC(++)(您可能应该相应地标记您的问题)。

我没有尝试使用C ++和引用,但是使用MSVC和带有这样内联的指针,编译器似乎确实优化了间接。据推测,同样适用于C ++引用,但正如另一张海报指出的那样,你应该查看生成的代码来检查。