fence-tso

RISC-V fence.tso FENCE 编码详解

FENCE 编码写法

fence.tso 是 TSO 内存屏障写法,编码为 FENCE 的 TSO/fm=1000、pred=rw、succ=rw 形式。它表达 TSO 风格排序约束,不等同于普通文本形式的 fence rw,rw。

你写下的是
fence.tso
编码字段
fence.tso # FENCE encoding: fm=1000, pred=rw, succ=rw

这种编码写法到底表达什么

提供 TSO 风格排序约束的标准 FENCE 编码,便于可移植地表达比普通 fence rw,rw 更特定的内存序意图。

fence.tso 表达 FENCE 的 TSO 风格内存排序约束。阅读本页时应把重点放在 FENCE 编码字段和 Unprivileged ISA 的内存模型语义上,而不是把它理解成额外的硬件 opcode。

官方语义核对重点

fence.tso 是 FENCE 指令的标准 TSO 编码写法;本页在伪指令区收录它用于解释汇编写法和反汇编显示。
真实语义来自 Unprivileged ISA 中 FENCE/FENCE.TSO 和 RVWMO 的定义,不来自额外的 fence-tso 硬件 opcode。
它使用 fm=1000、pred=rw、succ=rw;不能把它简单等同于普通 fm=0000 的 fence rw,rw 文本写法。

可用性与扩展条件

基础条件
  • FENCE 指令编码空间
  • RVWMO 内存模型语义
单指令/标准写法条件
  • 使用 FENCE 的 fm=1000、pred=rw、succ=rw TSO 编码
回退/边界
实现可保守地执行更强排序,但源码语义仍应按 FENCE.TSO 阅读。
备注
  • 不是额外的 fence-tso opcode;它是 FENCE 的标准汇编写法。

展开过程怎么理解

步骤 1
FENCE 使用 pred=rw、succ=rw 且 fm=1000 的 TSO 编码;它不是普通 fm=0000 的 fence rw,rw。

在 objdump / 反汇编里可能看到什么

反汇编器通常显示为 fence.tso;保守实现也可能按更强的 fence rw,rw 处理。

官方依据与阅读顺序

本页把 fence.tso 作为 FENCE 指令的标准汇编写法来解释:先看编码字段,再回到 Unprivileged ISA 的 FENCE/FENCE.TSO 与 RVWMO 章节理解排序语义。

什么时候优先想到它

在需要 TSO 语义的并发代码中标注内存序
阅读编译器或运行库生成的内存屏障序列
区分 TSO fence 与普通 fence rw,rw 的编码和语义意图

容易混淆 / 常见误区

fence.tso 是真实 FENCE 编码的一种汇编写法,不是普通 fence rw,rw 的文本同义词
实现可以保守地执行更强排序,但源码语义仍应按 TSO fence 理解
内存模型代码应结合 RVWMO/扩展规范审查,不能只靠伪指令名判断正确性

常见问题

fence-tso 是真实 RISC-V 指令吗?

fence.tso 是 FENCE 指令的 TSO 编码汇编写法,不是额外的 fence-tso 硬件 opcode。页面中的展开/编码字段用于说明它如何由真实 FENCE 语义执行。

使用 fence-tso 时最容易误解什么?

fence.tso 是真实 FENCE 编码的一种汇编写法,不是普通 fence rw,rw 的文本同义词