英特尔内部函数 - 指向 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;
我可以为_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;