为什么不能用 ADDIW 加零替代?
C.ZEXT.W 将低32位零扩展;ADDIW/C.ADDIW 加零会符号扩展 bit 31。低32位为0x80000001时,两者分别得到0x0000000080000001和0xffffffff80000001。
16位编码的零扩展字(RV64:低32位零扩展)
C.ZEXT.W (Zcb, CU 格式,仅 RV64) 将 rd'/rs1' 的低 32 位零扩展到 64 位,rd'/rs1' 仅限 x8-x15。它需要 Zba 支持,等价于 32 位编码的 add.uw rd', rd', zero。注意 ADDIW/C.ADDIW 加 0 是 32 位符号扩展,不是零扩展。属于 Zcb,依赖 Zca 和 Zba。
仅显示官方定义的压缩字段、条件与架构可见状态;不模拟流水线、缓存或时序。
C.ZEXT.W 需要 Zcb、Zba 和 RV64;Zcb 依赖 Zca。
C.ZEXT.W 是压缩字零扩展的 16 位编码形式;语义和可编码寄存器限制必须按官方 Zcb 规则理解。
RV64 Zcb+Zba,旧 x10=0xffffffff80000001:c.zext.w x10 写 x10=0x0000000080000001。
RV64 Zcb+Zba,旧 x10=0xffffffff80000001:c.zext.w x10 写 x10=0x0000000080000001。
C.ZEXT.W 将低32位零扩展;ADDIW/C.ADDIW 加零会符号扩展 bit 31。低32位为0x80000001时,两者分别得到0x0000000080000001和0xffffffff80000001。
仅 RV64,单个源/目的为 x8-x15,需要 Zcb、Zba;Zcb 依赖 Zca。