xperm8

Crossbar permutation (bytes)

The xperm8 instruction operates on bytes. The xs1 register contains a vector of XLEN/8 8-bit elements. The xs2 register contains a vector of XLEN/8 8-bit indexes. The result is each element in xs2 replaced by the indexed element in xs1, or zero if the index into xs2 is out of bounds.

This instruction must have data-independent timing when extension Zkt is enabled.

Assembly format

xperm8 xd, xs1, xs2

Decode Variables

Bits<5> xs2 = $encoding[24:20];
Bits<5> xs1 = $encoding[19:15];
Bits<5> xd = $encoding[11:7];

Execution

XReg input1 = X[xs1];
XReg input2 = X[xs2];
XReg output = 0;
for (U32 i = 0; i < xlen(); i = i + 8) {
  XReg index = input2[i + 7:i];
  if (8 * index < xlen()) {
    output[i + 7:i] = input1[8 * index + 7:8 * index];
  }
}
X[xd] = output;

Encoding

svg

Defining extension

Access

M

Always

Containing profiles

  • Mandatory: None

  • Optional: None