首页/指令库/FENCE-TSO
FENCE.TSO

RISC-V FENCE.TSO 指令详解

指令手册I-type

FENCE 的 TSO 特定编码,排序内存 R/W,但不包含设备 I/O,也不强制 store-to-load 顺序。

指令语法

fence.tso
操作数说明
确认这是无显式操作数的 FENCE.TSO 编码。
确认需要的是 R/W 内存排序,而不是 I/O 排序或缓存刷新。
RV32I缓存与同步

指令行为说明

FENCE.TSO 是 FENCE 的特定编码(fm=1000, pred=RW, succ=RW)。它排序内存 R/W 操作,但不包含设备 I/O 位;与 FENCE RW,RW 相比,它不要求前续 store 在后续 load 之前排序。实现可以把它当作更强的 FENCE RW,RW 执行。

FENCE.TSO 指令解析与排序动画

展示 FENCE opcode 编码、fm/pred/succ 字段,以及当前 hart 操作可见顺序约束;不模拟 cache、总线或流水线。

无显式操作数
fence.tsofence.tso
执行环境当前 hart 可见顺序约束不刷新 cache
31..28
27..24
23..20
19..15
14..12
11..7
6..0
1000
fm
0011
pred
0011
succ
00000
rs1=x0
000
funct3
00000
rd=x0
0001111
MISC-MEM
instruction
0x8330000F
opcode
0001111 -> MISC-MEM/FENCE
fm
1000 -> TSO
pred
0011 -> RW
succ
0011 -> RW
reserved
rs1=x0, rd=x0, funct3=000
ordering
排序内存 R/W,但不包含 I/O,且不强制前续 store 先于后续 load
complete
ordering constraint complete

该动画只展示 RISC-V 非特权 ISA 定义的 FENCE/PAUSE 架构语义;不表示任何具体处理器的暂停时长、缓存行为、互连协议或执行成本。

快速理解与检索要点

FENCE.TSO 是 FENCE 的特定 TSO 编码:它只覆盖内存 R/W,不覆盖设备 I/O,并且允许前续 store 不必先于后续 load 排序。

fm=1000 且 pred=RW、succ=RW 是 FENCE.TSO 编码。
FENCE.TSO 不包含 I/O 位,不能替代带 I/O 位的 FENCE。
与 FENCE RW,RW 相比,它不要求 store-to-load 排序。
实现可以把 FENCE.TSO 作为更强的 FENCE RW,RW 执行。

常见使用场景

内存排序

结合 «fence.tso # TSO-style memory ordering for R/W accesses» 等实际代码理解该场景。

设备与 IO

结合 «fence.tso # TSO-style memory ordering for R/W accesses» 等实际代码理解该场景。

并发同步

结合 «fence.tso # TSO-style memory ordering for R/W accesses» 等实际代码理解该场景。

使用前检查清单

语法检查
  • 确认这是无显式操作数的 FENCE.TSO 编码。
  • 确认需要的是 R/W 内存排序,而不是 I/O 排序或缓存刷新。
语义检查
  • 确认需要的是当前 hart 操作可见顺序约束。
  • 确认是否需要 I/O 位;FENCE.TSO 不排序设备 I/O。

容易混淆 / 常见误区

FENCE.TSO 不排序设备 I/O;需要 I/O 排序时使用带 I/O 位的 FENCE。
FENCE.TSO 比 FENCE RW,RW 更弱,因为不强制 store-to-load 排序。
实现允许把它作为更强的 FENCE RW,RW 执行,因此不要假设一定更便宜。

常见问题

FENCE.TSO 会排序设备 I/O 吗?

不会。它的 pred/succ 只包含 R/W 内存位,不包含 I/O 位。

FENCE.TSO 和 fence rw,rw 一样强吗?

架构语义上更弱,因为它不要求前续 store 先于后续 load;但实现可选择按更强的 fence rw,rw 执行。