【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查找手册

函数查找手册:https://developer.arm.com/technologies/neon/intrinsics
介绍: http://infocenter.arm.com/help/topic/com.arm.doc.dht0002a/DHT0002A_introducing_neon.pdf
https://developer.arm.com/technologies/neon
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0491h/CIHJBEFE.html
https://blog.csdn.net/hemmingway/article/details/44828303


THE END!

转载于:https://www.cnblogs.com/SoaringLee/p/10532365.html

你可能感兴趣的:(【arm】arm neon intrinsic方式编写arm32位汇编)