文章目录
- ARM64 DC 与 IC 指令
上篇文章:ARM 常见汇编指令学习 8 - dsb sy 指令及 dsb 参数介绍
ARM64 DC 与 IC 指令
AArch64指令集中有两条关于缓存维护(cache maintenance)的指令,分别是IC和DC。
- IC 是用于指令缓存操作;
- DC 是用于数据缓存操作。
IC 和DC指令都属于系统指令(system instruction),系统指令还包括 AT,BRB,CFP,CPP,DVP和TLBI。
IC指令的语法格式如下:
IC <ic_op>{, <Xt>}
其中,是可选的64-bit通用源寄存器。
IC IALLU
: 表示 Invalidate all to PoU,无效化所有到PoU(Point of Unification,统一点)的指令缓存行。IC IALLUIS
: 表示 Invalidate all to PoU, Inner Shareable,无效化所有到PoU的,内部可共享(Inner Shareable)的指令缓存行。IC IVAU
: 表示 Invalidate Virtual Address to PoU,无效化虚拟地址到PoU的指令缓存行。
关于 shareable 及 POC, POC 见以前文章:
ARM Cache 系列文章 3 – Cache 与 MPU关系学习
ARM Cache 系列文章 2 – Cache Coherence及内存顺序模学习
DC指令的语法格式如下:
DC <dc_op>, <Xt>
其中,是可选的64-bit通用源寄存器
DC 指令后操作选项 <dc_op>
用于指定具体的操作类型,比如:
-
DC IVAC
:表示Invalidate Virtual Address to PoC
,无效化虚拟地址到 PoC 的缓存行。 -
DC ISW
: 表示Invalidate Set/Way
,无效化缓存组/路。缓存维护操作可以通过缓存组(set),路(way)或虚拟地址(VA)执行。在做高速缓存维护操作前,需要知道高速缓存的一些信息,比如系统中有多少级高速缓存,缓存行的大小,每一级缓存的组织结构等等。这些基本信息保存在系统寄存器中,在系统上电过程中,操作系统访问这些寄存器来获得缓存的信息。这些寄存器有CLIDR_EL1
,CSSELR_EL1
,CCSIDR_EL1
,CTR_EL1
等。 -
DC CIVAC
:这个指令的含义是:C–Clean, I–Invalidate,- Clean:将缓存中的数据写回到主存中,以确保主存中的数据是最新的。
- Invalidate:使缓存中的指定数据无效,这样在下次访问该数据时,处理器会从主存中重新加载数据,而不是使用缓存中的旧数据。
- Architectural Event Broadcast通道:这是一个硬件机制,用于在多核处理器中同步不同核之间的缓存操作。
-
举例来说,如果你执行了 “
DC CIVAC, X0
” 这条指令,那么处理器会清除并无效化寄存器X0
中指定的地址对应的缓存行。
adr x0, data_pool1
adr x1, data_pool2
adr x2, data_pool3
/* clean adn invalidate */
dsb sy
dc CIVAC,x0
dc CIVAC,x1
dc CIVAC,x2
dsb sy
data_pool1:
...
data_pool2:
...
data_pool3:
...
上篇文章:ARM 常见汇编指令学习 8 - dsb sy 指令及 dsb 参数介绍