C.JR

RISC-V C.JR 指令详解

指令手册C-type

通过寄存器跳转:目标为 rs1 且最低位清零。CR格式。rs1!=x0。

指令语法

c.jr rs1
操作数说明
压缩指令仅 16 位,寄存器选择通常限制在 x8–x15。
立即数字段较窄,查看特定压缩指令的完整编码。
C压缩指令

指令行为说明

C.JR (CR格式)按 jalr x0,0(rs1) 的语义跳转:目标由 rs1 得到并将最低位清零。仅rs1≠x0有效(rs1=x0保留);不保存返回地址。

C.JR 指令解析与执行动画

此可交互模型只展示架构可见的解码、操作数、状态更新;不表示流水线、缓存或时序。

c.jr
执行环境
编码字段
15..12
funct4
1000
11..7
rs1
00001
6..2
rs2
00000
1..0
op
10
执行数据路径
解码
CR: funct4 / rs1 / rs2=0
操作数
x1 = 0x00002001
执行
0x00002001 & ~1
状态
PC <- 0x00002000

C.JR 不写链接寄存器。

架构可见结果

等待状态更新:上方高亮显示当前步骤的字段和计算,尚未提交架构可见结果。

快速理解与检索要点

C.JR 使用 CR 格式并等价于 jalr x0,0(rs1):目标最低位清零,且不写返回地址。

rs1 不能为 x0;该编码保留。
C.JR 使用完整的 5 位 rs1 字段,不限于 x8-x15。

常见使用场景

间接跳转与返回

结合 «c.jr ra # return» 等实际代码理解该场景。

使用前检查清单

语法检查
  • 确认压缩指令 16 位编码只在支持 C 扩展的 CPU 上可用。
  • 确认 rd/rs1'/rs2' 字段映射到 x8–x15。
语义检查
  • 注意压缩指令的操作数空间有限。
  • 确认这条压缩指令有对应的 32 位展开形式。

容易混淆 / 常见误区

rs1不能为x0

常见问题

C.JR 为什么清零目标最低位?

它采用 jalr x0,0(rs1) 的语义;JALR 在形成目标后清零最低位。