MIPS CACHE 指令快速参考
指令编码:
31..26 CACHE 101111
25..21 base
20..16 op
15..0 offset
格式:cache op, offset(base)
执行 op 指定的 cache 操作。16 位的 offset 经符号扩展,添加到 base 寄存器来形成有效地址。根据执行操
作的类型及操作 cache 的类型,有效地址的用途如下表:
操作需要一个 cache 类型 有效地址的使用
地址
虚地址
有效地址用于寻址 cache。对该有效地址的翻译可能发生,也可能不发生(可
能会出现 TLB Refill 或 TLB Invalid 异常)
地址
索引
实地址
有效地址由 MMU 翻译至物理地址,该物理地址用于 cache 寻址。
无关
有效地址由 MMU 翻译为一个物理地址。由实现决定使用有效地址或者翻译
后的物理地址来索引 cache。因此,对需要索引的 cache 操作,总是使用
kseg0 地址。
假定 cache 的总大小为 CS,相关性为 A,每个 tag 的字节数为 BPT,下面的
计算给出了地址的哪些字段用于确定 way 和 index:
OffsetBit <- Log2(BPT)
IndexBit <- Log2(CS/A)
WayBit <- IndexBit + Ceiling(Log2(A))
Way <- Addr[WayBit-1..IndexBit]
Index <- Addr[IndexBit-1..OffsetBit]
对直接映射的 cache,Way 计算被忽略,Index 值完全指定了 cache tag。
相关性的含义:Cache 的 way = A+1,见 Config1 寄存器的说明。
地址分割
Unused | Way | Index | byte index |
CACHE 指令 op 字段低 2 位的含义(指令 Bits[17:16])
编码
0b00
0b01
0b10
0b11
名称
I
D
T
S
表示的 Cache
一级指令 Cache
一级数据 Cache
三级 Cache
二级 Cache
CACHE 指令 op 字段高 3 位的含义(指令 Bits[20:18])
编码
Cache
类型
0b000
I
操作名称
索引作废 (Index
Invalidate)
有效地址
操作类型
索引
D
索引回写作废
索引
(Index
Writeback
Invalidate) /
索引作废
(Index
Invalidate)
实现的兼
容性
必须实现
必须实现
操作
将指定索引的 cache 块状态设置为无效。
常用于作废整个指令 cache。
对回写型 cache:如果指定索引的 cache 块
状态为有效且脏,将该块数据写回内存。操
作完成后,将 cache 块置为无效。如果该块
有效但不脏,仅将状态置为无效。
对直写型 cache:将指定索引的 cache 块设
为无效。
S, T 索引回写作废
索引
可选实现
(Index
Writeback
Invalidate) /
索引作废 (Index
Invalidate)
0b001 所有
类型
索引加载 Tag
(Index Load Tag)
索引
0b010 所有
类型
索引存储 Tag
(Index Store
Tag)
索引
该操作多用于作废整个数据 cache。
将指定索引处的 tag 值读到 TagLo 和 TagHi
寄存器。如果实现了 DataLo 和 DataHi 寄存
器 , 同 时 将 对 应 数 据 加 载 到 DataLo 和
DataHi 寄存器。该操作不允许引发 Cache
异常。
TagLo, TagHi, DataLo 及 DataHi 的定义与
具体实现相关。
将 TagLo 和 TagHi 寄存器的值写入指定索引
cache 块的 tag 区。该操作不允许引发 Cache
异常。
0b011 所有
与实现相关
未指定 与具体实现相关
类型
0b100
I, D 命中作废 (Hit
地址
Invalidate)
如果 cache 块包含指定地址,将该块设为无
效。
该操作多用于作废一个地址范围的指令
cache。
S, T 命中作废 (Hit
地址
Invalidate)
0b101
I
填充(Fill)
D
命中回写作废
(Hit Writeback
Invalidate) /
命中作废 (Hit
Invalidate)
地址
地址
按指定地址填充 cache
对回写型 cache:如果指定地址的 cache 块
有效且脏,将内容写回内存。操作完成后,
将 cache 块置为无效。如果该块有效但不
脏,仅设置其状态为无效。
推荐实现
必须实现
可选实现
对指令
Cache 必须
实现,其它
情况推荐
实现
可选实现
推荐实现
必须实现
S, T 命中回写作废
地址
(Hit Writeback
Invalidate) /
命中作废 (Hit
Invalidate)
命中回写(Hit
Writeback)
地址
0b110
D
S, T 命中回写(Hit
地址
Writeback)
0b111 I, D 获取并锁定
地址
(Fetch and Lock)
对直写型 cache:如果 cache 块包含指定地
址,将该块的状态置为无效。
可选实现
该操作常用于作废一个地址范围的数据
cache。
如果包含指定地址的 cache 块有效且脏,将
内容写回内存。操作结束后,保留 cacheline
状态不变,但清除脏标记。对直写型 cache,
该操作可当作 nop。
推荐实现
可选实现
如果 cache 不包含指定的地址,则执行必要
的回写,并从内存中填充,将状态设为有效
且锁定。如果 cache 已经包含了指定地址,
将状态设为锁定。对组相联 cache 或全相联
cache,选择哪个 way 进行填充取决于具体
实现。
锁定状态可以通过执行索引作废、索引回写
作废、命中作废或命中回写作废来清除。也
可以通过索引存储 tag 来清除 lock 位(与具
体实现相关)。索引作废和索引回写作废也
依赖于 cache line 的组织。一般只有命中
作废和命令回写作废是可移植的操作。
本操作与依赖于具体实现,需要参考对应手
册。