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

以下は、一部の SSE コードを iOS で実行するように変換しているため、NEON 組み込み関数が必要なSSE 組み込み関数です。

  • _mm_set_ps

4 つの単精度浮動小数点値を 4 つの入力に設定します。

(__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

4 つの単精度浮動小数点値を読み込みます。アドレスは16 バイトでアラインする必要はありません。

__m128 _mm_loadu_ps(float * p);

Return Value:
r0 := p[0]
r1 := p[1]
r2 := p[2]
r3 := p[3]
  • _mm_storeu_ps

4 つの単精度浮動小数点値を格納します。アドレスは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

注: できる限り、アラインされていないメモリ アクセスは避けてください。したがって、アラインされていないアクセスをアラインされたアクセスに変換する方法が必要です (おそらくパディングを使用します)。

4

1 に答える 1

1

私は NEON 組み込み関数にあまり詳しくありませんが、同等の NEON 命令を挙げられます。そうすれば、適切なマクロを簡単に見つけることができます。

_mm_set_ps

値がすでに S レジスタにある場合は、それらを D レジスタとして再解釈する必要があります。それ以外の場合は、D レジスタに vmov 命令を入力できます: 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

于 2013-10-27T07:36:05.670 に答える