ARM assembly instruction set 汇总(一)
ARM Core指令现在越来越强大,同时又因此能耗低,现在越来越广泛地应用于移动设备中。随着3G时代的到来,各种移动终端设备中都有多媒体功能,而且是功能越多且性能越优.很多smartphone上都能播放高清的视频了。在这就把ARM assembly instruction sets 进行次总结,也好让自己对相关的指令更加地灵活应用。
目前由指令集来看,主要有以下几种:ARMv4, ARMv5E, ARMv6 and Neon.
各种ARM CPU core都有其对应的指令集,其体的型号可查ARM 公司资料(在公司主页可以找到很有用的infos),如:ARM7TDMI, ARM720T,ARM920T等用ARMv4 ISA; ARM7EJ-S, AMR926EJ-S, ARM1020E 等用ARMv5E, ARM1036J-S, ARM1136J-S等用ARMv6 ISA, Cortex-A8 等用Neon. 所有的ARM core都有向下兼容性。
本文基于ARMv4,来对ARMv5E, ARMv6 和Neon ISAs增加部分进行汇总,并分析新增指令会带来什么样的性能提升。
ARMv5E 扩展提供了许多新的指令。
(1) CLZ Rd, Rm ---- 零计数指令用于计算最高符号位与第一个1之间的零的个数
这个指令在Speech/Audio codec 归一化运算中很有用,如用ARMv4 ISA实现前向零计数会有用到好几第指令来实现。
(2) QADD Rd, Rm, Rn --- Rd = Sat(Rm + Rn)
QDADD Rd, Rm, Rn ---- Rd = Sat(Rm + Rn << 1)
QSUB Rd, Rm, Rn ---- Rd = Sat(Rm - Rn)
QDSUB Rd, Rm, Rn ---- Rd = Sat(Rm - Rn << 1)
由于代码的定点化过程中,对很多运算都有饱和保护,用C或ARMv4 ISA来实现这个功能效率会很低。但用ARMv5只照一条指令就行了。
(3) 乘累加指令
ARMv5E在音频算法方面的optimization效果会很好,主要是有新增加了16bits*16bits,32bits*16bits乘累加指令。而音频很多源数据是16bits,同时也有可能一些filter coefs 是32bits,这时ARMv5E指令就能很好的发挥其威力.
SMLAxy Rd, Rm, Rs, Rn --- Rd = (Rm.x * Rs.y) + Rn
SMLALxy RdHi, RdLo, Rm, Rs --- [RdHi, RdLo] += Rm.x * Rs.y
SMLAWy Rd, Rm, Rs, Rn ---- Rd = ((Rm*Rs.y) >> 16) + Rn
SMULxy Rd, Rm, Rs ---- Rd = Rm.x + Rs. y
SMULWy Rd, Rm, Rs ---- Rd = ((Rm*Rs.y) >> 16)
转载于:https://www.cnblogs.com/huaping-audio/archive/2010/07/31/1789062.html
ARM assembly instruction set 汇总(一)相关推荐
- ARM机器码的操作码汇总
ARM机器码的操作码汇总 阿梾 工作日志 2015/02/25 11:19 阅读数 2.8K v is immed_value n is Rn m is Rm s is Rs r is registe ...
- ARM汇编常用指令汇总
文章目录 ARM常见汇编指令的汇总 1.EQU 2.AREA 3.DCD 4. ENTRY 5. START 6. LDR 7. STR 8.BEQ 9.MSR/MRS 10.B/BL/BX 11.P ...
- 【嵌入式】ARM技术博客汇总
00. 目录 文章目录 00. 目录 01. 开发环境 02. ARM汇编 03. ARM裸板 04. 内核驱动 05. 项目实践 06. 问题专区 07. 参考链接 08. 附录 01. 开发环境 ...
- ARM Compiler相关资料汇总
Arm compiler user guide V6.6用户使用手册,告诉用户如何去使用RM. https://developer.arm.com/documentation/dui1093/d Ar ...
- ARM base instruction -- 简单三级流水线
/* * 简单三级流水线 */ IF Instruction fetch 取指 ...
- ARM base instruction -- ldm
/* * ldm * * 批量访问内存,内存中批量读取数据到寄存器 */ LDM|STM {type} 基址寄存器{!}, 寄存器列表{^} ldm{cond} {!} < regist ...
- ARM base instruction -- cmn
/* * CMN : 比较取负的值 */ (Compare Negative) CMN{条件}{P} <op 1>, <op 2> ...
- ARM base instruction -- b bl bx blx
'B{cond} <target_address> '分支指令 - 类似于goto {} 代表可有可无,<>代表缺少就报错,cond为指令执行的条件码,target_addr ...
- ARM base instruction -- mul
/* * MUL : 乘法 */ (Multiplication) MUL{条件}{S} <dest>, <op 1>, <op 2> ...
最新文章
- 小鹏高管:高速自动驾驶明年实现量产
- IBM---Java 多线程与并发编程专题
- Intel VT学习笔记(七)—— EPT物理地址转换
- hbase的集群搭建
- css样式子绝父相,子绝父相_HTML+CSS前端基础知识教程_腾讯视频
- Swiftfox:极速的冲浪体验
- linux libmpi.so.12,单机安装vasp5.4.4,系统SUSE 12 SP3,编译器Intel_Parallel_Studio_XE_2019_Linux...
- 用户故事与敏捷方法—编写故事
- 数据库索引失效与判断是否命中索引
- vue2项目封装百度地图3.0拾取坐标控件
- 打破双亲委派么,怎么打破_打破统一垃圾收集规则
- echarts加载世界地图并展示个人数据
- Tik Tok月活12亿 Tiktok和抖音有什么不同 ?
- PXC 避免加入集群时发生SST
- yum clean all的作用
- 对图片进行等比例压缩
- 理光打印机MP 3054 SP苹果电脑MAC驱动
- oracle 分区表好处,Oracle表分区的相关概念及其优点(转)
- 【访问控制-安全标记】自主访问控制和强制访问控制
- 你想把书出到第七版么?
热门文章
- socket缓冲区以及阻塞模式
- 7添加静态路由 hat red_两个不同网段的路由器,如何互通?
- 芦溪中学2021高考成绩查询,三台县芦溪中学2021年招生简章
- 怎样取消无线配置服务器,如何 去掉无线配置服务器
- element 修改分页样式_如何给wordpress网站的文章列表,添加分页效果?可以通过2种方式...
- matplotlib 旋转刻度_Matplotlib数据可视化:文本与坐标轴
- java https jasonrpc_以太坊 ethereum JSON-RPC java 调用示例
- lsof查看占用高_查看端口占用情况lsof,并关闭对应进程kill
- python基础开发环境_Python基础教程,第一讲,开发环境搭建
- java 用户日志_2020年阿里巴巴最全Java、架构师、大数据、算法PPT技术栈图册