arm汇编
文章平均质量分 58
WTHunt
厚积薄发
展开
-
ARM内联汇编基础
汇编代码一般会与C函数的代码有数据交换,需要通过汇编代码来操作C代码中的一些变量数据,而C代码中的数据存放在内存还是寄存器,或者存放在哪个寄存器我们在写C代码的时候并不知道,所以汇编规定了一些形式来让编译器知道数据的交换情况,如下:asm("mov %[result], %[value], ror #1" : [result] "=r" (y) : [value] "r" (x):); 内联汇编通过冒号将内容分成了四个部分,内联汇编和C操作数之前的关联性体现在上面的input和out操原创 2022-01-28 19:29:05 · 2562 阅读 · 0 评论 -
arm A53 指令优化指南
natural assemblyno register dependency, no penaltyld1 {v0.4s}, [r0], #16fmla v10.4s, v16.4s, v24.s[0]fmla v11.4s, v16.4s, v24.s[1]fmla v12.4s, v16.4s, v24.s[2]fmla v13.4s, v16.4s, v24.s[3]A53128bit vector load cannot be dual is原创 2021-06-08 14:37:57 · 978 阅读 · 0 评论 -
prfm预加载指令使用说明
只是实践经验,没有理论,不一定正确prfm pldl1keep, [x0, #256]放在 ld1 [x0] 前面 0~8 条指令 #256 表示把 x0+256 的内容放进 L1 cache ldp 也适用 (经验)不写 offset 不如写个 #128 (经验)pldl1strm 似乎没啥意思,也没 pldl1keep 快 (经验)x0 ~ x0+256 的内容也会进来 (经验)load 128bit 用 #128,256bit或更多用 #256 (经验)避免 pld a,pl原创 2021-06-08 14:36:09 · 4564 阅读 · 0 评论 -
ARM64/32寄存器说明
x0~x7:传递子程序的参数和返回值,使用时不需要保存,多余的参数用堆栈传递,64位的返回结果保存在x0中。x8:用于保存子程序的返回地址,使用时不需要保存。x9~x15:临时寄存器,也叫可变寄存器,子程序使用时不需要保存。x16~x17:子程序内部调用寄存器(IPx),使用时不需要保存,尽量不要使用。x18:平台寄存器,它的使用与平台相关,尽量不要使用。x19~x28:临时寄存器,子程序使用时必须保存。x29:帧指针寄存器(FP),用于连接栈帧,使用时必须保存。x30:链接寄存器(LR)..原创 2021-05-21 18:55:21 · 1806 阅读 · 0 评论 -
ARM汇编优化技巧
1.加减法,逻辑操作占一个周期,目的地址是PC寄存器时增加一个周期。分支指令占3个周期。在cache命中的情况下,16位和8位的装载指令(LDRH、LDRH等)占一个周期,但紧跟的2个周期不能使用装入的数据。32位装载指令占一个周期,紧跟的一个周期不能使用装载数据。如果装载入PC,同样要增加2个周期。 LDRr1,[r2] ADD r1,r1,r3ADD r4,r4,r5 占4个周期改变次序后 LDR...原创 2020-09-15 10:55:05 · 570 阅读 · 0 评论 -
CMP详解—汇编
CF:是否有进位或者借位ZF:0标志位,就是结果是否为0OF:溢出标志位,是否计算机结果溢出了SF:符号位,0为正,1为负CMP指令的格式为 CMP op1 op2 用到的标志位有CF,ZF,OF,SF四个,对于两个无符号数的情况,两数相减不可能溢出了,看CF和ZF标志位就可以,如果ZF为1,说明结果是0,那不用说,两数相等了(有符号数也是这样),如果ZF为0,则如果CF为1,表示有借位,op1<op2,否则op1>op2。对于有符号数,就要看符号标志...原创 2020-07-08 17:27:15 · 2848 阅读 · 0 评论 -
arm汇编解析—tengine winograd_nhwc卷积实现
与xnn/qnn卷积的异同点tengine nhwc的实现跟qnn/xnn的卷积很类似,区别的地方:1、分块大小不同,tengine是4x12的分块,xnn/qnn一般是4x4或4x8 (指浮点引擎)2、winograd毕竟在kernel维度不需要累加,只需在channel维度累加即可,因此实现的时候遍历输入通道求和即可相似的地方:1、kernel的pack都是按照nchw的维度,即输出通道,然后是输入通道,最后是kernelsize维度2、输入的pack方式也很相似,只不过te原创 2020-07-08 14:16:35 · 800 阅读 · 0 评论 -
arm汇编解析—qnnpack卷积实现
目录前言基础直通车arm基础知识arm指令释义qnn汇编代码解析前言最近在移植QNNPACK神经网络加速库,涉及到对卷积arm汇编的修改,这边做个记录,对汇编部分的内容进行注释,顺便学习一下汇编的语法。基础直通车首先要补充arm汇编基础知识,特别是如何传参一定要搞清楚,另外对arm寄存器要了然于胸,剩下的就是指令的用法了:利用堆栈入参参考:https:...原创 2019-09-19 22:10:03 · 2669 阅读 · 1 评论