Extensions
Forms
6 (6 EVEX)
Data
Intel XED v2026.08.23

VPSHUFBITQMB gathers single bits into a mask register. Each byte of the second source is an index: byte i picks one bit of quadword i / 8 of the first source, and that bit becomes bit i of the destination mask. Eight index bytes share each quadword, so the 64 bytes of a zmm register pick 8 arbitrary bits from each of the 8 quadwords, 64 mask bits in all. It belongs to AVX512_BITALG with VPOPCNTB and VPOPCNTW, and its intrinsic is _mm512_bitshuffle_epi64_mask(data, indices).

Indices and the mask

Only the low 6 bits of an index count, 0 to 63 within its quadword; the two above are ignored. In a case recorded on Zen 5 with the quadword 8000000000000001h, the index FFh took bit 63, as 3Fh does. The data is the first source, always a register, and the indices are the operand that may be in memory, without embedded broadcast.

The result is a mask, so the write mask works as it does for VPCMPD: a bit the write mask leaves out becomes 0 instead of keeping its old value, which makes k1{k2} the AND of k2 and the gathered bits, and the bits above 16 or 32 of the xmm and ymm forms are cleared.

Uses

  • A bit permutation of a 64-bit value: broadcast it to all eight quadwords with VPBROADCASTQ, gather with 64 indices that list the source bit of each result bit, and move the mask to a general register with KMOVQ. Any permutation, repetition or selection of bits takes these three instructions, where PEXT can only pack selected bits in their original order.
  • Eight bit fields at once: with different data in each quadword, one instruction tests a chosen bit in each of 64 bitmaps, or picks the same eight positions out of eight words, and the mask can drive masked stores or VPCOMPRESSB directly.

Neither GCC 14 nor Clang 23 forms the instruction from plain C; it comes from the intrinsics.

AMD’s Zen 5 guide lists VPSHUFBITQMB with a latency of 3, 4 and 6 cycles for xmm, ymm and zmm sources; the register forms are one macro-op and the memory forms two.

Forms

Every encoding of VPSHUFBITQMB that Intel XED knows, one row per XED instruction form (iform). How to read the notation.
InstructionEncodingRequires
VPSHUFBITQMB k {k}, xmm, xmm VPSHUFBITQMB_MASKmskw_MASKmskw_XMMu64_XMMu8_AVX512EVEX.128.66.0F38.W0 8F /rAVX10.1 or AVX512_BITALG + AVX512VL
VPSHUFBITQMB k {k}, xmm, m128 VPSHUFBITQMB_MASKmskw_MASKmskw_XMMu64_MEMu8_AVX512EVEX.128.66.0F38.W0 8F /rAVX10.1 or AVX512_BITALG + AVX512VL
VPSHUFBITQMB k {k}, ymm, ymm VPSHUFBITQMB_MASKmskw_MASKmskw_YMMu64_YMMu8_AVX512EVEX.256.66.0F38.W0 8F /rAVX10.1 or AVX512_BITALG + AVX512VL
VPSHUFBITQMB k {k}, ymm, m256 VPSHUFBITQMB_MASKmskw_MASKmskw_YMMu64_MEMu8_AVX512EVEX.256.66.0F38.W0 8F /rAVX10.1 or AVX512_BITALG + AVX512VL
VPSHUFBITQMB k {k}, zmm, zmm VPSHUFBITQMB_MASKmskw_MASKmskw_ZMMu64_ZMMu8_AVX512EVEX.512.66.0F38.W0 8F /rAVX10.1 or AVX512_BITALG
VPSHUFBITQMB k {k}, zmm, m512 VPSHUFBITQMB_MASKmskw_MASKmskw_ZMMu64_MEMu8_AVX512EVEX.512.66.0F38.W0 8F /rAVX10.1 or AVX512_BITALG

Latency and throughput

What the scheduling models of LLVM 23.1.2 give for each form, not measurements: latency / reciprocal throughput in cycles, the ports under them. A row is a model, or models that agree; a dash, a form that its processors lack. Memory forms: latency from the address, ports without the load and store units. Which processors each model covers.
Modelk {k}, xmm, xmmno maskk {k}, xmm, xmmwith a maskk {k}, xmm, m128no maskk {k}, xmm, m128with a maskk {k}, ymm, ymmno maskk {k}, ymm, ymmwith a maskk {k}, ymm, m256no maskk {k}, ymm, m256with a maskk {k}, zmm, zmmno maskk {k}, zmm, zmmwith a maskk {k}, zmm, m512no maskk {k}, zmm, m512with a mask
Ice Lake5 / 0.5p015 / 0.5p0111 / 0.5p0111 / 0.5p015 / 0.5p015 / 0.5p0112 / 0.5p0112 / 0.5p015 / 0.5p055 / 0.5p0512 / 0.5p0512 / 0.5p05
Sapphire Rapids6 / 1p058 / 1p056 / 1p058 / 1p056 / 1p058 / 1p056 / 1p058 / 1p056 / 1p058 / 1p056 / 1p058 / 1p05
Zen 42 / 11FP0 FP12 / 11FP0 FP110 / 0.5FP0 FP310 / 0.5FP0 FP33 / 0.52FP0 FP33 / 0.52FP0 FP310 / 0.5FP0 FP310 / 0.5FP0 FP33 / 1FP0 FP33 / 1FP0 FP310 / 1FP0 FP310 / 1FP0 FP3
  1. Zen 4 model: AMD's spreadsheets give latency 3 for Zen 4 and Zen 5 (AMD 57647, row 2878; AMD 58455, row 937).
  2. Zen 4 model: AMD's spreadsheets give latency 4 for Zen 4 and Zen 5 (AMD 57647, row 2880; AMD 58455, row 939).

Data flow

Where the elements of the sources go, element 0 on the right; results that depend on a control value are drawn for an example. How to read.

Bits picked from quadwords: bit i of k1 is the bit of the quadword of zmm2 around element i that the control byte in the same place of zmm3 numbers (its low 6 bits); the bits of k1 above the elements are cleared.
VPSHUFBITQMB with example control bytesWith the example control bytes, result bit i is bit c of quadword 0 of zmm2, c being its control byte. Result bits 7 to 0: bit 63, 0 (bit 6 of k2 is 0), bit 47, bit 40, bit 5, bit 21, bit 12, bit 3.01234567zmm2a11111110k2bit 3bit 12bit 21bit 5bit 40bit 47bit 630k131221540473363zmm3or m512

Example control bytes in zmm3 (element 0 on the right), as numbers. Where a bit of the write mask k2 is 0, the result bit is 0. Shown for quadword 0 of zmm2 and zmm3, with a tick between bits; every quadword works alike, bits 8q+7 to 8q of k1 from quadword q.

With the example control bytes, result bit i is bit c of quadword 0 of zmm2, c being its control byte. Result bits 7 to 0: bit 63, 0 (bit 6 of k2 is 0), bit 47, bit 40, bit 5, bit 21, bit 12, bit 3.

Operation

What the forms do, in pseudocode that our tests run against results recorded on real processors. How to read.

for i in range(VL // 8):         # bit i, of quadword i // 8
    if k2[i]:                    # 1 without a write mask
        c = src3.b[i] & 63       # the bit it takes
        k1[i] = zmm2.q[i // 8] >> c & 1
    else:
        k1[i] = 0                # never merged
# the other bits of k1 are cleared

Run on AMD Zen 5 (EPYC 9645): 14 cases.

Operands

What each form reads and writes, as Intel XED records it: the operands of its syntax, in order, and the implicit ones that the syntax does not name. How to read.
OperandKindAction
VPSHUFBITQMB k {k}, xmm, xmm/m128 VPSHUFBITQMB k {k}, ymm, ymm/m256 VPSHUFBITQMB k {k}, zmm, zmm/m512
kexplicitwrite (masked)
{k}explicitread (write mask)
xmm, ymm, zmmexplicitread
xmm/m128, ymm/m256, zmm/m512explicitread

Flags

None: XED records no flag that the forms test or change.

Exceptions

The exception class is XED's name for the set of exception conditions that a form follows. How to read.

All forms
AVX512-E4

Attributes

What else XED records about the forms. How to read.

All forms
write masking
Memory forms
memory fault suppression

Intrinsics

The C intrinsics of Clang 23.1.2 that compile to VPSHUFBITQMB, each with the form it compiles to and the Clang options it needs. The forms come from compiling every intrinsic and decoding the result with Intel XED; all intrinsics A–Z explains the method.

IntrinsicCompiles to
_mm_bitshuffle_epi64_mask __mmask16 _mm_bitshuffle_epi64_mask(__m128i __A, __m128i __B)

VPSHUFBITQMB k, xmm, xmm EVEX.128 -mavx512vl -mavx512bitalg

_mm_mask_bitshuffle_epi64_mask __mmask16 _mm_mask_bitshuffle_epi64_mask(__mmask16 __U, __m128i __A, __m128i __B)

VPSHUFBITQMB k, xmm, xmm EVEX.128 -mavx512vl -mavx512bitalg

_mm256_bitshuffle_epi64_mask __mmask32 _mm256_bitshuffle_epi64_mask(__m256i __A, __m256i __B)

VPSHUFBITQMB k, ymm, ymm EVEX.256 -mavx512vl -mavx512bitalg

_mm256_mask_bitshuffle_epi64_mask __mmask32 _mm256_mask_bitshuffle_epi64_mask(__mmask32 __U, __m256i __A, __m256i __B)

VPSHUFBITQMB k, ymm, ymm EVEX.256 -mavx512vl -mavx512bitalg

_mm512_bitshuffle_epi64_mask __mmask64 _mm512_bitshuffle_epi64_mask(__m512i __A, __m512i __B)

VPSHUFBITQMB k, zmm, zmm EVEX.512 -mavx512bitalg

_mm512_mask_bitshuffle_epi64_mask __mmask64 _mm512_mask_bitshuffle_epi64_mask(__mmask64 __U, __m512i __A, __m512i __B)

VPSHUFBITQMB k, zmm, zmm EVEX.512 -mavx512bitalg

CPUID and processors

Each form belongs to an XED ISA set. A form can be used when the processor reports every CPUID bit of one of its ISA set's alternatives.

CPUID requirements and processors of the XED ISA sets above. Alternatives are separated by “or”; processors follow XED’s chip model, whose AMD processors end with Zen 2, and the CPU data of this site for Zen 3 to Zen 6.
ISA setCPUIDProcessors
AVX512_BITALG_128

AVX10.1
CPUID.(EAX=07H,ECX=1):EDX[19] AVX10
CPUID.(EAX=24H,ECX=0):EBX[7:0] ≥ 1 AVX10 version

or

AVX512_BITALG + AVX512VL
CPUID.(EAX=07H,ECX=0):ECX[12] AVX512_BITALG
CPUID.(EAX=07H,ECX=0):EBX[31] AVX512VL

Ice Lake (client), Tiger Lake, Nova Lake, Ice Lake (server), Sapphire Rapids, Emerald Rapids, Granite Rapids, Diamond Rapids, Zen 4, Zen 5, Zen 6
AVX512_BITALG_256
Same as AVX512_BITALG_128Same as AVX512_BITALG_128
AVX512_BITALG_512

AVX10.1
CPUID.(EAX=07H,ECX=1):EDX[19] AVX10
CPUID.(EAX=24H,ECX=0):EBX[7:0] ≥ 1 AVX10 version

or

AVX512_BITALG
CPUID.(EAX=07H,ECX=0):ECX[12] AVX512_BITALG

Same as AVX512_BITALG_128

More AVX10.1 instructions

All 686 AVX10.1 instructions

Sources

  1. Intel XED v2026.08.23 (commit 0bcb6237345c): forms, encodings, operands, flags, exception classes, attributes, ISA sets, CPUID bits and chip model.
  2. The CPU data of x86-64.net: Zen 3 to Zen 6, from GCC’s -march feature sets and AMD’s Processor Programming References, which the page of each processor cites.
  3. Clang's x86 intrinsic headers, LLVM 23.1.2 (commit 85ac56026243): the intrinsics, their signatures and doc comments, and the Clang of that release, which compiled each of them.
  4. LLVM 23.1.2's x86 scheduling models (commit 85ac56026243): the latency, reciprocal throughput and ports of each form, as llvm-mca reports them.
  5. Intel Advanced Vector Extensions 10.2 Architecture Specification, revision 7.0 (361050-007, April 2026)
  6. Intel 64 and IA-32 Architectures Software Developer's Manual, Volume 2 (325383-093, September 2026): Volume 2C, page 5-634 (VPSHUFBITQMB)
  7. Software Optimization Guide for the AMD Zen5 Microarchitecture (58455, rev. 1.00, August 2024), Wayback Machine copy of AMD's ZIP

The tables are derived from Intel XED, Copyright Intel Corporation, licensed under the Apache License 2.0; x86-64.net converted and reformatted them. The intrinsics and their signatures come from Clang and the timings from LLVM's scheduling models, both part of the LLVM Project, licensed under the Apache License 2.0 with LLVM Exceptions. The text is our own.