为x64编译时,以下函数使用XMM0寄存器进行参数传递:
void foo (double const scalar)
{
__m256d vector = _mm256_broadcast_sd(&scalar);
}
在汇编中,vbroadcastsd
操作码可以采用寄存器操作数。等效内在似乎只接受指向内存操作数的指针。有没有办法保证编译器会优化这样的负载以避免存储到内存?
答案 0 :(得分:3)
我不认为任何人都可以保证它,但假设你至少启用了一些优化,如果任何现代编译器没有删除不必要的指针间接,我会非常失望...我当然看到更复杂的问题,编译器已经弄清楚如何简化。
我认为你没有看过生成的代码来确定它的作用(因为你的问题的措辞不同)。
答案 1 :(得分:0)
如果您担心堆栈上的参数传递,那么您的功能可能太短或太重要,最终无法作为单独的函数调用。使用
__forceinline
使用visual C ++或
__attribute__((always_inline))
用g ++。