clf (高速缓存行清空) 指令

用途

将已修改的数据行从数据高速缓存写入主内存,或者使已高速缓存的指令或未修改的数据失效。

注: clf 指令仅在 POWER ® 系列体系结构中受支持。

语法

位数 VALUE
0-5 31
6-10 ///
11-15 亚美尼亚共和国
16-20 经常预算
21-30 118
31 Rc
POWER ® 系列 
clf RA RB

描述

clf 指令通过将通用寄存器 (GPR) RA 的内容添加到 GPR RB的内容来计算有效地址 (EA)。 如果 RA 字段为 0 ,那么 EA 是 RB 和 0 的内容总和。 如果 RA 字段不是 0 ,并且该指令未导致数据存储中断,那么操作的结果将返回到 GPR RA中。

使用 clf 指令时,请考虑以下事项:

  • 如果机器状态寄存器 (MSR) 的数据重定位 (DR) 位设置为 0 ,那么会将有效地址视为实际地址。
  • 如果 MSR DR 位设置为 1 ,那么会将有效地址视为虚拟地址。 在这种情况下,将忽略 MSR 指令重定位位 (IR)。
  • 如果包含由 EA 寻址的字节的行在数据高速缓存中并且已修改,那么开始将该行写入主内存。 如果包含由 EA 寻址的字节的行位于其中一个高速缓存中,那么该行无效。
  • 当 MSR (DR) = 1 时,如果虚拟地址没有转换,将发生数据存储器中断,将数据存储器中断段寄存器的第一个位设置为 1。
  • 当虚拟地址转换为无效的实际地址并且行存在于数据高速缓存中时,将发生机器检查中断。
  • 地址转换将指令视为对字节寻址的负载,忽略保护和数据锁定。 如果此指令导致转换头缓冲区 (TLB) 不命中,那么将设置引用位。
  • 如果 EA 指定 I/O 地址,那么该指令将被视为 no-op ,但 EA 将放在 GPR RA中。

clf 指令有一种语法形式,不会影响 "定点异常" 寄存器。 如果记录 (Rc) 位设置为 1 ,那么未定义条件寄存器字段 0。

参数

描述
RA 指定用于 EA 计算的源通用寄存器,如果 RA 不是 GPR 0 ,那么指定用于操作的目标通用寄存器。
经常预算 指定用于 EA 计算的源通用寄存器。

示例

处理器不需要保持指令存储与数据存储一致。 以下代码在执行修改后的指令之前执行存储同步指令:


# Assume that instruction A is assigned to storage location
# ox0033 0020.
# Assume that the storage location to which A is assigned
# contains 0x0000 0000.
# Assume that GPR 3 contains 0x0000 0020.
# Assume that GPR 4 contains 0x0033 0020.
# Assume that GPR 5 contains 0x5000 0020.
st      R5,R4,R3         # Store branch instruction in memory
clf     R4,R3            # Flush A from cache to main memory
dcs                      # Ensure clf is complete
ics                      # Discard prefetched instructions
b       0x0033 0020      # Go execute the new instructions

在存储之后,但在执行 clfdcsics 指令之前,高速缓存中 A 的副本包含分支指令。 但是,主内存中 A 的副本可能仍包含 0。 clf 指令将新指令复制回主内存,并使指令和数据高速缓存中包含位置 A 的高速缓存行失效。 后跟 ics 指令的 dcs 指令序列可确保新指令位于主内存中,并且在访存下一个指令之前,数据和指令高速缓存中的位置副本无效。