5 b = VSR[VRB+32].dword[i].byte[k].bit[j]
6 VSR[VRT+32].dword[i].byte[j].bit[k] = b
13 if VSR[VRB+32].dword[i].bit[63-m]=1 then do
14 result = VSR[VRA+32].dword[i].bit[63-k]
15 VSR[VRT+32].dword[i].bit[63-m] = result
26 uint_xlen_t sbset(uint_xlen_t rs1, uint_xlen_t rs2) { int shamt = rs2 & (XLEN - 1);
28 return rs1 | (uint_xlen_t(1) << shamt);
29 uint_xlen_t sbclr(uint_xlen_t rs1, uint_xlen_t rs2) { int shamt = rs2 & (XLEN - 1);
31 return rs1 & ~(uint_xlen_t(1) << shamt);
32 uint_xlen_t sbinv(uint_xlen_t rs1, uint_xlen_t rs2) { int shamt = rs2 & (XLEN - 1);
34 return rs1 ^ (uint_xlen_t(1) << shamt);
35 uint_xlen_t sbext(uint_xlen_t rs1, uint_xlen_t rs2) { int shamt = rs2 & (XLEN - 1);
37 return 1 & (rs1 >> shamt);
43 uint64_t shuffle64_stage(uint64_t src, uint64_t maskL, uint64_t maskR, int N) { uint64_t x = src & ~(maskL | maskR);
45 x |= ((src << N) & maskL) | ((src >> N) & maskR); return x;
46 uint64_t shfl64(uint64_t rs1, uint64_t rs2) { uint64_t x = rs1;
49 if (shamt & 16) x = shuffle64_stage(x, 0x0000ffff00000000LL,
50 0x00000000ffff0000LL, 16); if (shamt & 8) x = shuffle64_stage(x, 0x00ff000000ff0000LL,
51 0x0000ff000000ff00LL, 8); if (shamt & 4) x = shuffle64_stage(x, 0x0f000f000f000f00LL,
52 0x00f000f000f000f0LL, 4); if (shamt & 2) x = shuffle64_stage(x, 0x3030303030303030LL,
53 0x0c0c0c0c0c0c0c0cLL, 2); if (shamt & 1) x = shuffle64_stage(x, 0x4444444444444444LL,
55 0x2222222222222222LL, 1);
56 uint64_t unshfl64(uint64_t rs1, uint64_t rs2) { uint64_t x = rs1;
59 if (shamt & 1) x = shuffle64_stage(x, 0x4444444444444444LL,
60 0x2222222222222222LL, 1); if (shamt & 2) x = shuffle64_stage(x, 0x3030303030303030LL,
61 0x0c0c0c0c0c0c0c0cLL, 2); if (shamt & 4) x = shuffle64_stage(x, 0x0f000f000f000f00LL,
62 0x00f000f000f000f0LL, 4); if (shamt & 8) x = shuffle64_stage(x, 0x00ff000000ff0000LL,
63 0x0000ff000000ff00LL, 8); if (shamt & 16) x = shuffle64_stage(x, 0x0000ffff00000000LL,
65 0x00000000ffff0000LL, 16);