我有一个使用英特尔内部函数的C应用程序,例如:
__m128 _mm_add_ps (__m128 a, __m128 b)
__m128 _mm_sub_ps (__m128 a, __m128 b)
__m128 _mm_mul_ps (__m128 a, __m128 b)
__m128 _mm_set_ps (float e3, float e2, float e1, float e0)
void _mm_store_ps (float* mem_addr, __m128 a)
__m128 _mm_load_ps (float const* mem_addr)
现在,我正在尝试使用名为Gem5的模拟器来修改我的应用程序,以使其在ARMv8上运行。因此,我开始四处寻找ARM内在函数,并找到了本手册《ARM®NEON™Intrinsics Reference》。
好吧,我找到了算术内在函数,但是我对设置,存储和加载指令有些迷失。
任何具有ARM内部函数经验的人都可以告诉我正确的内部函数吗?
这里有一些等效的方法可以帮助您入门:
SSE ARM
__m128 float32x4_t // 4 x 32 bits floats in a vector
_mm_load_ps vld1q_f32 // load float vector from memory
_mm_store_ps vst1q_f32 // store float vector to memory
_mm_add_ps vaddq_f32 // add float vectors
至于初始化向量,例如您_mm_set_ps
在SSE中可能会遇到的那样,例如gcc和clang的编译器使您可以使用类似于Neon数据类型的C方式进行此操作,例如
const float32x4_t v = { 1.0f, 2.0f, 3.0f, 4.0f };
但是,如果编译器不支持此方法,则可能必须使用等效的Neon内部函数。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句