表项是普通数据加载吗?
不是。指令与表项是两次隐式取指,都需要执行权限,读权限无关;表项采用当前数据端序。
通过跳转向量表间接跳转并保存返回地址
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。
仅显示官方定义的压缩字段、条件与架构可见状态;不模拟流水线、缓存或时序。
示例假设 Zca、Zicsr、Zcmt 可用,且 jvt 访问获准(含适用 stateen 控制);Zcmt 表项按当前数据端序,作为指令存储器取指;JVT base 必须至少 64 字节对齐。
CM.JALT 使用 8 位 index 的 32-255 范围查找 JVT 表项;它把 pc+2 链接到 ra,并跳到清除 bit 0 的取出目标值。
RV32 Zcmt,PC=0x1000、jvt.mode=0、base=0x2000、表项[0x2080]=0x80001001:cm.jalt 32 在取指成功且访问获准时写 PC=0x80001000、ra=0x1002。
RV32 Zcmt,PC=0x1000、jvt.mode=0、base=0x2000、表项[0x2080]=0x80001001:cm.jalt 32 在取指成功且访问获准时写 PC=0x80001000、ra=0x1002。
RV32 Zcmt,PC=0x1000、jvt.mode=0、base=0x2000、表项[0x2080]=0x80001001:cm.jalt 32 在取指成功且访问获准时写 PC=0x80001000、ra=0x1002。
不是。指令与表项是两次隐式取指,都需要执行权限,读权限无关;表项采用当前数据端序。
相同编码中 index=0-31 解码为 CM.JT,不写 ra;32-255 解码为 CM.JALT,成功时写 ra=PC+2。仅 jvt.mode=0 定义此行为。