【arm】arm neon intrinsic方式編寫arm32位彙編
阿新 • • 發佈:2018-12-11
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!