首页/指令库/无进位高位乘法
CLMULH

RISC-V CLMULH 指令详解

指令手册R-type

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

指令语法

clmulh rd, rs1, rs2

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

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

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

ZbcZbkc位操作加密

指令行为说明

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

CLMULH 指令解析与执行动画

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

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

funct7=0000101, funct3=011

x10 <- pending

快速理解与检索要点

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

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

常见使用场景

位操作

RV32 Zbc/Zbkc,x11=0x80000000、x12=2:完整无进位乘积为0x0000000100000000,clmulh 写 x10=1。

使用前检查清单

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

容易混淆 / 常见误区

MULH/MULHU 选择整数乘积高位;clmulh 选择 XOR 部分积构成的无进位乘积高位。

常见问题

clmulh 会访问内存吗?

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

clmulh 是否按有符号数解释?

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