首页/指令库/向量-标量无进位乘法高位
VCLMULH.VX

RISC-V VCLMULH.VX 指令详解

指令手册V-type

向量-标量无进位乘法高位:GF(2)乘,rs1广播,返回高SEW位

指令语法

vclmulh.vx vd, vs2, rs1, vm

vd、vs2 选择 v0–v31,元素 EEW=SEW、EMUL=LMUL;rs1 选择 x0–x31,x0 恒为零。可选 v0.t 对应 vm=0;省略为 vm=1,没有立即数。

32 位 OP-V:funct6=001101,vm[25],vs2[24:20],rs1[19:15],funct3=110,vd[11:7],opcode=1010111。

Zvbc 依赖 Zve64x,仅定义 SEW=64,其他 SEW 编码保留。返回 GF(2) 无进位乘积的高 64 位(bits 127:64),部分积以 XOR 合并,不产生整数进位;X(rs1) 零扩展或截断到 64 位,RV32 不符号扩展。

启用向量状态并使用合法、支持的 vtype;同宽源/目的可重叠,源值取自写回前,LMUL>1 的组须对齐。掩码目标不得与 v0 重叠;v0 不能同时作 SEW 数据源和 EEW=1 掩码。

处理 vstart≤i<vl 的掩码启用元素;前置元素保持,非活跃/尾部按 vma/vta 保持或写全 1。vstart≥vl(含 vl=0)不更新任何目标。成功结束清零 vstart;实现可拒绝不支持的非零 vstart。

Zvbc向量密码位操作

指令行为说明

vclmulh.vx 是 Zvbc 的向量-标量无进位乘法高位。X(rs1) 零扩展或截断到 64 位后,与每个 vs2[i] 在 GF(2) 上作多项式乘法,返回 128 位乘积的高 64 位。仅当 SEW=64 时定义,其他 SEW 编码保留。

VCLMULH.VX 指令解析与执行动画

此有界模型只展示 lane 0 的 ISA 可见状态;不表示流水线、密码协议或未指定的非活跃/尾部值。

执行环境:启用本页扩展与向量状态,合法支持的 vtype,LMUL=1、VLEN≥64×SEW,仅展开 lane 0;vl=32/64 不复制 lane 0 到其他元素。SEW=64 要求 Zve64x。非零 vstart 假设实现支持,否则可产生非法指令异常。

有界执行环境
32 位 OP-V 编码字段
31..26
funct6
001101
25
vm
1
24..20
vs2
01000
19..15
rs1
01011
14..12
funct3
110
11..7
vd
00100
6..0
OP-V
1010111
执行数据路径

funct6=001101, funct3=110, Zvbc

v4[0] <- pending

快速理解与检索要点

vclmulh.vx 是 Zvbc 的向量-标量无进位乘法高位。X(rs1) 零扩展或截断到 64 位后,与每个 vs2[i] 在 GF(2) 上作多项式乘法,返回 128 位乘积的高 64 位。仅当 SEW=64 时定义,其他 SEW 编码保留。

标量与每个元素执行无进位乘法,返回高 SEW 位;SEW=64。
Zvbc 依赖 Zve64x,仅定义 SEW=64;其他 SEW 编码保留。
仅处理 vstart≤i<vl 且掩码启用的元素。vstart≥vl(含 vl=0)不更新任何目标元素;成功结束将 vstart 清零。
标量 X(rs1) 零扩展或截断到 64 位;RV32 不作符号扩展。x0 恒为零。

向量执行上下文

vd、vs2 选择 v0–v31,元素 EEW=SEW、EMUL=LMUL;rs1 选择 x0–x31,x0 恒为零。可选 v0.t 对应 vm=0;省略为 vm=1,没有立即数。

32 位 OP-V:funct6=001101,vm[25],vs2[24:20],rs1[19:15],funct3=110,vd[11:7],opcode=1010111。

Zvbc 依赖 Zve64x,仅定义 SEW=64,其他 SEW 编码保留。返回 GF(2) 无进位乘积的高 64 位(bits 127:64),部分积以 XOR 合并,不产生整数进位;X(rs1) 零扩展或截断到 64 位,RV32 不符号扩展。

启用向量状态并使用合法、支持的 vtype;同宽源/目的可重叠,源值取自写回前,LMUL>1 的组须对齐。掩码目标不得与 v0 重叠;v0 不能同时作 SEW 数据源和 EEW=1 掩码。

处理 vstart≤i<vl 的掩码启用元素;前置元素保持,非活跃/尾部按 vma/vta 保持或写全 1。vstart≥vl(含 vl=0)不更新任何目标。成功结束清零 vstart;实现可拒绝不支持的非零 vstart。

The RISC-V Instruction Set Manual, Volume I: Unprivileged Architecture — Version 20260120, Chapter 33

常见使用场景

逐元素位运算示例

启用本页扩展与向量状态,合法 vtype、LMUL=1、VLEN≥128、vl=1、vstart=0、无掩码;SEW=64, v8[0]=0x8000000000000000, x11=0x2: (x^63 × x)[127:64] = 0x1,写入 v4[0]。

使用前检查清单

语法检查
  • vd、vs2 选择 v0–v31,元素 EEW=SEW、EMUL=LMUL;rs1 选择 x0–x31,x0 恒为零。可选 v0.t 对应 vm=0;省略为 vm=1,没有立即数。
  • 32 位 OP-V:funct6=001101,vm[25],vs2[24:20],rs1[19:15],funct3=110,vd[11:7],opcode=1010111。
语义检查
  • Zvbc 依赖 Zve64x,仅定义 SEW=64,其他 SEW 编码保留。返回 GF(2) 无进位乘积的高 64 位(bits 127:64),部分积以 XOR 合并,不产生整数进位;X(rs1) 零扩展或截断到 64 位,RV32 不符号扩展。
  • 启用向量状态并使用合法、支持的 vtype;同宽源/目的可重叠,源值取自写回前,LMUL>1 的组须对齐。掩码目标不得与 v0 重叠;v0 不能同时作 SEW 数据源和 EEW=1 掩码。
  • 处理 vstart≤i<vl 的掩码启用元素;前置元素保持,非活跃/尾部按 vma/vta 保持或写全 1。vstart≥vl(含 vl=0)不更新任何目标。成功结束清零 vstart;实现可拒绝不支持的非零 vstart。

容易混淆 / 常见误区

SEW=64。返回高 64 位。

常见问题

VCLMULH.VX 是否总能带 v0.t 掩码?

可按语法使用 v0.t;省略时 vm=1。vm=0 时 v0 作为 EEW=1 掩码,普通数据源或目标不能同时重用 v0,否则编码保留。

VCLMULH.VX 的元素宽度由什么决定?

Zvbc 依赖 Zve64x,仅定义 SEW=64;其他 SEW 编码保留。