首页/指令库/无进位反序乘法
CLMULR

RISC-V CLMULR 指令详解

指令手册R-type

RV32/RV64 Zbc 无进位乘法,返回 2*XLEN 位乘积的 bits 2*XLEN-2:XLEN-1。

指令语法

clmulr rd, rs1, rs2

RV32/RV64 Zbc 1.0;语法 clmulr rd, rs1, rs2,没有 rs3 或立即数。

32 位 R 型:funct7=0000101、funct3=010、opcode=0110011;寄存器字段选择 x0–x31。

按 rs2 置位选择移位的 rs1 并 XOR 合并,结果取完整乘积 bits 2*XLEN-2:XLEN-1。源使用旧 XLEN 位模式;x0 读零、丢弃写回。

Zbc位操作

指令行为说明

clmulr 返回 2×XLEN 位无进位乘积的 bit 2×XLEN-2 至 XLEN-1,可用于加速 CRC 计算。

CLMULR 指令解析与执行动画

该模型按 GF(2) 的 XOR 部分积展示 ISA 可见结果;不表示加法进位、流水线或密码协议。

执行环境
32 位编码字段
31..25
funct7
0000101
24..20
rs2
01100
19..15
rs1
01011
14..12
funct3
010
11..7
rd
01010
6..0
opcode
0110011
执行数据路径

funct7=0000101, funct3=010

x10 <- pending

快速理解与检索要点

clmulr 返回 2×XLEN 位无进位乘积的 bit 2×XLEN-2 至 XLEN-1,可用于加速 CRC 计算。

RV32/RV64:Zbc 1.0;两个整数源按 XLEN 位模式读取,部分积以 XOR 合并。
从完整 2*XLEN 位无进位乘积选择 bits 2*XLEN-2:XLEN-1,不执行多项式模约减。
x0 读值为零,向 x0 的写回被丢弃;源和目的重叠时使用写回前的源值。

常见使用场景

位操作

RV32 Zbc,x11=0x80000000、x12=1:完整无进位乘积为0x0000000080000000,取 bits62:31,clmulr 写 x10=1。

使用前检查清单

语法检查
  • RV32/RV64 Zbc 1.0;语法 clmulr rd, rs1, rs2,没有 rs3 或立即数。
  • 32 位 R 型:funct7=0000101、funct3=010、opcode=0110011;寄存器字段选择 x0–x31。
语义检查
  • 按 rs2 置位选择移位的 rs1 并 XOR 合并,结果取完整乘积 bits 2*XLEN-2:XLEN-1。源使用旧 XLEN 位模式;x0 读零、丢弃写回。

容易混淆 / 常见误区

返回 bits 2*XLEN-2:XLEN-1,比 clmulh 的高半部选择向低位偏移一位;两种取位规则不能互换。

常见问题

clmulr 会访问内存吗?

不访问数据内存。它读取两个整数寄存器并向 rd 交付所选乘积位;rd=x0 时丢弃结果。

clmulr 是否按有符号数解释?

按 XLEN 位模式进行多项式无进位乘法,不使用有符号整数乘法的符号解释;部分积以 XOR 合并。