标签:

前文《arm64》、《arm32》已经介绍arm,aarch64优化的一些基本知识,本文着重介绍优化过程中容易混淆的点,或需注意的点。

1. 关于指令编码长度

1.1 aarch32

A32模式(ARM instruction sets),指令固定的编码长度为32bit

T32模式(Thumb instruction sets),指令可以编码成16bit长,也可编码成32bit长

1.2 aarch64

指令固定的编码长度为32bit

参考https://static.docs.arm.com/ddi0487/ca/DDI0487C_a_armv8_arm.pdf A1.3.2 The ARM instruction sets

2. 关于当前指令的地址

2.1 aarch32

在ARM32状态下,当前执行指令的地址通常是pc-8,而在Thumb状态下通常是pc-4。参考地址:http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.den0013d/index.html 程序计数器(pc)

疑问?

指令的编码长度为32位,即4字节,为什么arm模式下,当前指令是pc-8:

拿ARMv7三级流水线做示例,如图,假设add指令fetch时,指令地址为pc1; add指令decode时,下一条指令sub又进入fetch阶段,此时pc2 = pc1 + 4; add指令execute时,sub指令后的cmp油进入fetch阶段,此时pc = pc2 + 4, 因此add指令执行时真正的pc地址pc1 = pc-8。

参考https://blog.csdn.net/lee244868149/article/details/49488575/

2.2 aarch64

在arm64状态下,当前执行指令的地址通常是pc,英文原文:

Program counter

The current Program Counter (PC) cannot be referred to by number as if part of the general register file and therefore cannot be used as the source or destination of arithmetic instructions, or as the base, index or transfer register of load and store instructions.

The only instructions that read the PC are those whose function it is to compute a PC-relative address (ADR, ADRP, literal load, and direct branches), and the branch-and-link instructions that store a return address in the link register (BL and BLR). The only way to modify the program counter is using branch, exception generation and exception return instructions.

Where the PC is read by an instruction to compute a PC-relative address, then its value is the address of that instruction. Unlike A32 and T32, there is no implied offset of 4 or 8 bytes.

参考http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.den0024a/ch05s01s03.html 5.1.3. Registers

3. 关于形参超过指令个数,访问方法

3.1 aarch32

arm32下,前4个参数是通过r0~r3传递,第4个参数需要通过sp访问,第5个参数需要通过sp + 4 访问,第n个参数需要通过sp + 4*(n-4)访问。

3.2 aarch64

arm64下,前8个参数是通过x0~x7传递,第8个参数需要通过sp访问,第9个参数需要通过sp + 8 访问,第n个参数需要通过sp + 8*(n-8)访问。

4. aarch64下< Vn>.< Ts>[< index2>]的用法

示例: mov < Vd>.< Ts>[< index1>], < Vn>.< Ts>[< index2>]

其中Ts的值需要注意,只能是以下情况之一:

B

H

S

D

不要将Ts写成8B、2s等,因为是取矢量寄存器(Vn)中的元素,所以带数字是多此一举,反而导致在ios下编译有问题。

5. aarch64下imm需注意的地方

示例:cmp < Wn|WSP>, #< imm> {, < shift>}

其中imm是无符号立即数,取值范围[0, 4095]。

此处说明的是:在使用立即数的时候,需要看指令所支持的立即数范围。

6. aarch64下v寄存器的写法

示例: add v4.4H, v4.4H, V5.4H

指令有没有问题?在Linux下编是不会提示错误的,但是在ios下(mac电脑上编)会提示指令不合法,正确的写法:

add v4.4H, v4.4H, v5.4H 注意到没?V5.4H 改成了v5.4H,大小写!!!

标签:

来源: https://blog.csdn.net/listener51/article/details/82856001

aarch64指令集_ARM与AARCH64指令集优化总结相关推荐

  1. java epson指令集_小票打印机指令集封装(支持EPSON指令)

    最近写了一些关于小票打印机的程序,不难,但是记录下来,作为足迹吧. 现在市场上的小票机基本都支持EPSON指令.指令集文档 对指令集进行了自己的封装,方便以后调用: package aheiziUti ...

  2. gbip指令集_ARM汇编指令集

    ARM处理器的指令集可以分为跳转指令.数据处理指令.程序状态寄存器(PSR)处理指令.加载/存储指令.协处理器指令和异常产生指令6大指令. 一.跳转指令 跳转指令用于实现程序流程的跳转,在ARM程序中 ...

  3. 计算机架构宗师Patterson与Hennessy 演讲实录,ISA指令集架构回顾——未来指令集架构方向,RISC-V与DSA

    相信所有和计算机体系结构打过交道的朋友们都看过David Patterson与John Hennessy的煌煌巨作,<计算机体系架构:量化研究方法>.两位在计算机架构领域鼎鼎大名的教授,一 ...

  4. 英特尔的指令集体系结构_新指令集将上线:Intel 新版指令集手册确认 Alder Lake 架构的存在...

    新指令集将上线:Intel 新版指令集手册确认 Alder Lake 架构的存在 2020-04-02 14:33:32 1点赞 6收藏 3评论 你是AMD Yes党?还是intel和NVIDIA的忠 ...

  5. RISC-V指令集架构------RV32C压缩指令集

    0 概述 RV32C是RISC-V架构中的一种指令集,其设计目标是提供高效的指令压缩技术,同时保持RISC-V架构的简洁和灵活性.它是RISC-V架构中的一个重要的扩展,为嵌入式系统和低功耗设备提供了 ...

  6. i基准指令集 mips_MIPS处理器 MIPS指令集(上)

    引言 MIPS指令集有固定的MIPS指令格式和MIPS指令类型,还有固定的MIPS寄存器,它们是了解MIPS指令必不可少的前提. 其中,寄存器是MIPS处理器高效的临时存储工具,其存取速度极快,共有固 ...

  7. 手机网银Linux aarch64,android – arm64和aarch64之间的差异

    我有两个"解锁"设备,一个iPad mini 3和一个Galaxy Edge 6,它们都有一个终端和一组简单的unix命令.我认为这两款设备都配备了arm64处理器,但是当我运行时 ...

  8. AARCH64 开发系列1: AARCH64 环境搭建

    首发极术社区 作者:Zhiyuan zhu 如对Arm相关技术感兴趣,欢迎私信aijishu20加入技术微信群. 概述 近年来 Arm 服务器的发展势头很猛,但大部分人的个人电脑还是 x86 环境,开 ...

  9. 计算机指令集_计算机科学组织| 指令集及其类型

    计算机指令集 指令系统 (Instruction Set) An instruction set can be defined as a group of instruction that a pro ...

最新文章

  1. 基于消息机制的万能框架
  2. Managing Tables
  3. 04-正则解析+bs4基础爬虫
  4. 常见排序算法(C实现)
  5. python处理网络文字流,设置为utf8编码
  6. 通过TLS发送的Java邮件
  7. VS code 调试配置01 Debugging
  8. Machine Learning - X. Advice for Applying Machine Learning机器学习算法的诊断和改进 (Week 6)
  9. 2款免费的图片压缩工具
  10. 计算地球经纬度两点之间的弧长
  11. shap 模型_使用shap loss值调试监控模型
  12. 语音对话声空计算机APP,空空语音app
  13. oracle连接读本机DNS,oracle 11gR2 修改 DNS 方式 SCAN IP
  14. TFT_LCD 驱动芯片 SSD1963QL9
  15. 错误:类 xxx 是公共的, 应在名为 xxx.java 的文件中声明
  16. 武大博士后应聘社区社工引热议,内卷还是人各有志?
  17. LOCAL_PRIVILEGED_MODULE 详解(1)
  18. Fedora Linux添加Canon打印机驱动
  19. Netty入门 -- 什么是Netty?
  20. sublime text3编辑器配置

热门文章

  1. 免安装:MySQL配制
  2. Bootstrap 引入 栅栏系统 文本 表格 类
  3. Springboot---JPA配置
  4. 为何学Python(转)
  5. MP3随身听固件升级详细教程
  6. linux 驱动程序 摇杆 游戏,SDL游戏摇杆(Joy Stick)开发
  7. Scrapy爬取新浪微博用户粉丝数据
  8. 泡妞之必备QQ聊天用语
  9. date java 格式化 sss_java DateFormat 格式化格式参考
  10. 概率论与数理统计第一章课后题答案及详解