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

RISC-V FENCE.TSO 指令详解

指令手册I-type

FENCE 的 TSO 特定编码,按 Total Store Order 风格排序内存读写。

指令语法

fence.tso
操作数说明
pred/succ:选择前序和后续操作集合,I/O 与内存 R/W 位需要分开理解。
FENCE.TSO 是 FENCE 的特定编码,不带普通寄存器操作数。
RV32I缓存与同步

指令行为说明

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

快速理解与检索要点

FENCE.TSO 是为 TSO 风格内存排序保留的 FENCE 编码。它只覆盖 R/W 内存访问,不覆盖 I/O,并且特意放松 store-to-load 顺序。

fm=1000 且 pred=RW、succ=RW 是 FENCE.TSO 编码。
需要完整 RW 到 RW 排序时使用普通 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» 等实际代码理解该场景。

使用前检查清单

语法检查
  • 确认当前指令格式为 I-type。
  • 确认操作数排列顺序与示例一致。
语义检查
  • 确认目标寄存器用途和调用约定兼容。
  • 确认该指令不是伪指令展开后的底层形式。

容易混淆 / 常见误区

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

常见问题

FENCE.TSO 会刷新缓存吗?

官方语义是排序约束,不是通用缓存刷新指令。

FENCE.TSO 会影响其他 hart 的执行吗?

不会。它约束当前 hart 的相关操作对其他观察者可见的顺序。