XPERM4

RISC-V XPERM4 指令详解

指令手册R-type

半字节查表置换(Zbkx)。

指令语法

xperm4 rd, rs1, rs2
操作数说明
目标寄存器 rd:存放运算结果的通用寄存器。
源寄存器 rs1:第一个操作数寄存器。
源寄存器 rs2:第二个操作数寄存器。
Zbkx位操作

指令行为说明

XPERM4(Zbkx)把 rs1 看作由 XLEN/4 个 4 位元素组成的表,把 rs2 的每个 4 位元素看作索引。对每个结果位置,若索引小于 XLEN/4,则从 rs1 中选取对应 4 位元素写入 rd;否则该结果元素写 0。

XPERM4 指令解析与执行动画

每个 4-bit rs2 元素是 rs1 元素表的索引;越界结果元素为零。

funct7
31..25
0010100
rs2
24..20
01100
rs1
19..15
01011
funct3
14..12
010
rd
11..7
01010
opcode
6..0
0110011

当前计算

0: 8 -> 0 0
1: 9 -> 0 0
2: A -> 0 0
3: B -> 0 0
4: C -> 0 0
5: D -> 0 0
6: E -> 0 0
7: F -> 0 0

x[rs2] indexes 8 entries in x[rs1]; result = 0x00000000

步骤: decode

显示当前指令的固定字段和寄存器字段。

x[a0] <- 0x00000000
1/4: decode

快速理解与检索要点

XPERM4 是 Zbkx 交叉寄存器置换指令;页面按官方 B 扩展的操作定义校对。

指令按 XLEN 宽度的 4 位元素操作。
不要把 rs2 索引取模;越界结果元素为 0。

常见使用场景

位操作

结合 «xperm4 a0, a1, a2» 等实际代码理解该场景。

寄存器内查表

结合 «xperm4 a0, a1, a2» 等实际代码理解该场景。

使用前检查清单

语法检查
  • 确认 rd、rs1、rs2(及 rs3)是合法 GPR。
  • 确认 funct3 与 funct7 字段编码正确。
语义检查
  • 确认结果是否会影响后续分支或地址计算。
  • 确认 rd 寄存器不会被其他指令覆盖。

容易混淆 / 常见误区

索引来自 rs2 的每个 4 位元素;rs1 是被查表的数据源。
索引超出寄存器中元素数量时结果元素为 0,不会取模回绕。
该操作按 XLEN 的 4 位元素数量确定有效索引范围。

常见问题

XPERM4 是否访问内存?

不访问。它只在整数寄存器内重排位字段或查表。

XPERM4 属于哪个扩展?

它属于 Zbkx 交叉置换扩展。