1. 程式人生 > >【arm】arm neon intrinsic方式編寫arm32位彙編

【arm】arm neon intrinsic方式編寫arm32位彙編

Date: 2018.9.22

1、c、arm32和intrinsic方式對比
int a = 32;  // c code
vdup.32 d0, r0   // arm32 assembly code
int32x2_t a1=vdup_n_s32(a); // intrinsic assembly code
2、 陣列相加

Intrinsic方式下同種資料型別之間進行運算,可採用類似C的方式: 例如:

uint32x4_t v11 = vpadd1q_u16(v1); //相鄰兩兩相加
uint32x4_t v21 = vpadd1q_u16(v2);
v13 = vaddq_u32(v11, v21);
等價於: v13 = v11 + v21;
3、取q暫存器的低64位和高64位

採用q暫存器對應陣列地址的方式,效率相對較高。

uint16x4_t* d = (uint16x4_t*)(&m3); //取地址,並強制型別轉換
uint16x4_t m4 = d[0]; //取陣列的低64位;
uint16x4_t m5 = d[1]; //取陣列的高64位。

4、 d暫存器到q暫存器
int 32x2_t w1 = vshrn_n_s64(v1, 10);
int 32x2_t w2 = vshrn_n_s64(v2,10);
int32x4_t  r1 = {w1[0], w1[1], w2[
0], w2[1]};//注意:此種方式效率很低。 vst1q_s32(ft1+i, r1);
5、arm neon intrinsics查詢手冊

THE END!