neon的常见汇编命令
来源:互联网 发布:算法工程师的年薪 编辑:程序博客网 时间:2024/05/21 06:46
push {r4-r9} 保存r4-r9寄存器的内容
.arm.text
.global cost_init
cost_init:
push {r4-r7}
vdup.8 q0,r0 @u
vdup.8 q1,r1 @u0
vdup.8 q2,r2 @u1
vdup.16 q12,r3 @(-1)*diff_scale
ldr r12,[sp,#16]@v
ldr r4,[sp,#20]@v0
ldr r5,[sp,#24]@v1
ldr r6,[sp,#28]@c0
ldr r7,[sp,#32]@c1
lsr r7,r7,#4
@ int v = prow2[width - x - 1 + d];
@ int v0 = buffer[width - x - 1 + d];
@ int v1 = buffer[width - x - 1 + d + width2];
@ int c0 = std::max(0, u - v1); c0 = std::max(c0, v0 - u);
@ int c1 = std::max(0, v - u1); c1 = std::max(c1, u0 - v);
@ cost[x*D + d] = (CostType)(cost[x*D + d] + (std::min(c0, c1) >> diff_scale));
.loop:
vld1.8 {q3},[r12]! @v
vld1.8 {q8},[r4]! @v0
vld1.8 {q9},[r5]! @v1
vqsub.s8 q9,q0,q9 @q9 = q0 - q9 = u-v1
vqsub.s8 q8,q8,q0 @q8 = q8 - q0 = v0-u
vmax.s8 q8,q8,q9 @c0=max(u-v1,v0-u)
vqsub.s8 q10,q3,q2 @v-u1
vqsub.s8 q11,q1,q3 @u0-v
vmax.s8 q10,q10,q11 @c1=max(v-u1,u0-v)
vmin.s8 q3,q8,q10 @min(c0,c1)
vmovl.s8 q10,d6
vmovl.s8 q11,d7
vshl.s16 q10,q10,q12
vshl.s16 q11,q11,q12
vld1.16 {q3},[r6]
vqadd.s16 q10,q10,q3
vst1.16 {q10},[r6]!
vld1.16 {q3},[r6]
vqadd.s16 q11,q11,q3
vst1.16 {q11},[r6]!
subs r7,r7,#1
bne .loop
pop {r4-r7}
bx lr
.end
=====================================================================
vdup.8 q0,r0 @u 从r0里面取出第一个参数(u)放到q0寄存器
vld1.8 {q1},[r1]! @v 从r1里面取出第二个参数(v)放到q1寄存器
vabd.s8 q2,q0,q1 @abs(u-v) 求 | u-v |,值存放到寄存器 q2
vld3.8 {d0-d2}, [r1]! @从r1开始加载3个字节到d1,d2,d3
vmull.u8 q3, d0, d3 @ 将d0内的值和d3内的值相乘后存储在q3里
vmlal.u8 q3, d2, d5 @将d2内的值和d5内的值相乘的结果累加到q3内的值
vshrn.u16 d6, q3, #8 @将q3除以256后值存储在d6里
vst1.8 {d6}, [r0]! @将d6内的值(一个字节)存储到地址r0开始的地方,并将r0的地址加1
subs r2, r2, #1 @将r2的值减1后再赋给r2,如果结果为0,就改变状态位,那么跳转的时候就可以根据这个状态值来做出是否跳转的决定
bne loop @如果上面的结果为0,那么ne的结果就为假,程序就不跳转到loop,也就是跳出循环
push {r4-r5,lr} @将r4,r5,lr进栈保存起来
pop { r4-r5, pc } @恢复之前保存的寄存器r4,r5,程序跳转到下一条指令执行。
vld1.8 {d0,d1,d2},[r1]! 从r1里面取出8个值存在d0,然后再取8个放在d1,然后再取8个放在d2,这叫做线性存储
vld3.8 {d0,d1,d2}, [r1]! 从r1取3个字节分别放到d0,d1,d2,接着再取3个字节放到d0,d1,d2,如此反复下去,这叫结构性存储,多见于rgb
- neon的常见汇编命令
- neon汇编代码的乱序优化
- AT汇编常见命令
- NEON汇编笔记
- arm汇编和neon汇编
- 从一个复数点积算法看NEON的汇编优化(NEON优化实例)
- ARM NEON 编程系列7——NEON gcc编译器intrinsics函数对应的汇编指令
- neon汇编优化实例讲解
- neon 命令集
- -00-neon汇编优化实例讲解【ARM NEON加速】
- 常见的基本汇编书籍
- 汇编中常见的错误
- 常见的几个汇编指令
- 汇编的 DEBUG 命令
- 在Cortex-A8平台下memcpy ARM/NEON汇编性能的测试
- 在Cortex-A8平台下memcpy ARM/NEON汇编性能的测试
- neon优化的yuv420转rgb24汇编代码,iOS/Android可用
- 在Cortex-A8平台下memcpy ARM/NEON汇编性能的测试
- Matlab之初
- 对于文本溢出处理的方法
- SQL Server中,查询数据库中有多少个表,以及数据库其余类型数据统计查询
- 案例:使用XPath的的爬虫
- 【Python爬虫】添加高级功能
- neon的常见汇编命令
- 手绘思维导图的学习技巧
- background-size的取值有哪些?cover与contain有什么区别?
- javascript 通过定时循环检测获取快速获取图片实际大小的宽高
- android 顶部悬停折叠CoordinatorLayout,AppBarLayout
- fastDFS token有效性配置说明
- 选择排序-二分查找-Arrays-System-BigDecimal-BigInteger-Date-Calendar-Math
- neo4j图数据库--Cypher入门
- 蓝桥