> [EDIT: (edited to highlight the question in context)

以下是我在转换一些SSE代码以在iOS上运行时需要NEON内部函数的SSE内部函数。
  • _mm_set_ps

  • 将四个单精度浮点值设置为四个输入。
    (__m128 _mm_set_ps(float z , float y , float x , float w );)
    
    Return Value:
    r0 := w
    r1 := x
    r2 := y
    r3 := z
    
  • _mm_loadu_ps

  • 加载四个单精度浮点值。地址而不是需要对齐16个字节。
    __m128 _mm_loadu_ps(float * p);
    
    Return Value:
    r0 := p[0]
    r1 := p[1]
    r2 := p[2]
    r3 := p[3]
    
  • _mm_storeu_ps

  • 存储四个单精度浮点值。地址而不是需要对齐16个字节。
    void _mm_storeu_ps(float *p, __m128 a);
    
    Return Value:
    p[0] := a0
    p[1] := a1
    p[2] := a2
    p[3] := a3
    
  • _mm_add_epi32

  • 将a中的4个有符号无符号 32位整数与b中的4个有符号或无符号32位整数相加。
    __m128i _mm_add_epi32 (__m128i a, __m128i b);
    
    Return Value:
    r0 := a0 + b0
    r1 := a1 + b1
    r2 := a2 + b2
    r3 := a3 + b3
    

    注意:尽可能避免未对齐的内存访问。因此,我需要一种将未对齐访问转换为对齐访问的方法(可能使用填充)。

    最佳答案

    我对NEON内部函数不是很熟悉,但是我可以给您命名等效的NEON指令。然后,您将轻松找到合适的宏。

    _mm_set_ps

    如果值已经在S寄存器中,则只需将它们重新解释为D寄存器
    否则,您可以使用vmov指令填充D寄存器:
    vmov.i32 d0,r0,r1

    _mm_loadu_ps

    vld1.32 q0,[r0]

    _mm_storeu_ps

    vst1.32 q0,[r0]

    _mm_add_epi32

    vadd.u32 q0,q1,q2

    关于c++ - 将特定的SSE内部函数转换为NEON内部函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19580692/

    10-10 19:12