rdinstret

RISC-V rdinstret 伪指令详解

汇编器伪指令

RISC-V rdinstret 是读取 instret CSR 的伪指令,展开为 csrrs rd, instret, x0。它读取低 XLEN 位;instret 从过去任意起点计数该 hart 已退休的指令。

你写下的是
rdinstret rd
常见真实展开
csrrs rd, instret, x0

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

RISC-V Assembly Programmer's Manual将 rdinstret 列为 csrrs rd, instret, x0 的标准计数器读取写法。

rdinstret 读取 instret 的低 XLEN 位。

可用性与扩展条件

基础条件
  • Zicntr 依赖 Zicsr
  • 读取 instret 的低 XLEN 位
单指令/标准写法条件
  • 执行环境允许计数器访问
回退/边界
某些执行环境可能禁止计数器访问;RV32 的完整 instret 值需要 rdinstreth 高半读取。
备注
  • ECALL、EBREAK 等造成同步异常的指令不退休,也不增加 instret。

展开过程怎么理解

步骤 1
CSRRS 以 rs1=x0 读取只读 instret CSR;该 canonical form 不写入 CSR。

官方依据与阅读顺序

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

什么时候优先想到它

读取该 hart 已退休的指令计数

容易混淆 / 常见误区

Zicntr 依赖 Zicsr;某些执行环境可能禁止访问计数器。
XLEN=32 时 rdinstret 只读低 32 位;完整值需要 rdinstreth 高半读取。
造成同步异常的指令,包括 ECALL 和 EBREAK,不退休且不增加 instret。

常见问题

rdinstret 是真实 RISC-V 指令吗?

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

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

同步异常的指令不退休,因此不增加 instret;RV32 的完整值需要 rdinstreth 高半读取。