armv8架构与指令集.整理.初稿

上传人:101****457 文档编号:87636491 上传时间:2019-04-10 格式:PDF 页数:28 大小:1.87MB
返回 下载 相关 举报
armv8架构与指令集.整理.初稿_第1页
第1页 / 共28页
armv8架构与指令集.整理.初稿_第2页
第2页 / 共28页
armv8架构与指令集.整理.初稿_第3页
第3页 / 共28页
armv8架构与指令集.整理.初稿_第4页
第4页 / 共28页
armv8架构与指令集.整理.初稿_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《armv8架构与指令集.整理.初稿》由会员分享,可在线阅读,更多相关《armv8架构与指令集.整理.初稿(28页珍藏版)》请在金锄头文库上搜索。

1、目目 录录 第第 1 1 章章 ARMV8ARMV8 简介简介 3 3 1.1 基础认识 3 1.2 相关专业名词解释 . 3 第第 2 2 章章 EXECUTION STATEEXECUTION STATE 4 4 2.1 提供两种EXECUTION STATE . 4 2.2 决定EXECUTION STATE的条件 . 4 第第 3 3 章章 EXCEEXCEPTION LEVELPTION LEVEL 5 5 3.1 EXCEPTION LEVEL 与SECURITY 5 3.1.1 EL3 使用AArch64、AArch32 的对比 5 3.2 ELX 和 EXECUTION STA

2、TE 组合 7 3.3 路由控制 7 3.3.1 路由规则 7 3.3.2 IRQ/FIQ/SError路由流程图 9 第第 4 4 章章 ARMVARMV8 8 寄存器寄存器 1010 4.1 AARCH32 重要寄存器 10 4.1.1 A32 状态下寄存器组织 . 11 4.1.1 T32 状态下寄存器组织 . 11 4.2 AARCH64 重要寄存器 11 4.3 64、32 位寄存器的映射关系 12 第第 5 5 章章 异常模型异常模型 1313 5.1 异常类型描述 . 13 5.1.1 AArch32 异常类型 . 13 5.1.2 AArch64 异常类型 . 13 5.2 异

3、常处理逻辑 . 14 5.2.1 寄存器操作 . 14 5.2.2 路由控制 . 15 5.3 流程图对比 . 15 5.3.1 IRQ 流程图 . 16 5.3.2 Data Abort 流程图 19 5.4 源代码异常入口 21 5.4.1 C函数入口 21 5.4.2 上报流程图 . 21 5.4.3 异常进入压栈准备 . 22 5.4.4 栈布局 . 22 第第 6 6 章章 ARMV8ARMV8 指令集指令集 2323 6.1 概况 . 23 6.1.1 指令基本格式 . 23 6.1.2 指令分类 . 23 6.2 指令详解 . 23 6.2.1 跳转指令 . 23 6.2.2 异

4、常产生、返回指令 . 24 6.2.3 系统寄存器指令 . 24 6.2.4 数据处理指令 . 24 6.2.5 load/store内存操作指令 . 25 6.3 指令编码 . 26 6.4 机器码分析 . 26 第第 7 7 章章 流水线流水线 2727 7.1 简介 . 27 7.1.1 简单三级流水线 . 27 7.1.2 经典五级流水线 . 27 7.2 流水线冲突 . 28 7.3 指令并行 . 28 ARMv8 架构与指令集 - 3 - 第 1 章 ARMv8 简介 1.1 基础认识 ARMv8 的架构继承以往 ARMv7 与之前处理器技术的基础, 除了现有的 16/32bit

5、的 Thumb2 指令支持 外, 也向前兼容现有的A32(ARM 32bit)指令集, 基于64bit的AArch64架构, 除了新增A64(ARM 64bit) 指令集外,也扩充了现有的 A32(ARM 32bit)和 T32(Thumb2 32bit)指令集,另外还新增加了 CRYPTO(加密)模块支持。 1.2 相关专业名词解释 AArch32 描述 32bit Execution State AArch64 描述 64bit Execution State A32、T32 AArch32 ISA (Instruction Architecture) A64 AArch64 ISA (I

6、nstruction Architecture) Interprocessing 描述 AArch32 和 AArch64 两种执行状态之间的切换 SIMD Single-Instruction, Multiple-Data (单指令多数据) ARMv8 架构与指令集 - 4 - 第 2 章 Execution State 2.1 提供两种 Execution State ARMv8 提供 AArch32 state 和 AArch64 state 两种 Execution State,下面是两种 Execution State 对比. Execution State Note AArch32

7、 提供 13 个 32bit 通用寄存器 R0-R12,一个 32bit PC 指针 (R15)、堆栈指针 SP (R13)、链接 寄存器 LR (R14) 提供一个 32bit 异常链接寄存器 ELR, 用于 Hyp mode 下的异常返回 提供 32 个 64bit SIMD 向量和标量 floating-point 支持 提供两个指令集 A32(32bit)、T32(16/32bit) 兼容 ARMv7 的异常模型 AArch64 提供 31 个 64bit 通用寄存器 X0-X30(W0-W30),其中 X30 是程序链接寄存器 LR 提供一个 64bit PC 指针、堆栈指针 SPx

8、 、异常链接寄存器 ELRx 提供 32 个 128bit SIMD 向量和标量 floating-point 支持 定义 ARMv8 异常等级 ELx(x64bit ,否则=32bit HCR_EL2.RW 决定 EL1 的执行状态,为 1 =64bit ,否则=32bit SCR_EL3.RW 确定 EL2 or EL1 的执行状态,为 1 =64bit ,否则=32bit ARMv8 架构与指令集 - 5 - 第 3 章 Exception Level ARMv8 定义 EL0-EL3 共 4 个 Exception Level 来控制 PE 的行为. ELx(x AArch64 此两类

9、组合不存在 64bit 32bit 之间的所谓 Interprocessing 切换 EL0/EL1/EL2/EL3 = AArch32 EL0 = AARCH32,EL1/EL2/EL3 = AArch64 此 三 类 组 合 存 在 64bit 32bit 之 间 的 所 谓 Interprocessing 切换 EL0/EL1 = AArch32,EL2/EL3 = AArch64 EL0/EL1/EL2 = AArch32,EL3 = AArch64 组合规则 字宽(ELx) SP_EL0 & 从 Current EL 来 0x000 0x080 0x100 0x180 SP = SP

10、_ELx & 从 Current EL 来 0x200 0x280 0x300 0x380 64bit = 64bit & 从 Low level EL 来 0x400 0x480 0x500 0x580 32bit = 64bit & 从 Low level EL 来 0x600 0x680 0x700 0x780 SP = SP_EL0,表示使用 SP_EL0 堆栈指针,由 PSTATE.SP = 0 决定,PSTATE.SP = 1 则 SP_ELx; 32bit = 64bit 是指发生异常时 PE 从 AArch32 切换到 AArch64 的情况; 5.2 异常处理逻辑 5.2.1

11、 寄存器操作 AArch32AArch32 statestate 异常模式 x = und/svc/abt/irq/fiq/hyp/mon 32 位系统对应的 7 大异常模式 PE 根据异常类型跳转到对应的异常模式 x 跳转到哪一种模式通常由路由关系决定 保存异常返回地址到 LR_x,用于异常返回用 LR 也是对应模式的 R14_x 寄存器, 32 位系统下 LR 和 ELR 是同一个寄存器,而 64 位是独立的 备份 PSTATE 数据到 SPSR_x 异常返回时需要从 SPSR_x 恢复 PSTATE PSTATE.M4:0设置为异常模式 x PSTATE.A,I,F = 1 PSTATE

12、.T = 1,强制进入 A32 模式 PSTATE.IT7:2 = “00000” PSTATE.M4只是对 32 位系统有效,64 为下是保 留的,因为 64 位下没有各种 mode 的概念. 异常处理都要切换到 ARM 下进行; 进入异常时需要暂时关闭 A,I,F 中断; 根据异常模式 x 的向量偏移跳转到进入异常处理 各个 mode 有对应的 Vector base addr + offset AArch64 stateAArch64 state ELx, x = 1,2,3 代表目标 EL1EL2EL3, EL0 不能作为目标 EL 保存 PSTATE 数据到 SPSR_ELx 异常返

13、回时需要从 SPSR_ELx 中恢复 PSTATE 保 存 异 常 进 入 地 址 到 ELR_ELx , 同 步 异 常 (und/abt 等)是当前地址, 异步异常(irq/fiq 等)是下一条指令地址 64 位架构 LR 和 ELR 是独立分开的,这点和 32 位 架构有所差别 保存异常原因信息到 ESR_ELx ESR_ELx.EC 代表 Exception Class, 关注这个 bit PE 根据目标 EL 的异常向量表中定义的异常地址 强制跳转到异常处理程序 跳转到哪个 EL 使用哪个向量偏移地址又路由关 系决定 堆栈指针 SP 的使用由目标 EL 决定 (SPSR_ELx.M0

14、 = 1) ? h(ELx): t(EL0) ARMv8 架构与指令集 - 15 - 5.2.2 路由控制 Execution State 异步异常(中断) 路由控制位、 优先级排列. 1 允许 0 禁止 AArch32 Asynchronous Data Abort (异步数据终止) SCR.EA HCR.TGE HCR.AMO IRQ or vIRQ SCR.IRQ HCR.TGE HCR.IMO FIQ or vFIQ SCR.FIQ HCR.TGE HCR.FMO AArch64 SError or vSError SCR_EL3.EA HCR_EL2.TGE HCR_EL2.AMO

15、IRQ or vIRQ SCR_EL3.IRQ HCR_EL2.TGE HCR_EL2.IMO FIQ or vFIQ SCR_EL3.FIQ HCR_EL2.TGE HCR_EL2.FMO 若 HCR_EL2.TGE =1 所有的虚拟中断将被禁止,HCR.AMO,IMO,FMO HCR_EL2.AMO,IMO,FMO被当成 1 处理. 5.3 流程图对比 AArch32、AArch64 架构下 IRQ 和 Data Abort 异常处理流程图对比. Data-abort-AArch32.jpg Data-abort-AArch64.jpg IRQ-AArch32.jpg IRQ-AARCH6

16、4-1.jpg ARMv8 架构与指令集 - 16 - 5.3.1 IRQ 流程图 5.3.1.1 AArch32 ARMv8 架构与指令集 - 17 - 5.3.1.2 AArch64 ARMv8 架构与指令集 - 18 - ARMv8 架构与指令集 - 19 - 5.3.2 Data Abort 流程图 5.3.2.1 AArch32 5.3.2.2 AArch64 ARMv8 架构与指令集 - 20 - ARMv8 架构与指令集 - 21 - 5.4 源代码异常入口 5.4.1 C 函数入口 异常类型 AArch32 State AArch64 State 所在文件 C 函数 所在文件 C 函数 Und arm/kernel/traps.c do_undefinstr Arm64/kernel/traps.c do_undefinstr Data Abort arm/mm/fault.c do_DataAbort arm64/mm/fault.c

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 综合/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号