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 的文本同义词