{
let rs1_val = X(rs1);
let rs2_val = X(rs2);
result : xlenbits = zeros();
foreach (i from 0 to (xlen_val - 1))
if rs2_val[i] == bitone then result = result ^ (rs1_val >> (xlen_val - i));
X(rd) = result;
RETIRE_SUCCESS
}
Exceptions
This instruction may result in the following synchronous exceptions: