立即数为零是不是空操作?
不是。imm=0 仍将 rd 的低32位符号扩展到64位。例如 0x0000000080000000 变为 0xFFFFFFFF80000000。
RV64 专用:rd 加有符号 6 位立即数,取低 32 位并符号扩展到 64 位写回;rd=x0 保留。
C.ADDIW(C 2.0 / Zca,CI)仅RV64,rd为x1–x31且同时作为源和目标,imm为-32–31。取rd+imm低32位,再把bit31符号扩展到64位;溢出无算术异常。等价addiw rd, rd, imm;imm=0合法,执行sext.w rd, rd,非HINT。
展示 16 位编码、操作数、计算和架构结果。
RV64C / Zca, XLEN=64
16 位编码字段
RV64 专用:rd 加有符号 6 位立即数,取低 32 位并符号扩展到 64 位写回;rd=x0 保留。
RV64,x10=0x0000000080000000:c.addiw x10, -1 得到 x10=0x000000007fffffff;保留低32位再符号扩展。
不是。imm=0 仍将 rd 的低32位符号扩展到64位。例如 0x0000000080000000 变为 0xFFFFFFFF80000000。
不是,C.ADDIW 的 rd=x0 码点是保留编码。合法 rd 为 x1–x31。