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