代码之家  ›  专栏  ›  技术社区  ›  User1291

intel intrinsic-加载/存储的函数指针

  •  1
  • User1291  · 技术社区  · 8 年前

    我可以为定义函数指针吗 _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;
    

    但这会导致

    未定义的引用 _mm_加载_ps

    未定义的引用 _mm_loadu_ps

    2 回复  |  直到 4 年前
        1
  •  3
  •   fuz    8 年前

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

    考虑制作这样的包装:

    __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;
    
        2
  •  -1
  •   William Sumfest    8 年前

    是否包含这些函数的头文件?

    “xmmintrin.h”是这些向量加载的适当标题