首页/指令库/无进位乘法
CLMUL

RISC-V CLMUL 指令详解

指令手册R-type

RV32/RV64 Zbc/Zbkc 无进位乘法,返回 2*XLEN 位乘积的低 XLEN 位。

指令语法

clmul rd, rs1, rs2

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

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

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

ZbcZbkc位操作加密

指令行为说明

clmul 执行 GF(2) 无进位乘法并返回低 XLEN 位。

CLMUL 指令解析与执行动画

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

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

funct7=0000101, funct3=001

x10 <- pending

快速理解与检索要点

clmul 执行 GF(2) 无进位乘法并返回低 XLEN 位。

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

常见使用场景

位操作

RV32 Zbc/Zbkc,x11=0xB、x12=0xD:部分积 0xB XOR 0x2C XOR 0x58=0x7F,clmul 写 x10=0x7F。

使用前检查清单

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

容易混淆 / 常见误区

无进位乘法使用 XOR 合并部分积,不产生整数乘法进位。

常见问题

clmul 会访问内存吗?

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

clmul 是否按有符号数解释?

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