C.ADDI16SP 的立即数范围为何不是连续的每个整数?
该立即数按 16 字节缩放编码,因此只有 -512 到 496 之间的非零 16 字节倍数可编码。
将非零 nzimm[9:4] 符号扩展后加到栈指针 x2/sp;立即数是 16 字节倍数。CI 格式,与 C.LUI 共享编码空间。
C.ADDI16SP 与 C.LUI 共享编码空间,但目标字段固定为 x2/sp。它把分散编码的非零 nzimm[9:4] 符号扩展后加到 x2/sp;该立即数表示 -512 到 496 的 16 字节倍数。它展开为 addi x2, x2, nzimm[9:4];nzimm=0 的编码保留。
按实际 CR 或 CI 16 位编码解码,并分清普通指令、HINT 与共享编码。
0x713D = 0111000100111101动画直接展示 C 扩展的 16 位字段,而不是把它伪装成 32 位标量指令。
写回步骤之前,x2/sp 仍保持读取到的旧值;上方只展示待写回的计算。
动画只展示官方定义的解码、寄存器读取、算术和架构状态,不表示实现的流水线、缓存、预测或时序。
C.ADDI16SP 是 16 位 C 扩展指令:固定读取并写回 x2/sp,将非零 nzimm[9:4] 符号扩展后相加。它只编码 -512 到 496 的 16 字节倍数。
使用 jal ra, label 或 jalr ra, rs, imm。
该立即数按 16 字节缩放编码,因此只有 -512 到 496 之间的非零 16 字节倍数可编码。
C.ADDI16SP 仅在 nzimm 非零时有效;nzimm=0 的编码保留。