寄存器与存储空间¶
X 寄存器¶
公开汇编语法使用 X0–X31。X 寄存器既承载普通 64 位标量,也承载地址、stride、repeat、shape 和其他打包控制值。
| 寄存器 | 常见用途 |
|---|---|
X0–X28 |
参数、地址和中间值 |
X29 |
生成代码中的帧指针 |
X30 |
生成代码中的栈指针 |
X31 |
链接寄存器,供 RET 使用 |
不要在内联汇编中硬编码参数寄存器;使用 %0、%1 等占位符让寄存器分配器选择。
MASK 与比较状态¶
MASK[0]、MASK[1]:向量执行掩码的两个 64 位半部。MASK:Vector 指令中的组合掩码操作数。CMPMASK0/1:向量比较结果相关的特殊寄存器。- Scalar
CMP更新标量条件状态;VectorVCMP更新向量比较状态,二者不能混用。
已确认的掩码移动:
VA 寄存器¶
VA/VA<n> 表示 Vector Address 描述,用于 gather、scatter、transpose 和部分重排指令。VA 不是普通 X 寄存器,也不是 C 指针;专用指令可能要求多个 VA 槽及专用索引格式。
SPR¶
特殊寄存器以名称访问,但每个名称允许的方向和目标 CPU 并不相同:
不能使用通用的 SPR[n] 语法。编码号只标识寄存器,不代表寄存器的运行时内容。完整列表见 SPR 编码。
配置状态还分为命名 SPR、普通 X 寄存器承载的打包配置字,以及 MASK 等专用状态。读写权限、目标限制、builtin 和内联汇编示例见 配置寄存器与隐式状态。
存储层次¶
| C address space | 汇编名称 | 主要用途 |
|---|---|---|
| 1 | GM / OUT | 全局输入输出内存 |
| 2 | CBUF / L1 | Cube 输入缓存和片上中间层 |
| 3 | L0A | Cube A 操作数 |
| 4 | L0B | Cube B 操作数 |
| 5 | L0C | Cube 累加和结果 |
| 6 | UB | Vector 主要数据存储 |
Ascend C 中可以用 address-space 类型表达指针:
typedef void __attribute__((address_space(1))) *gmptr;
typedef short __attribute__((address_space(6))) *ubptr;
方括号只表示该寄存器提供地址:
它不是 x86 风格的基址+比例索引表达式。地址单位、对齐、边界和 stride 仍由具体指令及其配置参数决定。各执行域的硬检查、拆包粒度和 Bank 映射见地址与数据对齐。
常见数据路径¶
OUT 是工具链对全局端数据流的命名,不意味着存在一种独立于 GM 指针的普通 C 类型。