C.SRLI

RISC-V C.SRLI 指令详解

指令手册C-type

对rd'进行逻辑右移。CB格式。

指令语法

c.srli rd', shamt
操作数说明
RV32/RV64 C 或 Zca;16位 CB 格式,rd'/rs1' 三位字段选择同一 x8-x15 源/目的。
shamt={inst[12],inst[6:2]};普通移位量 RV32 为 1-31,RV64 为 1-63。
逻辑右移在高位补零,写回同一寄存器。
零移位是 custom-use HINT;RV32 的 shamt[5]=1 指定给 custom extensions。
C压缩指令

扩展条件:RV32/RV64;需要 C 或 Zca。

指令行为说明

C.SRLI 使用 CB 格式,将 x8-x15 中的 rd' 逻辑右移 shamt 位,高位补零并写回同一寄存器;普通形式展开为 srli rd', rd', shamt。普通移位量在 RV32 为 1-31、RV64 为 1-63。shamt=0 是 HINT;RV32 的 shamt[5]=1 指定给 custom extensions。

C.SRLI 指令解析与执行动画

只显示官方定义的 16 位字段、条件与架构可见状态;不模拟流水线、缓存或时序。

c.srli,
执行环境

RV32/RV64;需要 C 或 Zca;重叠操作数读取同一旧值。

x10 <- 0x10000002
16 位编码字段
15..13
funct3
100
12
shamt[5]
0
11..10
funct2
00
9..7
rd'/rs1'
010
6..2
shamt[4:0]
00011
1..0
op
01
执行数据路径
CB 的 rd'/rs1'=010 → x10;shamt={inst[12],inst[6:2]}=3。
0x80000010 >> 3 = 0x10000002
x10 <- 0x10000002
尚未提交架构状态。

快速理解与检索要点

C.SRLI 将 x8-x15 中的 rd' 逻辑右移 shamt 位并写回同一寄存器;shamt=0 是 HINT。

CB 的 rd'/rs1' 三位字段映射到 x8-x15,shamt 由 bit 12 与 bit 6:2 组成。
RV32C 中 shamt[5]=1 指定给 custom extensions;shamt=0 的编码是 HINT。

常见使用场景

逻辑右移

RV32 C/Zca,x8=0x80000010:c.srli x8, 2 得到 x8=0x20000004,高位补零。

使用前检查清单

语法检查
  • RV32/RV64 C 或 Zca;16位 CB 格式,rd'/rs1' 三位字段选择同一 x8-x15 源/目的。
  • shamt={inst[12],inst[6:2]};普通移位量 RV32 为 1-31,RV64 为 1-63。
语义检查
  • 逻辑右移在高位补零,写回同一寄存器。
  • 零移位是 custom-use HINT;RV32 的 shamt[5]=1 指定给 custom extensions。

容易混淆 / 常见误区

rd' 同时是源和目的,只能选择 x8-x15。
shamt=0 是指定给 custom use 的 HINT;RV32 的 shamt[5]=1 不是标准右移。

常见问题

shamt=0 会怎样?

它是指定给 custom use 的 HINT;除 PC 推进和适用性能计数器外不改变架构状态。

最高移位位有什么限制?

RV32 的 shamt[5]=1 指定给 custom extensions;RV64 普通移位可用 1-63。