ARMv8-A编程指导之ARMv8寄存器(2)

3 系统寄存器

        在AArch64中,通过系统寄存器控制着系统配置,使用MSR和MRS指令访问系统配置。这与ARMv7相对应,这些寄存器通常通过CP15操作进行访问。寄存器的名字告诉你它可以访问的最低异常级别。

        比如:

(1)可从EL1,EL2,EL3来访问TTBR0_EL1

(2)可从EL2和EL3来访问TTBR0_EL2

        带后缀_ELn的寄存器在一些或所有的异常级别上都有一个独立的寄存器,虽然通常不为EL0。很少的系统寄存器从EL0访问,虽然CACHE TYPE register CTR_EL0为一个可以访问的例子。

        访问系统寄存器的代码以如下形式:

MRS x0, TTBR0_EL1
MSR TTBR0_EL1, x0

        ARM架构的之前版本使用协处理器来进行系统配置。但是AArch64不包括对协处理器的支持。下表仅列出了本文档提到的系统寄存器。

        本表显示了显示了具有分开的寄存器的异常级别。比如ACTLR存在ACTLR_EL1,ACTLR_EL2和ACTLR_EL3。

System register
Name Register Description  value
ACTLR_ELn 备份的控制寄存器 控制处理器相关的特性 1,2,3
CCSIDR_ELn 当前CACHE大小ID寄存器 提供当前选择CACHE架构的信息 1
CLIDR_ELn CACHE级别ID寄存器 实现在每个级别或某个CACHE类型。CACHE分级的一致性和联合性的级别 1,2,3
CNTFRQ_ELn 计数器定时器频率寄存器 报告系统定时器的频率 0
CNTPCT_ELn 计数器定时器物理计数寄存器 64位当前计数值 0
CNTKCTL_ELn 计数器定时器内核控制寄存器 控制着从虚拟计数器中产生event stream。也控制着从EL0到物理计数器、虚拟计数器,EL1物理定时器,虚拟定时器的访问 1
CNTP_CVAL_ELn 计数器定时器物理定时器比较值 EL1物理定时器的比较值 0
CPACR_ELn 协处理器访问控制寄存器 控制着对trace,浮点,NEON功能的访问 1
CSSELR_ELn CACHE大小选择寄存器 通过指明要求的CACHE级别和类型,或指令或数据CACHE,选择当前CACHE大小ID寄存器CCSIDR_EL1 1
CNTP_CTL_ELn 寄存器定时器物理控制寄存器 控制着EL1物理定时器的寄存器 0
CTR_ELn CACHE类型寄存器 架构中集成CACHE的信息情况 0
DCZID_ELn 数据CACHE零ID寄存器 通过DCZVA系统指令写0值的块大小 0
ELR_ELn 异常链接寄存器 产生异常的指令地址 1,2,3
ESR_ELn 异常综合寄存器 包含着异常的原因的信息 1,2,3
FAR_ELn 错误地址寄存器 虚拟错误地址 1,2,3
FPCR 浮点控制寄存器 控制着浮点扩展的信息。这个寄存器的该域映射到AArch32 FPSCR对应的域中 -
HCR_ELn hypervisor配置寄存器 控制着EL2的虚拟化的设置和异常陷入 2
MAIR_ELn 内存属性间接寄存器 提供了ELn中stage1转换的长描述符格式转换表项的内存属性编码 1,2,3
MIDR_ELn 主ID寄存器 运行的处理器类型 1
MPIDR_ELn 多处理器亲和性寄存器 在多核或cluster系统中,处理器或cluster ID 1
SCR_ELn 安全配置寄存器 控制着EL3的安全状态和异常的陷入 3
SCTLR_ELn 系统控制寄存器 控制着架构特性,比如MMU,CACHE和对齐检查 0,1,2,3
SPCR_ELn 保存程序状态寄存器 当异常产生时保存处理器状态 abt,fiq,irq,und,1,2,3
TCR_ELn 转换控制寄存器 决定了哪个TTBR,它定义了从ELn的内存访问的stage1转换的转换表walk的基地址。也控制着转换表的格式和cacheability和shareability信息。 1,2,3
TPIDR_ELn 用户读写线程ID寄存器 为了OS管理的目的,提供了软件执行在ELn可以存储线程ID信息的地址。 0,1,2,3
TPIDRRO_ELn 用户只读线程ID寄存器 提供了软件执行在EL1或更高级别可以存储线程ID信息的位置。这个信息对软件执行在EL0上时可见的。 0
TTBR0_ELn 转换表基地址寄存器0 转换表0的基地址,以及它所使用内存的信息。在ELn的stage1转换的内存访问的其中一个转换表。 1,2,3
TTBR1_ELn 转换表及地址寄存器1 转换表1的基地址,以及它所使用内存的信息。在ELn的stage1转换的内存访问的其中一个转换表。 1
VBAR_ELn 基于vector的地址寄存器 发生在ELn的异常的异常基地址 1,2,3
VTCR_ELn 虚拟转换控制寄存器 控制着从非安全EL0和EL1的stage2内存访问转换的转换表walk。也保持着访问的cacheability和shareability信息。 2
VTTBR_ELn 虚拟转换表基地址 从非安全EL0和EL1的stage2内存访问转换的转换表的基地址 2

3.1 系统控制寄存器

        系统控制寄存器SCTLR控制着标准内存,系统功能并提供core中实现的功能的状态信息。

ARMv8-A编程指导之ARMv8寄存器(2)_第1张图片

        在EL1及更高异常级别并不是所有的位都有效。这些位含义如下所示:

UCI 当设置时,使能在AArch64中DC CVAU/DC CVAC/IC IVAU指令的EL0访问。

EE 异常的大小端,0-小端,1-大端

EOE 在EL0上明确数据访问的大小端。0-小端,1-大端

WXN 写权限应用XN。0-not force to XN,1-force to XN

nTWE 不陷入到WFE。1表示WFE正常执行。

nTWI 不陷入到WFI。1表示WFI正常执行。

UCT 当设置时,在AArch64上使能EL0访问到CTR_EL0寄存器。

DZE 在EL0上访问DC ZVA指令。0-执行禁止,1-执行允许

I 指令CACHE使能。它是EL0和EL1的指令CACHE的使能位。访问到可缓存的正常内存的指令可以被缓存。

UMA 用户屏蔽访问。当EL0使用AArch64,控制从EL0的中断屏蔽访问。

SED 禁止SETEND。在EL0使用AArch32禁止SETEND指令。0-使能,1-禁止

ITD IT禁止。0 - IT指令有效,1 - IT指令被当作16位指令。仅另外16位指令或32位指令的头16位可以使用,这依赖于实现。

CP15BEN CP barrier使能。如果实现了,它是AArch32 CP15 DMB,DSB和ISB barrier操作的使能位。

SA0 EL0的栈对齐检查使能位

SA 栈对齐检查使能位

C 数据cache使能。EL0和EL1的数据访问使能位。对cacheable普通内存的数据访问都被缓存。

A 对齐检查使能位

M 使能MMU

对SCTLR的访问

        为访问SCTLR_ELn,使能:

MRS ,SCTLR_ELn
MSR SCTLR_ELn, 

比如:

ARMv8-A编程指导之ARMv8寄存器(2)_第2张图片

 

NOTE: 处理器中的cache必须在在数据和指令的cache在各异常级别被使能之前被无效化。

4 大小端

        这里有两种在内存中观察数据的基本方法,或小端LE或大端BE。在大端系统中,在内存中object的最高位存储在最低地址,接近于0的地址。在小端系统中,数据的最低位被保存在最低地址中。术语byte-ordering也可以用来代替大小端。

ARMv8-A编程指导之ARMv8寄存器(2)_第3张图片

         每个异常级别的数据的大小端都被单独控制。对EL3,EL2和EL1,SCTLR_ELn.EE设置大小端。EL1中其他位SCTLR_EL1.EOE控制EL0的数据大小端的设置。在AArch64执行状态中,数据访问可以位LE或BE,但指令的获取通常位LE。

        是否处理器对LE和BE都支持依赖于处理器的实现。若仅支持小端,EE和EOE位都为0。类似的,若仅支持大端,EE和EOE位都是为1。

        当使用AArch32时,CPSR.E位与相对应系统控制寄存器中EE位不同,该位在EL1,EL2和EL3被弃用。ARMv7中SETEND指令也被弃用。通过设置SCTLR.SED位可以在执行SETEND指令时造成未定义的异常。

你可能感兴趣的:(ARMv8-A编程指导手册,System,regsiter,Endianness)