飞腾CPU体系结构(八)

飞腾CPU体系结构(八)——标量访存指令

在阅读之前,请先查看《飞腾CPU体系结构(五)》的SIMD和浮点寄存器。飞腾CPU还提供了32个128 位SIMD和浮点寄存器,这32个128位寄存器可以作为标量寄存器使用,也可以作为向量寄存器来使用。

1. 标量访存指令

一共有0~31个标量寄存器,q/d/s/h/b分别表示128/64/32/16/8位的长度。标量访存指令的内存单元地址有按照长度对齐的要求。

标量访存指令可以有

  1. 常规单寄存器类型ldr/str
长度128643216
ldr q12, [x12, #-16]ldr d12, [x12, #-8]ldr s12, [x12, #-4]ldr h12, [x12, #-2]
str q17, [x0]str d17, [x0]str s17, [x0]str h17, [x0]
  1. 偏移量为负的单寄存器类型ldur/stur,和ldr/str类似,只不过立即数偏移量为负。
  2. 常规双寄存器类型ldp/stp
  3. 面向流数据的双寄存器类型ldnp/stnp

2. SIMD和浮点寄存器上下文的保存和恢复

  1. 汇编宏fpsimd_save

.macro fpsimd_save state, tmpnr
/*首先保存32个128位的SIMD和浮点寄存器*/
stp q0, q1, [\state, #16 * 0]
stp q2, q3, [\state, #16 * 2]
stp q4, q5, [\state, #16 * 4]
stp q6, q7, [\state, #16 * 6]
stp q8, q9, [\state, #16 * 8]
stp q10, q11, [\state, #16 * 10]
stp q12, q13, [\state, #16 * 12]
stp q14, q15, [\state, #16 * 14]
stp q16, q17, [\state, #16 * 16]
stp q18, q19, [\state, #16 * 18]
stp q20, q21, [\state, #16 * 20]
stp q22, q23, [\state, #16 * 22]
stp q24, q25, [\state, #16 * 24]
stp q26, q27, [\state, #16 * 26]
stp q28, q29, [\state, #16 * 28]
stp q30, q31, [\state, #16 * 30]! /注意这条语句之后|state就更新了/
/*然后保存fpsr和fpcr寄存器,这是两个SIMD和浮点状态寄存器*/
mrs x\tmpnr, fpsr
str w\tmpnr, [\state, #16 * 2]
mrs x\tmpnr, fpcr
str w\tmpnr, [\state, #16 * 2 + 4]
.endm

  1. 汇编宏 fpsimd_restore

/*恢复fpcr寄存器的具体过程,如果内存保存值和寄存器fpcr值相同,就不修改寄存器fpcr的值*/
.macro fpsimd_restore_fpcr state, tmp
mrs \tmp, fpcr
cmp \tmp, \state
b.eq 9999f
msr fpcr, \state
9999:
.endm

.macro fpsimd_restore state, tmpnr
/*首先恢复32个128位的SIMD和浮点寄存器*/
ldp q0, q1, [\state, #16 * 0]
...此处省略
ldp q30, q31, [\state, #16 * 30]!/
/*再恢复fpsr寄存器*/
ldr w\tmpnr, [\state, #16 * 2]
msr fpsr, x\tmpnr
/*最后恢复fpcr寄存器*/
ldr w\tmpnr, [\state, #16 * 2 + 4]
fpsimd_restore_fpcr x\tmpnr, \state
.endm

  1. 浮点状态寄存器fpsr
  1. 这是一个32位寄存器,EL0/1/2/3都是可读写的。
  2. 在AARCH64模式下,浮点类型比较结果会对处理器状态的NZCV位进行相应的设置,而不是在浮点状态寄存器fpsr中的NZCV位进行设置。
  3. 另外,该寄存器还包括:累积饱和位QC、
    异常累积标志,这些标志常规情况下为零。

输入异常累积位IDC
不精确异常累积位IXC
溢出异常累积位UFC
溢出异常累积位OFC
除零异常累积位DZC
无效操作异常累积位IOC

  1. 浮点控制寄存器fpcr
  1. 这是一个32位寄存器,EL0/1/2/3都是可读写的。
  2. 浮点控制寄存器fpcr尽量不要进行修改,修改可能触发“自同步”。
  3. 数据格式和控制模式位

半精度格式控制位AHP
默认NaN模式控制位DN
Flush到零模式控制位FZ
Rounding模式控制位RMode

  1. 控制异常累积发生时是否触发异常:IDE / IXE / UFE / OFE / DZE / IOE
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值