飞腾CPU体系结构(八)
飞腾CPU体系结构(八)——标量访存指令
在阅读之前,请先查看《飞腾CPU体系结构(五)》的SIMD和浮点寄存器。飞腾CPU还提供了32个128 位SIMD和浮点寄存器,这32个128位寄存器可以作为标量寄存器使用,也可以作为向量寄存器来使用。
1. 标量访存指令
一共有0~31个标量寄存器,q/d/s/h/b分别表示128/64/32/16/8位的长度。标量访存指令的内存单元地址有按照长度对齐的要求。
标量访存指令可以有
- 常规单寄存器类型
ldr/str
长度 | 128 | 64 | 32 | 16 |
---|---|---|---|---|
读 |
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]
|
- 偏移量为负的单寄存器类型
ldur/stur
,和ldr/str
类似,只不过立即数偏移量为负。 - 常规双寄存器类型
ldp/stp
- 面向流数据的双寄存器类型
ldnp/stnp
2. SIMD和浮点寄存器上下文的保存和恢复
- 汇编宏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
- 汇编宏 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
- 浮点状态寄存器fpsr
- 这是一个32位寄存器,EL0/1/2/3都是可读写的。
- 在AARCH64模式下,浮点类型比较结果会对处理器状态的NZCV位进行相应的设置,而不是在浮点状态寄存器fpsr中的NZCV位进行设置。
- 另外,该寄存器还包括:累积饱和位QC、
异常累积标志,这些标志常规情况下为零。输入异常累积位IDC
不精确异常累积位IXC
溢出异常累积位UFC
溢出异常累积位OFC
除零异常累积位DZC
无效操作异常累积位IOC
- 浮点控制寄存器fpcr
- 这是一个32位寄存器,EL0/1/2/3都是可读写的。
- 浮点控制寄存器fpcr尽量不要进行修改,修改可能触发“自同步”。
- 数据格式和控制模式位
半精度格式控制位AHP
默认NaN模式控制位DN
Flush到零模式控制位FZ
Rounding模式控制位RMode
- 控制异常累积发生时是否触发异常:IDE / IXE / UFE / OFE / DZE / IOE
飞腾CPU体系结构(八)相关推荐
- 飞腾CPU体系结构简单介绍(一)
第一章 飞腾CPU体系结构简介 ARM体系结构是一种精简指令集体系结构RISC,具有以下基本特点:通用寄存器数量较多:采用统一寻址模式,系统主存和外设分布在CPU物理地址空间的不同范围:采用load/ ...
- 飞腾CPU体系结构(五)
飞腾CPU体系结构(五)-- 通用寄存器 1. 64位通用寄存器 在AArch64执行状态下,飞腾CPU提供31个64位通用寄存器Xn(n=0/1/-/30),其中X30用作跳转链接寄存器. 某些指令 ...
- 飞腾CPU体系结构(九)
飞腾CPU体系结构(九) 向量访存指令主要包括LD1/ST1. LD2/ST2.LD3/ST3和LD4/ST4四种. LD1/ST1一般针对一个向量寄存器,也有两个.三个或四个向量寄存器的模式. LD ...
- 飞腾CPU体系结构之虚拟地址
飞腾CPU体系结构之虚拟地址 1. 基本概念 虚拟地址:程序运行时指令和数据对应的地址. 虚拟地址空间:一个进程运行时指令和数据能访问到的虚拟地址范围. 注意事项: 每个进程拥有自己的虚拟地址空间,进 ...
- 飞腾CPU体系结构(十)
飞腾CPU体系结构(十) 1.高速缓存模型 为了优化整体性能,飞腾CPU芯片内部提供L1高速缓存和L2高速缓存,有些飞腾CPU也提供芯片内部的L3高速缓存,本节不对这个情况进行赘述. 靠近流水线的高速 ...
- 飞腾CPU体系结构之低功耗指令
飞腾CPU体系结构之低功耗指令 WFE和WFI指令 当飞腾CPU核执行两类指令:WFE或WFI之后,CPU核会进入低功耗状态: 一旦CPU核进入低功耗状态,就要一直保持低功耗状态直到相应的唤醒事件发生 ...
- 飞腾CPU体系结构(十二)
飞腾CPU体系结构(十二) 1. CPU物理地址空间 飞腾CPU支持的物理地址宽度为44位,物理地址空间实际上只有16TB.系统主存(芯片外部内存)和IO外设(例如SoC设备.PCIe设备)都在这个物 ...
- 飞腾CPU体系结构(十四)
飞腾CPU体系结构(十四) 1. MMU原理 MMU的大致工作原理是: 64位虚拟地址首先分成虚拟页帧号和页内偏移量两部分,虚拟页帧号即页表项索引:根据页表项索引,在进程的页表里查找到对应页表项,然后 ...
- 飞腾CPU体系结构(十三)
飞腾CPU体系结构(十三) 1. 虚拟地址到物理地址的映射 程序员编程一般都是使用虚拟地址,无论是否用到高速缓存,飞腾CPU的内存管理单元MMU都会把虚拟地址翻译成物理地址,然后根据物理地址进行数据的 ...
最新文章
- 单纯形法(三)(概念部分)
- awk的正则表达式提取
- 阿里云上测试服务器的搭建
- WIN32创建居中对话框
- Java之JVM调优案例分析与实战(1) - 高性能硬件上的程序部署策略
- JUC锁-CyclicBarrier(七)
- EasyImage图床源码V2.0
- ubuntu学习日记--Lesson6:shell,bash,dash
- ios 点击出现另外一套tabbar_iOS 点击UITabBar触发刷新
- 內嵌html字符串顯示
- excel 字号对应 html,excel字体大小随表格变
- 街头篮球一直提示服务器维护怎么解决,街头篮球为什么进不去 街头篮球进不去怎么办...
- 图片特效展示(鼠标移入移除特效)
- 模拟器安装app 报错误 INSTALL_FAILED_NO_MATCHING_ABIS
- 高考还有几天c语言作业,高考考几天
- Markdown学习+Typora快捷键
- mysql y m d h i_php时间问题?mysql数据库的时间格式(Y-M-D H:I:S) 在PHP页面想这样显示(Y-M-D) (apos;.#36;rows[apos;ndate...
- maven异常记录-must be unique
- 数字化办公,就选流畅、清晰的华为云桌面
- 每天学习10句英语-第九天
热门文章
- iPad菜单日渐走热美国
- 0005 前端 Html 04 AutoFileName 图片的显示 文字链接 图片链接 页面内链接 列表 加超链接的列表
- 现代的linux和windows7,Windows 7 Vs. Linux谁更强
- Hedge fund Two Sigma hires Alfred Spector as Chief Technology Officer
- 【C语言|数组】数组a、a、a[0]、a[0][0]的区别与联系
- 《设计模式之禅》试评员名单公布
- HP840G3电脑系统安装
- 一台主机 两台显示器 就可以两个用户同时使用电脑
- OpenGL with QtWidgets:练习之甜甜圈
- python孩子 哪里学_Python知识免费学!孩子提高逻辑思维,这样练就够了!