0

当为 x64 编译时,以下函数使用 XMM0 寄存器进行参数传递:

void foo (double const scalar)
{
    __m256d vector = _mm256_broadcast_sd(&scalar);
}

在汇编中,vbroadcastsd操作码可以采用寄存器操作数。等效的内在函数似乎只接受指向内存操作数的指针。有没有办法保证编译器会优化这样的负载以避免存储到内存?

4

2 回答 2

3

我认为没有人可以保证它,但假设您至少启用了一些优化,如果任何现代编译器没有删除不必要的指针间接,我会非常失望......我当然看到了编译器有更复杂的问题想出了如何简化。

我认为您没有查看生成的代码来确定它的作用(因为您的问题的措辞会有所不同)。

于 2013-09-10T11:45:49.000 回答
0

如果您担心堆栈上的参数传递,那么您的函数可能太短或太重要而最终被称为单独的函数。采用

__forceinline

使用 Visual C++ 或

__attribute__((always_inline)) 

与 g++。

于 2013-12-26T16:44:58.407 回答