飞腾CPU体系结构(五)—— 通用寄存器

1. 64位通用寄存器

在AArch64执行状态下,飞腾CPU提供31个64位通用寄存器Xn(n=0/1/…/30),其中X30用作跳转链接寄存器。

  1. 某些指令仅使用通用寄存器的低32位,寄存器Wn用于寄存器Xn低32位的独立访问。
  2. 需要说明的是,32/16/8位数据都是用寄存器Wn来描述,具体数据长度由指令来具体。

飞腾cpu的虚拟化怎么设置 飞腾cpu采用哪种指令集_飞腾cpu的虚拟化怎么设置


64位的通用寄存器虽然可以随意被使用;但是针对函数调用,GCC编译器对上述通用寄存器的使用要符合软件约定。

寄存器

说明

X0…X7

函数调用参数,其中X0用于函数返回值。

X8

保留

X9…X15

临时寄存器,使用时不保存栈帧中

X16…X18

保留

X19…X28

临时寄存器,使用时保存到栈帧中

X29

栈帧寄存器FP,使用时需要保存

X30

链接寄存器LR,保存函数返回地址

X31

零寄存器XZR,该寄存器并不真正存在

备注:

  1. 如果是32/16/8位的变量,就使用Wn寄存器形式;
  2. 32位的零寄存器W31是WZR

2. SIMD和浮点寄存器

飞腾CPU还提供了32个128 位SIMD和浮点寄存器,这32个128位寄存器可以作为标量寄存器使用,也可以作为向量寄存器来使用。

2.1 标量

每个128位SIMD和浮点寄存器作为128位标量寄存器时记做Qn(其中n=0…31),也可以作为8/16/32/64位标量寄存器使用:

  1. 8位标量寄存器Bn是低八位;
  2. 16位标量寄存器Hn是低16位;
  3. 32位标量寄存器Sn是低32位;
  4. 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]。

飞腾cpu的虚拟化怎么设置 飞腾cpu采用哪种指令集_标量_02

  1. 当向量长度为64位时:
  1. Vn和Vn.1D是一个64位寄存器,
  2. Vn.2S是两个32位寄存器,
  3. Vn.4H是四个16位寄存器,
  4. Vn.8B是八个8位寄存器。
  1. 当向量长度为128位时:
  1. Vn是一个128位寄存器,
  2. Vn.2D是两个64位寄存器,
  3. Vn.4S是四个32位寄存器,
  4. Vn.8H是八个16位寄存器,
  5. Vn.16B是十六个8位寄存器。