英特尔内部函数 - 指向 load/store 的函数指针

intel intrinsics - function pointers to load/store

我可以为_mm_load_ps_mm_store_ps等定义一个函数指针吗?

我正在考虑

float* x0; //param
...
__m128 (*load_x0)(float const *mem);
if((unsigned long)x0 & 15) load_x0 = &_mm_loadu_ps;
else load_x0 = &_mm_load_ps;

但这会导致

undefined reference to _mm_load_ps

undefined reference to _mm_loadu_ps

您是否包括了这些函数的 header 文件?

"xmmintrin.h" 是适合这些矢量负载的 header

内部函数直接编译成它们代表的指令。没有发出函数调用,并且任何库中都不存在这些函数的实现。因此,您不能将内部函数用作函数指针。

考虑像这样制作包装器:

__m128 my_mm_load_ps(float const *mem)
{
    return _mm_load_ps(mem);
}

__m128 my_mm_loadu_ps(float const *mem)
{
    return _mm_loadu_ps(mem);
}

您可以将包装器用作函数指针:

__m128 (*load_x0)(float const *mem);
if((unsigned long)x0 & 15) load_x0 = &my_mm_loadu_ps;
else load_x0 = &my_mm_load_ps;