pause

RISC-V pause 伪指令详解

汇编器伪指令

PAUSE 暂停提示伪指令,官方汇编手册列为 fence w, 0 的提示写法。它用于自旋等待循环,给实现一个降低资源竞争或功耗的机会。

你写下的是
pause
常见真实展开
fence w, 0

这条伪指令到底在帮你省什么

忙等循环不一定需要真正的内存屏障;pause 用标准提示编码表达“我正在等待”,让硬件或模拟器可选择优化处理。

pause 的核心作用是“自旋等待提示”。它是汇编器层面的简写;调试、审计或阅读机器码时,应回到页面列出的真实展开指令和相关重定位语义来判断行为。

官方语义核对重点

官方汇编手册把 pause 作为汇编器层面的伪指令/别名处理,硬件执行的是展开后的真实指令序列。
真实语义以 FENCE 等展开指令的 ISA 定义为准;本页不把 pause 当作独立硬件 opcode。
pause 是提示类写法,不能当作会改变程序可见状态或提供同步语义的指令使用。

可用性与扩展条件

基础条件
  • Zihintpause 提示语义
  • 编码为 FENCE w,0
单指令/标准写法条件
  • 目标环境接受 PAUSE 提示写法
回退/边界
实现可以把 PAUSE 当作低成本提示或 NOP 类操作处理;它不保证让出 CPU 或固定延迟。
备注
  • 不是通用同步原语;需要排序时仍使用合适的 fence/AMO/aq/rl。

展开过程怎么理解

步骤 1
FENCE w,0 编码为 PAUSE 提示,表示当前 hart 处于自旋等待。

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

工具可能显示 pause,也可能显示底层 fence w,0。作为 HINT,具体效果依赖实现。

官方依据与阅读顺序

本页把伪指令当作汇编器层面的别名或宏来解释:先看它会展开成哪些真实指令,再回到官方 ISA 手册理解真实指令的行为。涉及 ABI、重定位或链接器松弛时,以 psABI 文档为准。

什么时候优先想到它

锁、自旋等待或轮询循环内部
等待另一个 hart 或设备更新状态
希望降低忙等循环对流水线/功耗/共享资源的压力

容易混淆 / 常见误区

pause 是提示,不保证睡眠、让出 CPU 或固定延迟
它不是通用内存同步原语;需要内存序时仍应使用合适的 fence/amo/aq/rl
不同实现可能把它当作低成本 NOP 处理

常见问题

pause 是真实 RISC-V 指令吗?

pause 是汇编器伪指令或别名,不是单独硬件 opcode。页面中的“常见真实展开”列出官方展开,真实行为由展开后的 ISA 指令决定。

使用 pause 时最容易误解什么?

pause 是提示,不保证睡眠、让出 CPU 或固定延迟