簡體   English   中英

將特定的SSE內部函數轉換為NEON內部函數

[英]Convert specific SSE intrinsics to NEON intrinsics

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

以下是我將NEON內部函數轉換為在iOS上運行時需要的NEON內部函數

  • _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

添加在到4的4個符號無符號 32位整數有符號或在B無符號的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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM