它一定等价于同名 32 位指令吗?
不一定。有些 C/Zc 指令是常见 32 位指令的压缩形式,有些有专门的栈帧或查表语义。
通过跳转向量表间接跳转
CM.JT (Zcmt) 仅在 index=0-31 时解码;它从 JVT CSR 的 base 加上 RV32 的 index<<2 或 RV64 的 index<<3 所得指令存储器表项取目标,并将表项地址的 bit 0 清零后写入 pc。仅 jvt.mode=0 定义该行为;保留 mode 使该指令保留。它复用 c.fsdsp 编码,与 Zcd 不兼容;Zcmt 依赖 Zca 和 Zicsr。
仅显示官方定义的压缩字段、条件与架构可见状态;不模拟流水线、缓存或时序。
Zcmt 表项按当前数据端序,作为指令存储器取指;JVT base 必须至少 64 字节对齐。
CM.JT 使用 8 位 index 的 0-31 范围查找 JVT 表项,并跳到清除 bit 0 的表项地址,不写入 ra。
结合 «cm.jt 3 # jump via table entry 3» 等实际代码理解该场景。
结合 «cm.jt 3 # jump via table entry 3» 等实际代码理解该场景。
不一定。有些 C/Zc 指令是常见 32 位指令的压缩形式,有些有专门的栈帧或查表语义。
许多 16 位编码只能表示压缩寄存器子集或固定寄存器,如 sp、ra、a0/a1。