飞腾CPU体系结构(五)—— 通用寄存器
1. 64位通用寄存器
在AArch64执行状态下,飞腾CPU提供31个64位通用寄存器Xn(n=0/1/…/30),其中X30用作跳转链接寄存器。
- 某些指令仅使用通用寄存器的低32位,寄存器Wn用于寄存器Xn低32位的独立访问。
- 需要说明的是,32/16/8位数据都是用寄存器Wn来描述,具体数据长度由指令来具体。
64位的通用寄存器虽然可以随意被使用;但是针对函数调用,GCC编译器对上述通用寄存器的使用要符合软件约定。
寄存器 | 说明 |
X0…X7 | 函数调用参数,其中X0用于函数返回值。 |
X8 | 保留 |
X9…X15 | 临时寄存器,使用时不保存栈帧中 |
X16…X18 | 保留 |
X19…X28 | 临时寄存器,使用时保存到栈帧中 |
X29 | 栈帧寄存器FP,使用时需要保存 |
X30 | 链接寄存器LR,保存函数返回地址 |
X31 | 零寄存器XZR,该寄存器并不真正存在 |
备注:
- 如果是32/16/8位的变量,就使用Wn寄存器形式;
- 32位的零寄存器W31是WZR
2. SIMD和浮点寄存器
飞腾CPU还提供了32个128 位SIMD和浮点寄存器,这32个128位寄存器可以作为标量寄存器使用,也可以作为向量寄存器来使用。
2.1 标量
每个128位SIMD和浮点寄存器作为128位标量寄存器时记做Qn(其中n=0…31),也可以作为8/16/32/64位标量寄存器使用:
- 8位标量寄存器Bn是低八位;
- 16位标量寄存器Hn是低16位;
- 32位标量寄存器Sn是低32位;
- 64位标量寄存器Dn是低64位。
2.2 向量
除了可以做标量寄存器,每个128位SIMD和浮点寄存器还可以作为向量寄存器Vn(n=0/1/…/31)来使用。虽然每个寄存器是128位的,但是向量长度可以是64位也可以是128位,具体的向量长度取决于具体的指令。
无论向量长度是64位,还是128位,其中每个寄存器都可用下标方式来命名,例如Vn.B[i],Vn.H[i],Vn.S[i]和Vn.D[i]。
- 当向量长度为64位时:
- Vn和Vn.1D是一个64位寄存器,
- Vn.2S是两个32位寄存器,
- Vn.4H是四个16位寄存器,
- Vn.8B是八个8位寄存器。
- 当向量长度为128位时:
- Vn是一个128位寄存器,
- Vn.2D是两个64位寄存器,
- Vn.4S是四个32位寄存器,
- Vn.8H是八个16位寄存器,
- Vn.16B是十六个8位寄存器。