在好例子网,分享、交流、成长!
您当前所在位置:首页Others 开发实例Clojure → 玄铁 C910 用户手册(openc910)

玄铁 C910 用户手册(openc910)

Clojure

下载此实例
  • 开发语言:Others
  • 实例大小:3.73M
  • 下载次数:9
  • 浏览次数:414
  • 发布时间:2022-01-05
  • 实例类别:Clojure
  • 发 布 人:lixiaowei16
  • 文件格式:.pdf
  • 所需积分:2
 相关标签: 用户手册 10 用户 手册

同类人气实例

实例介绍

【实例简介】玄铁 C910 用户手册(openc910)
【实例截图】

【核心代码】

第一章 概述 1
1.1 简介 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 特点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2.1 C910MP 处理器体系结构的主要特点 . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2.2 C910 核心的主要特点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.3 配置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.4 玄铁架构扩展技术 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.5 版本说明 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.6 命名规则 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.6.1 符号 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.6.2 术语 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
第二章 处理器简介 6
2.1 结构框图 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.2 核内子系统 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.2.1 指令提取单元 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.2.2 指令译码单元 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.2.3 执行单元 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.2.4 存储载入单元 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.2.5 指令退休单元 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.2.6 虚拟内存管理单元 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.2.7 物理内存保护单元 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.3 多核子系统 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.3.1 数据一致性接口单元 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.3.2 二级高速缓存 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.3.3 主设备接口 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.3.4 平台级中断控制器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.3.5 计时器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.4 接口概览 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
第三章 指令集 10
3.1 RV 基础指令集 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3.1.1 整型指令集(RV64I) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
ii
3.1.2 乘除法指令集(RV64M) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3.1.3 原子指令集(RV64A) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.1.4 单精度浮点指令集(RV64F) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.1.5 双精度浮点指令集(RV64D) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.1.6 压缩指令集(RV64C) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.2 玄铁扩展指令集 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.2.1 算术运算类指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.2.2 位操作类指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.2.3 内存访问类指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.2.4 Cache 指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.2.5 多核同步指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.2.6 半精度浮点类指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
第四章 处理器模式与寄存器 27
4.1 处理器模式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
4.2 寄存器视图 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
4.3 通用寄存器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
4.4 浮点寄存器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
4.4.1 浮点寄存器与通用寄存器传输数据 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
4.4.2 维护寄存器精度的一致 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
4.5 系统控制寄存器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
4.5.1 标准控制寄存器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
4.5.2 扩展控制寄存器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
4.6 数据格式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
4.6.1 整型数据格式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
4.6.2 浮点数据格式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
4.7 大小端 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
第五章 异常与中断 37
5.1 概述 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
5.2 异常 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
5.2.1 异常响应 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
5.2.2 异常返回 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
5.2.3 非精确异常 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
5.3 中断 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
5.3.1 中断优先级 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
5.3.2 中断响应 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
5.3.3 中断返回 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
第六章 内存模型 42
6.1 内存模型概述 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
6.1.1 内存属性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
6.1.2 内存一致性模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
iii
6.2 虚拟内存管理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
6.2.1 MMU 概述 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
6.2.2 TLB 组织形式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
6.2.3 地址转换流程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
6.2.4 系统控制寄存器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
6.2.4.1 MMU 地址转换寄存器 (SATP) . . . . . . . . . . . . . . . . . . . . . . . . . . 46
6.2.4.2 MMU 控制寄存器 (SMCIR) . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
6.2.4.3 MMU Index 寄存器 (SMIR) . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
6.2.4.4 MMU EntryHi 寄存器 (SMEH) . . . . . . . . . . . . . . . . . . . . . . . . . 49
6.2.4.5 MMU EntryLo 寄存器 (SMEL) . . . . . . . . . . . . . . . . . . . . . . . . . . 49
6.3 物理内存保护 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
6.3.1 PMP 概述 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
6.3.2 PMP 控制寄存器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
6.3.2.1 物理内存保护设置寄存器(PMPCFG) . . . . . . . . . . . . . . . . . . . . . 52
6.3.2.2 物理内存保护地址寄存器(PMPADDR) . . . . . . . . . . . . . . . . . . . . 54
6.4 内存访问顺序 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
第七章 内存子系统 56
7.1 内存子系统概述 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
7.2 L1 指令 Cache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
7.2.1 概述 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
7.2.2 路预测 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
7.2.3 循环加速缓存器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
7.2.4 分支历史表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
7.2.5 分支跳转目标预测器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
7.2.6 间接分支预测器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
7.2.7 返回地址预测器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
7.2.8 快速跳转目标预测器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
7.3 L1 数据 Cache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
7.3.1 概述 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
7.3.2 Cache 一致性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
7.3.3 独占式访问 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
7.4 L2 Cache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
7.4.1 L2 Cache 概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
7.4.2 Cache 一致性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
7.4.3 组织形式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
7.4.4 RAM 延时 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
7.5 内存加速访问 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
7.5.1 L1 I-Cache 指令预取 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
7.5.2 L1 D-Cache 多通道数据预取 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
7.5.3 L1 自适应的写分配机制 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
7.5.4 L2 预取机制 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
iv
7.6 L1/L2 Cache 操作相关的指令和寄存器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
7.6.1 L1 高速缓存扩展寄存器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
7.6.2 L2 高速缓存扩展寄存器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
7.6.3 L1/L2 Cache 操作指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
第八章 中断控制器 67
8.1 CLINT 中断控制器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
8.1.1 CLINT 寄存器地址映射 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
8.1.2 软件中断 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
8.1.3 计时器中断 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
8.2 PLIC 中断控制器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
8.2.1 中断的仲裁 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
8.2.2 中断的请求与响应 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
8.2.3 中断的完成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
8.2.4 PLIC 寄存器地址映射 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
8.2.5 中断优先级配置寄存器(PLIC_PRIO) . . . . . . . . . . . . . . . . . . . . . . . . . 74
8.2.6 中断等待寄存器(PLIC_IP) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
8.2.7 中断使能寄存器(PLIC_IE) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
8.2.8 PLIC 权限控制寄存器(PLIC_PER) . . . . . . . . . . . . . . . . . . . . . . . . . . 75
8.2.9 中断阈值寄存器(PLIC_TH) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
8.2.10 中断响应/完成寄存器(PLIC_CLAIM) . . . . . . . . . . . . . . . . . . . . . . . . . 76
8.3 多核中断 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
8.3.1 多个核心同时处理外部中断 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
8.3.2 核间发送软件中断 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
第九章 总线接口 78
9.1 AXI 主设备接口 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
9.1.1 AXI 主设备接口的特点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
9.1.2 主设备接口的 Outstanding 能力 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
9.1.3 支持的传输类型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
9.1.4 支持的响应类型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
9.1.5 不同总线响应下的行为 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
9.1.6 AXI 主设备接口信号 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
第十章 调试 84
10.1 Debug 单元的功能 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
10.2 Debug 单元与 CPU Core 的连接 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
10.3 Debug 接口信号 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
第十一章 功耗管理 88
11.1 Power Domain . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
11.2 低功耗模式概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
11.3 核心 WFI 流程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
v
11.4 单个核心下电流程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
11.5 Cluster 下电流程(硬件清空 L2) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
11.6 Cluster 下电流程(软件清空 L2) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
11.7 简化场景:Cluster 整体下电流程(硬件清空 L2) . . . . . . . . . . . . . . . . . . . . . . . . 92
11.8 简化场景:Cluster 整体下电流程(软件清空 L2) . . . . . . . . . . . . . . . . . . . . . . . . 92
11.9 低功耗相关的编程模型和接口信号 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
11.9.1 编程模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
11.9.2 接口信号 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
第十二章 性能监测单元 95
12.1 PMU 简介 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
12.2 PMU 的编程模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
12.2.1 PMU 的基本用法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
12.2.2 PMU 事件溢出中断 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
12.3 PMU 相关的控制寄存器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
12.3.1 机器模式计数器访问授权寄存器(mcounteren) . . . . . . . . . . . . . . . . . . . . . 96
12.3.2 超级用户模式计数器访问授权寄存器(scounteren) . . . . . . . . . . . . . . . . . . . 97
12.3.3 机器模式计数禁止寄存器(mcountinhibit) . . . . . . . . . . . . . . . . . . . . . . . 97
12.3.4 超级用户写使能寄存器(mcounterwen) . . . . . . . . . . . . . . . . . . . . . . . . . 98
12.3.5 性能监测事件选择寄存器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
12.3.6 事件计数器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
第十三章 程序示例 101
13.1 处理器最优性能配置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
13.2 MMU 设置示例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
13.3 PMP 设置示例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
13.4 高速缓存示例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
13.4.1 高速缓存的开启示例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
13.4.2 指令高速缓存与数据高速缓存的同步示例 . . . . . . . . . . . . . . . . . . . . . . . . . 107
13.4.3 TLB 与数据高速缓存的同步示例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
13.5 同步原语示例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
13.6 PLIC 设置示例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
13.7 PMU 设置示例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
第十四章 附录 A 标准指令术语 111
14.1 附录 A-1 I 指令术语 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
14.1.1 ADD——有符号加法指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
14.1.2 ADDI——有符号立即数加法指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
14.1.3 ADDIW——低 32 位有符号立即数加法指令 . . . . . . . . . . . . . . . . . . . . . . . 112
14.1.4 ADDW——低 32 位有符号加法指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
14.1.5 AND——按位与指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
14.1.6 ANDI——立即数按位与指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
14.1.7 AUIPC——PC 高位立即数加法指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
vi
14.1.8 BEQ——相等分支指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
14.1.9 BGE——有符号大于等于分支指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
14.1.10 BGEU——无符号大于等于分支指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
14.1.11 BLT——有符号小于分支指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
14.1.12 BLTU——无符号小于分支指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
14.1.13 BNE——不等分支指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
14.1.14 CSRRC——控制寄存器清零传送指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
14.1.15 CSRRCI——控制寄存器立即数清零传送指令 . . . . . . . . . . . . . . . . . . . . . . 119
14.1.16 CSRRS——控制寄存器置位传送指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
14.1.17 CSRRSI——控制寄存器立即数置位传送指令 . . . . . . . . . . . . . . . . . . . . . . 120
14.1.18 CSRRW——控制寄存器读写传送指令 . . . . . . . . . . . . . . . . . . . . . . . . . . 120
14.1.19 CSRRWI——控制寄存器立即数读写传送指令 . . . . . . . . . . . . . . . . . . . . . . 121
14.1.20 EBREAK——断点指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
14.1.21 ECALL——环境异常指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
14.1.22 FENCE——存储同步指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
14.1.23 FENCE.I——指令流同步指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
14.1.24 JAL——直接跳转子程序指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
14.1.25 JALR——寄存器跳转子程序指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
14.1.26 LB——有符号扩展字节加载指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
14.1.27 LBU——无符号扩展字节加载指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
14.1.28 LD——双字加载指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
14.1.29 LH——有符号扩展半字加载指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
14.1.30 LHU——无符号扩展半字加载指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
14.1.31 LUI——高位立即数装载指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
14.1.32 LW——有符号扩展字加载指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
14.1.33 LWU——无符号扩展字加载指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
14.1.34 MRET——机器模式异常返回指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
14.1.35 OR——按位或指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
14.1.36 ORI——立即数按位或指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
14.1.37 SB——字节存储指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
14.1.38 SD——双字存储指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
14.1.39 SFENCE.VMA——虚拟内存同步指令 . . . . . . . . . . . . . . . . . . . . . . . . . . 130
14.1.40 SH——半字存储指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
14.1.41 SLL——逻辑左移指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
14.1.42 SLLI——立即数逻辑左移指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
14.1.43 SLLIW——低 32 位立即数逻辑左移指令 . . . . . . . . . . . . . . . . . . . . . . . . . 133
14.1.44 SLLW——低 32 位逻辑左移指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
14.1.45 SLT——有符号比较小于置位指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
14.1.46 SLTI——有符号立即数比较小于置位指令 . . . . . . . . . . . . . . . . . . . . . . . . 134
14.1.47 SLTIU——无符号立即数比较小于置位指令 . . . . . . . . . . . . . . . . . . . . . . . 135
14.1.48 SLTU——无符号比较小于置位指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
14.1.49 SRA——算数右移指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
vii
14.1.50 SRAI——立即数算数右移指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
14.1.51 SRAIW——低 32 位立即数算数右移指令 . . . . . . . . . . . . . . . . . . . . . . . . 137
14.1.52 SRAW——低 32 位算数右移指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
14.1.53 SRET——超级用户模式异常返回指令 . . . . . . . . . . . . . . . . . . . . . . . . . . 137
14.1.54 SRL——逻辑右移指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
14.1.55 SRLI——立即数逻辑右移指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
14.1.56 SRLIW——低 32 位立即数逻辑右移指令 . . . . . . . . . . . . . . . . . . . . . . . . . 139
14.1.57 SRLW——低 32 位逻辑右移指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
14.1.58 SUB——有符号减法指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
14.1.59 SUBW——低 32 位有符号减法指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
14.1.60 SW——字存储指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
14.1.61 WFI——进入低功耗模式指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
14.1.62 XOR——按位异或指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
14.1.63 XORI——立即数按位异或指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
14.2 附录 A-2 M 指令术语 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
14.2.1 DIV——有符号除法指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
14.2.2 DIVU——无符号除法指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
14.2.3 DIVUW——低 32 位无符号除法指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
14.2.4 DIVW——低 32 位有符号除法指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
14.2.5 MUL——有符号乘法指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
14.2.6 MULH——有符号乘法取高位指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
14.2.7 MULHSU——有符号无符号乘法取高位指令 . . . . . . . . . . . . . . . . . . . . . . . 145
14.2.8 MULHU——无符号乘法取高位指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
14.2.9 MULW——低 32 位有符号乘法指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
14.2.10 REM——有符号取余指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
14.2.11 REMU——无符号取余指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
14.2.12 REMUW——低 32 位无符号取余指令 . . . . . . . . . . . . . . . . . . . . . . . . . . 148
14.2.13 REMW——低 32 位有符号取余指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
14.3 附录 A-3 A 指令术语 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
14.3.1 AMOADD.D——原子加法指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
14.3.2 AMOADD.W——低 32 位原子加法指令 . . . . . . . . . . . . . . . . . . . . . . . . . 150
14.3.3 AMOAND.D——原子按位与指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
14.3.4 AMOAND.W——低 32 位原子按位与指令 . . . . . . . . . . . . . . . . . . . . . . . . 151
14.3.5 AMOMAX.D——原子有符号取最大值指令 . . . . . . . . . . . . . . . . . . . . . . . 152
14.3.6 AMOMAX.W——低 32 位原子有符号取最大值指令 . . . . . . . . . . . . . . . . . . 153
14.3.7 AMOMAXU.D——原子无符号取最大值指令 . . . . . . . . . . . . . . . . . . . . . . 154
14.3.8 AMOMAXU.W——低 32 位原子无符号取最大值指令 . . . . . . . . . . . . . . . . . 155
14.3.9 AMOMIN.D——原子有符号取最小值指令 . . . . . . . . . . . . . . . . . . . . . . . . 155
14.3.10 AMOMIN.W——低 32 位原子有符号取最小值指令 . . . . . . . . . . . . . . . . . . . 156
14.3.11 AMOMINU.D——原子无符号取最小值指令 . . . . . . . . . . . . . . . . . . . . . . . 157
14.3.12 AMOMINU.W——低 32 位原子无符号取最小值指令 . . . . . . . . . . . . . . . . . . 158
14.3.13 AMOOR.D——原子按位或指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
viii
14.3.14 AMOOR.W——低 32 位原子按位或指令 . . . . . . . . . . . . . . . . . . . . . . . . . 159
14.3.15 AMOSWAP.D——原子交换指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
14.3.16 AMOSWAP.W——低 32 位原子交换指令 . . . . . . . . . . . . . . . . . . . . . . . . 161
14.3.17 AMOXOR.D——原子按位异或指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
14.3.18 AMOXOR.W——低 32 位原子按位异或指令 . . . . . . . . . . . . . . . . . . . . . . 163
14.3.19 LR.D——双字加载保留指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
14.3.20 LR.W——字加载保留指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
14.3.21 SC.D——双字条件存储指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
14.3.22 SC.W——字条件存储指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
14.4 附录 A-4 F 指令术语 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
14.4.1 FADD.S——单精度浮点加法指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
14.4.2 FCLASS.S——单精度浮点分类指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
14.4.3 FCVT.L.S——单精度浮点转换成有符号长整型指令 . . . . . . . . . . . . . . . . . . . 169
14.4.4 FCVT.LU.S——单精度浮点转换成无符号长整型指令 . . . . . . . . . . . . . . . . . . 170
14.4.5 FCVT.S.L——有符号长整型转换成单精度浮点数指令 . . . . . . . . . . . . . . . . . 171
14.4.6 FCVT.S.LU——无符号长整型转换成单精度浮点数指令 . . . . . . . . . . . . . . . . 172
14.4.7 FCVT.S.W——有符号整型转换成单精度浮点数指令 . . . . . . . . . . . . . . . . . . 172
14.4.8 FCVT.S.WU——无符号整型转换成单精度浮点数指令 . . . . . . . . . . . . . . . . . 173
14.4.9 FCVT.W.S——单精度浮点转换成有符号整型指令 . . . . . . . . . . . . . . . . . . . . 174
14.4.10 FCVT.WU.S——单精度浮点转换成无符号整型指令 . . . . . . . . . . . . . . . . . . 175
14.4.11 FDIV.S——单精度浮点除法指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
14.4.12 FEQ.S——单精度浮点比较相等指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
14.4.13 FLE.S——单精度浮点比较小于等于指令 . . . . . . . . . . . . . . . . . . . . . . . . . 177
14.4.14 FLT.S——单精度浮点比较小于指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
14.4.15 FLW——单精度浮点加载指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
14.4.16 FMADD.S——单精度浮点乘累加指令 . . . . . . . . . . . . . . . . . . . . . . . . . . 179
14.4.17 FMAX.S——单精度浮点取最大值指令 . . . . . . . . . . . . . . . . . . . . . . . . . . 180
14.4.18 FMIN.S——单精度浮点取最小值指令 . . . . . . . . . . . . . . . . . . . . . . . . . . 180
14.4.19 FMSUB.S——单精度浮点乘累减指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
14.4.20 FMUL.S——单精度浮点乘法指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
14.4.21 FMV.W.X——单精度浮点写传送指令 . . . . . . . . . . . . . . . . . . . . . . . . . . 183
14.4.22 FMV.X.W——单精度浮点寄存器读传送指令 . . . . . . . . . . . . . . . . . . . . . . 183
14.4.23 FNMADD.S——单精度浮点乘累加取负指令 . . . . . . . . . . . . . . . . . . . . . . . 184
14.4.24 FNMSUB.S——单精度浮点乘累减取负指令 . . . . . . . . . . . . . . . . . . . . . . . 185
14.4.25 FSGNJ.S——单精度浮点符号注入指令 . . . . . . . . . . . . . . . . . . . . . . . . . . 185
14.4.26 FSGNJN.S——单精度浮点符号取反注入指令 . . . . . . . . . . . . . . . . . . . . . . 186
14.4.27 FSGNJX.S——单精度浮点符号异或注入指令 . . . . . . . . . . . . . . . . . . . . . . 187
14.4.28 FSQRT.S——单精度浮点开方指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
14.4.29 FSUB.S——单精度浮点减法指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
14.4.30 FSW——单精度浮点存储指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
14.5 附录 A-5 D 指令术语 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
14.5.1 FADD.D——双精度浮点加法指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
ix
14.5.2 FCLASS.D——双精度浮点分类指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
14.5.3 FCVT.D.L——有符号长整型转换成双精度浮点数指令 . . . . . . . . . . . . . . . . . 191
14.5.4 FCVT.D.LU——无符号长整型转换成双精度浮点数指令 . . . . . . . . . . . . . . . . 192
14.5.5 FCVT.D.S——单精度浮点转换成双精度浮点指令 . . . . . . . . . . . . . . . . . . . . 193
14.5.6 FCVT.D.W——有符号整型转换成双精度浮点数指令 . . . . . . . . . . . . . . . . . . 194
14.5.7 FCVT.D.WU——无符号整型转换成双精度浮点数指令 . . . . . . . . . . . . . . . . . 194
14.5.8 FCVT.L.D——双精度浮点转换成有符号长整型指令 . . . . . . . . . . . . . . . . . . 195
14.5.9 FCVT.LU.D——双精度浮点转换成无符号长整型指令 . . . . . . . . . . . . . . . . . . 195
14.5.10 FCVT.S.D——双精度浮点转换成单精度浮点指令 . . . . . . . . . . . . . . . . . . . . 196
14.5.11 FCVT.W.D——双精度浮点转换成有符号整型指令 . . . . . . . . . . . . . . . . . . . 197
14.5.12 FCVT.WU.D——双精度浮点转换成无符号整型指令 . . . . . . . . . . . . . . . . . . 198
14.5.13 FDIV.D——双精度浮点除法指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
14.5.14 FEQ.D——双精度浮点比较相等指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
14.5.15 FLD——双精度浮点加载指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
14.5.16 FLE.D——双精度浮点比较小于等于指令 . . . . . . . . . . . . . . . . . . . . . . . . . 201
14.5.17 FLT.D——双精度浮点比较小于指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
14.5.18 FMADD.D——双精度浮点乘累加指令 . . . . . . . . . . . . . . . . . . . . . . . . . . 202
14.5.19 FMAX.D——双精度浮点取最大值指令 . . . . . . . . . . . . . . . . . . . . . . . . . . 203
14.5.20 FMIN.D——双精度浮点取最小值指令 . . . . . . . . . . . . . . . . . . . . . . . . . . 203
14.5.21 FMSUB.D——双精度浮点乘累减指令 . . . . . . . . . . . . . . . . . . . . . . . . . . 204
14.5.22 FMUL.D——双精度浮点乘法指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
14.5.23 FMV.D.X——双精度浮点写传送指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
14.5.24 FMV.X.D——双精度浮点读传送指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
14.5.25 FNMADD.D——双精度浮点乘累加取负指令 . . . . . . . . . . . . . . . . . . . . . . 207
14.5.26 FNMSUB.D——双精度浮点乘累减取负指令 . . . . . . . . . . . . . . . . . . . . . . . 208
14.5.27 FSD——双精度浮点存储指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208
14.5.28 FSGNJ.D——双精度浮点符号注入指令 . . . . . . . . . . . . . . . . . . . . . . . . . 209
14.5.29 FSGNJN.D——双精度浮点符号取反注入指令 . . . . . . . . . . . . . . . . . . . . . . 209
14.5.30 FSGNJX.D——双精度浮点符号异或注入指令 . . . . . . . . . . . . . . . . . . . . . . 210
14.5.31 FSQRT.D——双精度浮点开方指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
14.5.32 FSUB.D——双精度浮点减法指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
14.6 附录 A-6 C 指令术语 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
14.6.1 C.ADD——有符号加法指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
14.6.2 C.ADDI——有符号立即数加法指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
14.6.3 C.ADDIW——低 32 位有符号立即数加法指令 . . . . . . . . . . . . . . . . . . . . . . 213
14.6.4 C.ADDI4SPN——4 倍立即数和堆栈指针相加指令 . . . . . . . . . . . . . . . . . . . . 214
14.6.5 C.ADDI16SP——加 16 倍立即数到堆栈指针指令 . . . . . . . . . . . . . . . . . . . . 215
14.6.6 C.ADDW——低 32 位有符号加法指令 . . . . . . . . . . . . . . . . . . . . . . . . . . 215
14.6.7 C.AND——按位与指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216
14.6.8 C.ANDI——立即数按位与指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
14.6.9 C.BEQZ——等于零分支指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
14.6.10 C.BNEZ——不等于零分支指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
x
14.6.11 C.EBREAK——断点指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
14.6.12 C.FLD——浮点双字加载指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
14.6.13 C.FLDSP——浮点双字堆栈加载指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
14.6.14 C.FSD——浮点双字存储指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222
14.6.15 C.FSDSP——浮点双字堆栈存储指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
14.6.16 C.J——无条件跳转指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
14.6.17 C.JALR——寄存器跳转子程序指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224
14.6.18 C.JR——寄存器跳转指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
14.6.19 C.LD——双字加载指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
14.6.20 C.LDSP——双字堆栈加载指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
14.6.21 C.LI——立即数传送指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
14.6.22 C.LUI——高位立即数传送指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
14.6.23 C.LW——字加载指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
14.6.24 C.LWSP——字堆栈加载指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229
14.6.25 C.MV——数据传送指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229
14.6.26 C.NOP——空指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230
14.6.27 C.OR——按位或指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230
14.6.28 C.SD——双字存储指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
14.6.29 C.SDSP——双字堆栈存储指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
14.6.30 C.SLLI——立即数逻辑左移指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
14.6.31 C.SRAI——立即数算数右移指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
14.6.32 C.SRLI——立即数逻辑右移指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234
14.6.33 C.SW——字存储指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
14.6.34 C.SWSP——字堆栈存储指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
14.6.35 C.SUB——有符号减法指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
14.6.36 C.SUBW——低 32 位有符号减法指令 . . . . . . . . . . . . . . . . . . . . . . . . . . 237
14.6.37 C.XOR——按位异或指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238
14.7 附录 A-8 伪指令列表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238
第十五章 附录 B 平头哥扩展指令术语 241
15.1 附录 B-1 Cache 指令术语 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
15.1.1 DCACHE.CALL——DCACHE 清全部脏表项指令 . . . . . . . . . . . . . . . . . . . 241
15.1.2 DCACHE.CIALL——DCACHE 清全部脏表项后无效指令 . . . . . . . . . . . . . . . 242
15.1.3 DCACHE.CIPA ——DCACHE 按物理地址清脏表项并无效 . . . . . . . . . . . . . . 242
15.1.4 DCACHE.CISW——DCACHE 按 way/set 清脏表项并无效指令 . . . . . . . . . . . . 243
15.1.5 DCACHE.CIVA——DCACHE 按虚拟地址清脏表项并无效 . . . . . . . . . . . . . . . 243
15.1.6 DCACHE.CPA——DCACHE 按物理地址清脏表项 . . . . . . . . . . . . . . . . . . . 244
15.1.7 DCACHE.CPAL1 ——L1DCACHE 按物理地址清脏表项 . . . . . . . . . . . . . . . . 244
15.1.8 DCACHE.CVA——DCACHE 按虚拟地址清脏表项 . . . . . . . . . . . . . . . . . . . 245
15.1.9 DCACHE.CVAL1——L1DCACHE 按虚拟地址清脏表项 . . . . . . . . . . . . . . . . 245
15.1.10 DCACHE.IPA ——DCACHE 按物理地址无效指令 . . . . . . . . . . . . . . . . . . . 246
15.1.11 DCACHE.ISW ——DCACHE 按 set/way 无效指令 . . . . . . . . . . . . . . . . . . 247
xi
15.1.12 DCACHE.IVA ——DCACHE 按虚拟地址无效指令 . . . . . . . . . . . . . . . . . . . 247
15.1.13 DCACHE.IALL——DCACHE 无效所有表项指令 . . . . . . . . . . . . . . . . . . . . 248
15.1.14 ICACHE.IALL——ICACHE 无效所有表项指令 . . . . . . . . . . . . . . . . . . . . . 248
15.1.15 ICACHE.IALLS——ICACHE 广播无效所有表项指令 . . . . . . . . . . . . . . . . . . 249
15.1.16 ICACHE.IPA——ICACHE 按物理地址无效表项指令 . . . . . . . . . . . . . . . . . . 249
15.1.17 ICACHE.IVA——ICACHE 按虚拟地址无效表项指令 . . . . . . . . . . . . . . . . . . 250
15.1.18 L2CACHE.CALL——L2CACHE 清所有脏表项指令 . . . . . . . . . . . . . . . . . . 250
15.1.19 L2CACHE.CIALL——L2CACHE 清所有脏表项并无效指令 . . . . . . . . . . . . . . 251
15.1.20 L2CACHE.IALL——L2CACHE 无效指令 . . . . . . . . . . . . . . . . . . . . . . . . 251
15.1.21 DCACHE.CSW ——DCACHE 按 set/way 清脏表项 . . . . . . . . . . . . . . . . . . 252
15.2 附录 B-2 多核同步指令术语 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252
15.2.1 SFENCE.VMAS——虚拟内存同步广播指令 . . . . . . . . . . . . . . . . . . . . . . . 253
15.2.2 SYNC——同步指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254
15.2.3 SYNC.I——同步清空指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254
15.2.4 SYNC.IS——同步清空广播指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254
15.2.5 SYNC.S——同步广播指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255
15.3 附录 B-3 算术运算指令术语 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255
15.3.1 ADDSL——寄存器移位相加指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255
15.3.2 MULA——乘累加指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256
15.3.3 MULAH——低 16 位乘累加指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256
15.3.4 MULAW——低 32 位乘累加指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
15.3.5 MULS——乘累减指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
15.3.6 MULSH——低 16 位乘累减指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258
15.3.7 MULSW——低 32 位乘累减指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258
15.3.8 MVEQZ——寄存器为 0 传送指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
15.3.9 MVNEZ——寄存器非 0 传送指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
15.3.10 SRRI——循环右移指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260
15.3.11 SRRIW——低 32 位循环右移指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260
15.4 附录 B-4 位操作指令术语 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260
15.4.1 EXT——寄存器连续位提取符号位扩展指令 . . . . . . . . . . . . . . . . . . . . . . . 261
15.4.2 EXTU——寄存器连续位提取零扩展指令 . . . . . . . . . . . . . . . . . . . . . . . . . 261
15.4.3 FF0——快速找 0 指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262
15.4.4 FF1——快速找 1 指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262
15.4.5 REV——字节倒序指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262
15.4.6 REVW——低 32 位字节倒序指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
15.4.7 TST——比特为 0 测试指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264
15.4.8 TSTNBZ——字节为 0 测试指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264
15.5 附录 B-5 存储指令术语 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265
15.5.1 FLRD——浮点寄存器移位双字加载指令 . . . . . . . . . . . . . . . . . . . . . . . . . 265
15.5.2 FLRW——浮点寄存器移位字加载指令 . . . . . . . . . . . . . . . . . . . . . . . . . . 265
15.5.3 FLURD——浮点寄存器低 32 位移位双字加载指令 . . . . . . . . . . . . . . . . . . . 266
15.5.4 FLURW——浮点寄存器低 32 位移位字加载指令 . . . . . . . . . . . . . . . . . . . . 267
xii
15.5.5 FSRD——浮点寄存器移位双字存储指令 . . . . . . . . . . . . . . . . . . . . . . . . . 267
15.5.6 FSRW——浮点寄存器移位字存储指令 . . . . . . . . . . . . . . . . . . . . . . . . . . 268
15.5.7 FSURD——浮点寄存器低 32 位移位双字存储指令 . . . . . . . . . . . . . . . . . . . 268
15.5.8 FSURW——浮点寄存器低 32 位移位字存储指令 . . . . . . . . . . . . . . . . . . . . 269
15.5.9 LBIA——符号位扩展字节加载基地址自增指令 . . . . . . . . . . . . . . . . . . . . . 269
15.5.10 LBIB——基地址自增符号位扩展字节加载指令 . . . . . . . . . . . . . . . . . . . . . 270
15.5.11 LBUIA——零扩展字节加载基地址自增指令 . . . . . . . . . . . . . . . . . . . . . . . 270
15.5.12 LBUIB——基地址自增零扩展字节加载指令 . . . . . . . . . . . . . . . . . . . . . . . 271
15.5.13 LDD——双寄存器加载指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271
15.5.14 LDIA——符号位扩展双字加载基地址自增指令 . . . . . . . . . . . . . . . . . . . . . 272
15.5.15 LDIB——基地址自增符号位扩展双字加载指令 . . . . . . . . . . . . . . . . . . . . . 272
15.5.16 LHIA——符号位扩展半字加载基地址自增指令 . . . . . . . . . . . . . . . . . . . . . 273
15.5.17 LHIB——基地址自增符号位扩展半字加载指令 . . . . . . . . . . . . . . . . . . . . . 273
15.5.18 LHUIA——零扩展半字加载基地址自增指令 . . . . . . . . . . . . . . . . . . . . . . . 274
15.5.19 LHUIB——基地址自增零扩展半字加载指令 . . . . . . . . . . . . . . . . . . . . . . . 274
15.5.20 LRB——寄存器移位符号位扩展字节加载指令 . . . . . . . . . . . . . . . . . . . . . . 275
15.5.21 LRBU——寄存器移位零扩展扩展字节加载指令 . . . . . . . . . . . . . . . . . . . . . 275
15.5.22 LRD——寄存器移位双字加载指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
15.5.23 LRH——寄存器移位符号位扩展半字加载指令 . . . . . . . . . . . . . . . . . . . . . . 276
15.5.24 LRHU——寄存器移位零扩展扩展半字加载指令 . . . . . . . . . . . . . . . . . . . . . 277
15.5.25 LRW——寄存器移位符号位扩展字加载指令 . . . . . . . . . . . . . . . . . . . . . . . 277
15.5.26 LRWU——寄存器移位零扩展扩展字加载指令 . . . . . . . . . . . . . . . . . . . . . . 277
15.5.27 LURB——寄存器低 32 位移位符号位扩展字节加载指令 . . . . . . . . . . . . . . . . 278
15.5.28 LURBU——寄存器低 32 位移位零扩展字节加载指令 . . . . . . . . . . . . . . . . . . 278
15.5.29 LURD——寄存器低 32 位移位双字加载指令 . . . . . . . . . . . . . . . . . . . . . . . 279
15.5.30 LURH——寄存器低 32 位移位符号位扩展半字加载指令 . . . . . . . . . . . . . . . . 279
15.5.31 LURHU——寄存器低 32 位移位零扩展半字加载指令 . . . . . . . . . . . . . . . . . . 280
15.5.32 LURW——寄存器低 32 位移位符号位扩展字加载指令 . . . . . . . . . . . . . . . . . 280
15.5.33 LURWU——寄存器低 32 位移位零扩展字加载指令 . . . . . . . . . . . . . . . . . . . 281
15.5.34 LWD——符号位扩展双寄存器字加载指令 . . . . . . . . . . . . . . . . . . . . . . . . 281
15.5.35 LWIA——符号位扩展字加载基地址自增指令 . . . . . . . . . . . . . . . . . . . . . . 282
15.5.36 LWIB——基地址自增符号位扩展字加载指令 . . . . . . . . . . . . . . . . . . . . . . 282
15.5.37 LWUD——零扩展双寄存器字加载指令 . . . . . . . . . . . . . . . . . . . . . . . . . . 283
15.5.38 LWUIA——零扩展字加载基地址自增指令 . . . . . . . . . . . . . . . . . . . . . . . . 284
15.5.39 LWUIB——基地址自增零扩展字加载指令 . . . . . . . . . . . . . . . . . . . . . . . . 284
15.5.40 SBIA——字节存储基地址自增指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285
15.5.41 SBIB——基地址自增字节存储指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285
15.5.42 SDD——双寄存器存储指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286
15.5.43 SDIA——双字存储基地址自增指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286
15.5.44 SDIB——基地址自增双字存储指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287
15.5.45 SHIA——半字存储基地址自增指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287
15.5.46 SHIB——基地址自增半字存储指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287
xiii
15.5.47 SRB——寄存器移位字节存储指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288
15.5.48 SRD——寄存器移位双字存储指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288
15.5.49 SRH——寄存器移位半字存储指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
15.5.50 SRW——寄存器移位字存储指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
15.5.51 SURB——寄存器低 32 位移位字节存储指令 . . . . . . . . . . . . . . . . . . . . . . . 290
15.5.52 SURD——寄存器低 32 位移位双字存储指令 . . . . . . . . . . . . . . . . . . . . . . . 290
15.5.53 SURH——寄存器低 32 位移位半字存储指令 . . . . . . . . . . . . . . . . . . . . . . . 291
15.5.54 SURW——寄存器低 32 位移位字存储指令 . . . . . . . . . . . . . . . . . . . . . . . . 291
15.5.55 SWIA——字存储基地址自增指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292
15.5.56 SWIB——基地址自增字存储指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292
15.5.57 SWD——双寄存器低 32 位存储指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . 293
15.6 附录 B-6 浮点半精度指令术语 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293
15.6.1 FADD.H——半精度浮点加法指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293
15.6.2 FCLASS.H——半精度浮点分类指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . 294
15.6.3 FCVT.D.H——半精度浮点转换成双精度浮点指令 . . . . . . . . . . . . . . . . . . . . 295
15.6.4 FCVT.H.D——双精度浮点转换成半精度浮点指令 . . . . . . . . . . . . . . . . . . . . 296
15.6.5 FCVT.H.L——有符号长整型转换成半精度浮点数指令 . . . . . . . . . . . . . . . . . 297
15.6.6 FCVT.H.LU——无符号长整型转换成半精度浮点数指令 . . . . . . . . . . . . . . . . 297
15.6.7 FCVT.H.S——单精度浮点转换成半精度浮点指令 . . . . . . . . . . . . . . . . . . . . 298
15.6.8 FCVT.H.W——有符号整型转换成半精度浮点数指令 . . . . . . . . . . . . . . . . . . 299
15.6.9 FCVT.H.WU——无符号整型转换成半精度浮点数指令 . . . . . . . . . . . . . . . . . 300
15.6.10 FCVT.L.H——半精度浮点转换成有符号长整型指令 . . . . . . . . . . . . . . . . . . 301
15.6.11 FCVT.LU.H——半精度浮点转换成无符号长整型指令 . . . . . . . . . . . . . . . . . 302
15.6.12 FCVT.S.H——半精度浮点转换成单精度浮点指令 . . . . . . . . . . . . . . . . . . . . 303
15.6.13 FCVT.W.H——半精度浮点转换成有符号整型指令 . . . . . . . . . . . . . . . . . . . 303
15.6.14 FCVT.WU.H——半精度浮点转换成无符号整型指令 . . . . . . . . . . . . . . . . . . 304
15.6.15 FDIV.H——半精度浮点除法指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305
15.6.16 FEQ.H——半精度浮点比较相等指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . 306
15.6.17 FLE.H——半精度浮点比较小于等于指令 . . . . . . . . . . . . . . . . . . . . . . . . . 306
15.6.18 FLH——半精度浮点加载指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307
15.6.19 FLT.H——半精度浮点比较小于指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . 307
15.6.20 FMADD.H——半精度浮点乘累加指令 . . . . . . . . . . . . . . . . . . . . . . . . . . 308
15.6.21 FMAX.H——半精度浮点取最大值指令 . . . . . . . . . . . . . . . . . . . . . . . . . . 309
15.6.22 FMIN.H——半精度浮点取最小值指令 . . . . . . . . . . . . . . . . . . . . . . . . . . 309
15.6.23 FMSUB.H——半精度浮点乘累减指令 . . . . . . . . . . . . . . . . . . . . . . . . . . 310
15.6.24 FMUL.H——半精度浮点乘法指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311
15.6.25 FMV.H.X——半精度浮点写传送指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . 312
15.6.26 FMV.X.H——半精度浮点寄存器读传送指令 . . . . . . . . . . . . . . . . . . . . . . . 312
15.6.27 FNMADD.H——半精度浮点乘累加取负指令 . . . . . . . . . . . . . . . . . . . . . . 313
15.6.28 FNMSUB.H——半精度浮点乘累减取负指令 . . . . . . . . . . . . . . . . . . . . . . . 314
15.6.29 FSGNJ.H——半精度浮点符号注入指令 . . . . . . . . . . . . . . . . . . . . . . . . . 315
15.6.30 FSGNJN.H——半精度浮点符号取反注入指令 . . . . . . . . . . . . . . . . . . . . . . 315
xiv
15.6.31 FSGNJX.H——半精度浮点符号异或注入指令 . . . . . . . . . . . . . . . . . . . . . . 316
15.6.32 FSH——半精度浮点存储指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316
15.6.33 FSQRT.H——半精度浮点开方指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317
15.6.34 FSUB.H——半精度浮点减法指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318
第十六章 附录 C 控制寄存器 319
16.1 附录 C-1 机器模式控制寄存器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319
16.1.1 机器模式信息寄存器组 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319
16.1.1.1 机器模式供应商编号寄存器(MVENDORID) . . . . . . . . . . . . . . . . . 319
16.1.1.2 机器模式架构编号寄存器(MARCHID) . . . . . . . . . . . . . . . . . . . . 319
16.1.1.3 机器模式硬件实现编号寄存器(MIMPID) . . . . . . . . . . . . . . . . . . . 319
16.1.1.4 机器模式逻辑内核编号寄存器(MHARTID) . . . . . . . . . . . . . . . . . . 320
16.1.2 机器模式异常配置寄存器组 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320
16.1.2.1 机器模式处理器状态寄存器(MSTATUS) . . . . . . . . . . . . . . . . . . . 320
16.1.2.2 机器模式处理器指令集特性寄存器(MISA) . . . . . . . . . . . . . . . . . . 322
16.1.2.3 机器模式异常降级控制寄存器(MEDELEG) . . . . . . . . . . . . . . . . . 323
16.1.2.4 机器模式中断降级控制寄存器(MIDELEG) . . . . . . . . . . . . . . . . . . 323
16.1.2.5 机器模式中断使能控制寄存器(MIE) . . . . . . . . . . . . . . . . . . . . . 323
16.1.2.6 机器模式向量基址寄存器(MTVEC) . . . . . . . . . . . . . . . . . . . . . . 325
16.1.2.7 机器模式计数器访问授权寄存器(MCOUNTEREN) . . . . . . . . . . . . . 325
16.1.3 机器模式异常处理寄存器组 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325
16.1.3.1 机器模式异常临时数据备份寄存器(MSCRATCH) . . . . . . . . . . . . . . 325
16.1.3.2 机器模式异常保留程序计数器寄存器(MEPC) . . . . . . . . . . . . . . . . 326
16.1.3.3 机器模式异常事件向量寄存器(MCAUSE) . . . . . . . . . . . . . . . . . . 326
16.1.3.4 机器模式中断等待状态寄存器(MIP) . . . . . . . . . . . . . . . . . . . . . 326
16.1.4 机器模式内存保护寄存器组 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328
16.1.4.1 机器模式物理内存保护配置寄存器(PMPCFG) . . . . . . . . . . . . . . . . 328
16.1.4.2 机器模式物理内存地址寄存器(PMPADDR) . . . . . . . . . . . . . . . . . 328
16.1.5 机器模式计数器寄存器组 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328
16.1.5.1 机器模式周期计数器(MCYCLE) . . . . . . . . . . . . . . . . . . . . . . . 328
16.1.5.2 机器模式退休指令计数器(MINSTRET) . . . . . . . . . . . . . . . . . . . . 328
16.1.5.3 机器模式事件计数器(MHPMCOUNTERn) . . . . . . . . . . . . . . . . . . 329
16.1.6 机器模式计数器配置寄存器组 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329
16.1.6.1 机器模式事件选择器(MHPMEVENTn) . . . . . . . . . . . . . . . . . . . . 329
16.1.7 机器模式处理器控制和状态扩展寄存器组 . . . . . . . . . . . . . . . . . . . . . . . . . 329
16.1.7.1 机器模式扩展状态寄存器(MXSTATUS) . . . . . . . . . . . . . . . . . . . 329
16.1.7.2 机器模式硬件配置寄存器(MHCR) . . . . . . . . . . . . . . . . . . . . . . . 331
16.1.7.3 机器模式硬件操作寄存器(MCOR) . . . . . . . . . . . . . . . . . . . . . . 333
16.1.7.4 机器模式 L2Cache 控制寄存器(MCCR2) . . . . . . . . . . . . . . . . . . . 334
16.1.7.5 机器模式隐式操作寄存器(MHINT) . . . . . . . . . . . . . . . . . . . . . . 335
16.1.7.6 机器模式复位向量基址寄存器(MRVBR) . . . . . . . . . . . . . . . . . . . 338
16.1.7.7 超级户态计数器写使能寄存器(MCOUNTERWEN) . . . . . . . . . . . . . 338
xv
16.1.7.8 机器模式事件中断使能寄存器(MCOUNTERINTEN) . . . . . . . . . . . . 339
16.1.7.9 机器模式事件上溢出标注寄存器(MCOUNTEROF) . . . . . . . . . . . . . 339
16.1.8 机器模式 Cache 访问扩展寄存器组 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340
16.1.8.1 机器模式 Cache 指令寄存器(MCINS) . . . . . . . . . . . . . . . . . . . . . 340
16.1.8.2 机器模式 Cache 访问索引寄存器(MCINDEX) . . . . . . . . . . . . . . . . 340
16.1.8.3 机器模式 Cache 数据寄存器(MCDATA0/1) . . . . . . . . . . . . . . . . . 341
16.1.9 机器模式处理器型号寄存器组 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342
16.1.9.1 机器模式处理器型号寄存器(MCPUID) . . . . . . . . . . . . . . . . . . . . 342
16.1.9.2 片上总线基地址寄存器(MAPBADDR) . . . . . . . . . . . . . . . . . . . . 342
16.1.10 多核扩展寄存器组 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342
16.1.10.1 Snoop 监听使能寄存器(MSMPR) . . . . . . . . . . . . . . . . . . . . . . . 342
16.2 附录 C-2 超级用户模式控制寄存器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343
16.2.1 超级用户模式异常配置寄存器组 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343
16.2.1.1 超级用户模式处理器状态寄存器(SSTATUS) . . . . . . . . . . . . . . . . . 343
16.2.1.2 超级用户模式中断使能控制寄存器(SIE) . . . . . . . . . . . . . . . . . . . 343
16.2.1.3 超级用户模式向量基址寄存器(STVEC) . . . . . . . . . . . . . . . . . . . . 344
16.2.1.4 超级用户模式计数器访问授权寄存器(SCOUNTEREN) . . . . . . . . . . . 344
16.2.2 超级用户模式异常处理寄存器组 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344
16.2.2.1 超级用户模式异常临时数据备份寄存器(SSCRATCH) . . . . . . . . . . . . 344
16.2.2.2 超级用户模式异常保留程序计数器寄存器(SEPC) . . . . . . . . . . . . . . 345
16.2.2.3 超级用户模式异常事件向量寄存器(SCAUSE) . . . . . . . . . . . . . . . . 345
16.2.2.4 超级用户模式中断等待状态寄存器(SIP) . . . . . . . . . . . . . . . . . . . 345
16.2.3 超级用户模式地址转换寄存器组 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345
16.2.3.1 超级用户模式地址转换寄存器(SATP) . . . . . . . . . . . . . . . . . . . . . 345
16.2.4 超级用户模式处理器控制和状态扩展寄存器组 . . . . . . . . . . . . . . . . . . . . . . 346
16.2.4.1 超级用户模式扩展状态寄存器(SXSTATUS) . . . . . . . . . . . . . . . . . 346
16.2.4.2 超级用户模式硬件控制寄存器(SHCR) . . . . . . . . . . . . . . . . . . . . 346
16.2.4.3 超级用户模式事件溢出中断使能寄存器(SCOUNTERINTEN) . . . . . . . 346
16.2.4.4 超级用户模式事件上溢出标注寄存器(SCOUNTEROF) . . . . . . . . . . . 346
16.2.4.5 超级用户模式周期计数器(SCYCLE) . . . . . . . . . . . . . . . . . . . . . 346
16.2.4.6 超级用户模式退休指令计数器(SINSTRET) . . . . . . . . . . . . . . . . . 347
16.2.4.7 超级用户模式事件计数器(SHPMCOUNTERn) . . . . . . . . . . . . . . . 347
16.2.5 超级用户模式 MMU 扩展寄存器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347
16.2.5.1 超级用户模式 MMU 控制寄存器(SMCIR) . . . . . . . . . . . . . . . . . . 347
16.2.5.2 超级用户模式 MMU 控制寄存器(SMIR) . . . . . . . . . . . . . . . . . . . 347
16.2.5.3 超级用户模式 MMU 控制寄存器(SMEH) . . . . . . . . . . . . . . . . . . . 347
16.2.5.4 超级用户模式 MMU 控制寄存器(SMEL) . . . . . . . . . . . . . . . . . . . 347
16.3 附录 C-3 用户模式控制寄存器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348
16.3.1 用户模式浮点控制寄存器组 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348
16.3.1.1 浮点异常累积状态寄存器(FFLAGS) . . . . . . . . . . . . . . . . . . . . . 348
16.3.1.2 浮点动态舍入模式寄存器(FRM) . . . . . . . . . . . . . . . . . . . . . . . . 348
16.3.1.3 浮点控制状态寄存器(FCSR) . . . . . . . . . . . . . . . . . . . . . . . . . . 348
xvi
16.3.2 用户模式计数/计时寄存器组 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349
16.3.2.1 用户模式周期计数器(CYCLE) . . . . . . . . . . . . . . . . . . . . . . . . . 349
16.3.2.2 用户模式时间计数器(TIME) . . . . . . . . . . . . . . . . . . . . . . . . . . 349
16.3.2.3 用户模式退休指令计数器(INSTRET) . . . . . . . . . . . . . . . . . . . . . 350
16.3.2.4 用户模式事件计数器(HPMCOUNTERn) . . . . . . . . . . . . . . . . . . . 350
16.3.3 用户模式扩展浮点控制寄存器组 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350
16.3.3.1 用户模式浮点扩展控制寄存器(FXCR) . . . . . . . . . . . . . . . . . . . . 350

实例下载地址

玄铁 C910 用户手册(openc910)

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警