Instruction
VPBLENDMB
Picks each byte from the second source where a mask bit is set, otherwise from the first.
- Extensions
- Forms
- 6 (6 EVEX)
- Data
- Intel XED v2026.08.23
VPBLENDMB builds each byte of its destination from one of two sources,
chosen by a mask register: the second source where the mask bit is
set, the first where it is clear, or zero there with {z}. It is the
byte form of VPBLENDMD, whose page sets it against
masked moves and the older blends, and needs AVX512BW. One bit per
byte makes the mask as wide as the vector has bytes, 16, 32 or 64
bits, so a ZMM blend reads the whole mask register (filled with
KMOVQ). As for VPBLENDMW, there is
no broadcast form.
Recorded on Zen 5
- All 64 bits. In
vpblendmb zmm0{k4}, zmm31, zmmword ptr [mem]K4 held 4E432F055A6A6DE5h: its low byte, E5h, took byte 0 from memory and byte 1 from ZMM31, and its high byte, 4Eh, took bytes 57 to 59 and 62 from memory. - One register three times.
vpblendmb zmm5{k6}, zmm5, zmm5left ZMM5 as it was. With{z},vpblendmb ymm5{k2}{z}, ymm5, ymm5acted as a zero-masked move: it cleared the 12 bytes whose bits are clear in FCB6F2C9h, the low 32 bits of K2, and bits 256 and up. - No mask copies the second source:
{evex} vpblendmb ymm0, ymm31, ymmword ptr [mem]loaded memory.
In compiled code
GCC 14 and Clang 23 at -O2 with -march=x86-64-v4 compile
_mm512_mask_blend_epi8 as they do the word form: a masked
VMOVDQU8 when the result may replace the first
operand or the second is in memory, VPBLENDMB otherwise. For
o[i] = a[i] > b[i] ? c[i] : 5 over uint8_t arrays, both compare
with VPCMPUB, which Clang prints as VPCMPNLEUB, and
blend a vector of fives with c[i] read from memory by VPBLENDMB.
With -march=x86-64-v3 there is no unsigned byte compare: GCC builds
a selector vector with VPSUBUSB and VPCMPEQB, Clang with VPMINUB and
VPCMPEQB, and both blend with VPBLENDVB, which
takes the top bit of each selector byte.
AMD’s Zen 5 latency spreadsheet gives VPBLENDMB one cycle and four per cycle on any of the four vector pipes, as VPBLENDMD. The 6 recorded cases cover the register and memory forms at all three widths.
Forms
| Instruction | Encoding | Requires |
|---|---|---|
VPBLENDMB xmm {k}{z}, xmm, xmm
VPBLENDMB_XMMu8_MASKmskw_XMMu8_XMMu8_AVX512 | EVEX.128.66.0F38.W0 66 /r | AVX10.1 or AVX512BW + AVX512VL |
VPBLENDMB xmm {k}{z}, xmm, m128
VPBLENDMB_XMMu8_MASKmskw_XMMu8_MEMu8_AVX512 | EVEX.128.66.0F38.W0 66 /r | AVX10.1 or AVX512BW + AVX512VL |
VPBLENDMB ymm {k}{z}, ymm, ymm
VPBLENDMB_YMMu8_MASKmskw_YMMu8_YMMu8_AVX512 | EVEX.256.66.0F38.W0 66 /r | AVX10.1 or AVX512BW + AVX512VL |
VPBLENDMB ymm {k}{z}, ymm, m256
VPBLENDMB_YMMu8_MASKmskw_YMMu8_MEMu8_AVX512 | EVEX.256.66.0F38.W0 66 /r | AVX10.1 or AVX512BW + AVX512VL |
VPBLENDMB zmm {k}{z}, zmm, zmm
VPBLENDMB_ZMMu8_MASKmskw_ZMMu8_ZMMu8_AVX512 | EVEX.512.66.0F38.W0 66 /r | AVX10.1 or AVX512BW |
VPBLENDMB zmm {k}{z}, zmm, m512
VPBLENDMB_ZMMu8_MASKmskw_ZMMu8_MEMu8_AVX512 | EVEX.512.66.0F38.W0 66 /r | AVX10.1 or AVX512BW |
Latency and throughput
| Model | xmm {k}{z}, xmm, xmmno maskymm {k}{z}, ymm, ymmno mask | xmm {k}{z}, xmm, xmmwith a mask, zeroingymm {k}{z}, ymm, ymmwith a mask, zeroing | xmm {k}{z}, xmm, m128no mask | xmm {k}{z}, xmm, m128with a mask, zeroing | ymm {k}{z}, ymm, m256no mask | ymm {k}{z}, ymm, m256with a mask, zeroing | zmm {k}{z}, zmm, zmmno mask | zmm {k}{z}, zmm, zmmwith a mask, zeroing | zmm {k}{z}, zmm, m512no mask | zmm {k}{z}, zmm, m512with a mask, zeroing |
|---|---|---|---|---|---|---|---|---|---|---|
| Skylake-SP, Ice Lake | 1 / 0.33p015 | 1 / 0.33p015 | 7 / 0.5p015 | 7 / 0.5p015 | 8 / 0.5p015 | 8 / 0.5p015 | 2 / 0.5p05 | 2 / 0.5p05 | 8 / 0.5p015 | 8 / 0.5p015 |
| Sapphire Rapids | 1 / 0.33p015 | 3 / 0.33p015 | 8 / 0.33p015 | 11 / 0.33p015 | 9 / 0.33p015 | 11 / 0.33p015 | 1 / 0.5p05 | 3 / 0.5p05 | 9 / 0.5p05 | 11 / 0.5p05 |
| Zen 4 | 1 / 0.51FP0 FP3 | 1 / 0.51FP0 FP3 | 8 / 0.5FP0 FP3 | 8 / 0.5FP0 FP3 | 8 / 0.5FP0 FP3 | 8 / 0.5FP0 FP3 | 1 / 1FP0 FP3 | 1 / 1FP0 FP3 | 8 / 1FP0 FP3 | 8 / 1FP0 FP3 |
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.
merging, {k1}
zeroing, {k1}{z}
Example mask k1 = 0xB2. Every byte of the wider forms works alike.
With merging: result bytes 15 to 0: a15, a14, a13, a12, a11, a10, a9, a8, b7, a6, b5, b4, a3, a2, b1, a0.
With zeroing: result bytes 15 to 0: 0, 0, 0, 0, 0, 0, 0, 0, b7, 0, b5, b4, 0, 0, b1, 0.
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):
if k1[i]:
zmm1.b[i] = src3.b[i]
elif zeroing:
zmm1.b[i] = 0
else:
zmm1.b[i] = zmm2.b[i]
# zmm1 is zeroed from bit VL upRun on AMD Zen 5 (EPYC 9645): 6 cases.
Operands
| Operand | Kind | Action |
|---|---|---|
VPBLENDMB xmm {k}{z}, xmm, xmm/m128 VPBLENDMB ymm {k}{z}, ymm, ymm/m256 VPBLENDMB zmm {k}{z}, zmm, zmm/m512 | ||
xmm, ymm, zmm | explicit | write |
{k} | explicit | read (selector) |
xmm, ymm, zmm | explicit | read |
xmm/m128, ymm/m256, zmm/m512 | explicit | read |
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
- opmask selects the source
- Memory forms
- memory fault suppression
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.
| ISA set | CPUID | Processors |
|---|---|---|
AVX512BW_128 | AVX10.1 or AVX512BW + AVX512VL | Cannon Lake, Ice Lake (client), Tiger Lake, Nova Lake, Skylake-SP, Cascade Lake, Cooper Lake, Ice Lake (server), Sapphire Rapids, Emerald Rapids, Granite Rapids, Diamond Rapids, Zen 4, Zen 5, Zen 6 |
AVX512BW_256 | Same as AVX512BW_128 | Same as AVX512BW_128 |
AVX512BW_512 | AVX10.1 or AVX512BW | Same as AVX512BW_128 |
More AVX10.1 instructions
- VPABSW
- VPACKSSDW
- VPACKSSWB
- VPACKUSDW
- VPACKUSWB
- VPADDB
- VPADDD
- VPADDQ
- VPADDSB
- VPADDSW
- VPADDUSB
- VPADDUSW
- VPADDW
- VPALIGNR
- VPANDD
- VPANDND
- VPANDNQ
- VPANDQ
- VPAVGB
- VPAVGW
- VPBLENDMD
- VPBLENDMQ
- VPBLENDMW
- VPBROADCASTB
- VPBROADCASTD
- VPBROADCASTMB2Q
- VPBROADCASTMW2D
- VPBROADCASTQ
- VPBROADCASTW
- VPCLMULQDQ
- VPCMPB
- VPCMPD
- VPCMPEQB
- VPCMPEQD
- VPCMPEQQ
- VPCMPEQW
- VPCMPGTB
- VPCMPGTD
- VPCMPGTQ
- VPCMPGTW
Sources
- Intel XED v2026.08.23 (commit
0bcb6237345c): forms, encodings, operands, flags, exception classes, attributes, ISA sets, CPUID bits and chip model. - The CPU data of x86-64.net: Zen 3 to Zen 6, from GCC’s
-marchfeature sets and AMD’s Processor Programming References, which the page of each processor cites. - LLVM 23.1.2's x86 scheduling models (commit
85ac56026243): the latency, reciprocal throughput and ports of each form, as llvm-mca reports them. - Intel Advanced Vector Extensions 10.2 Architecture Specification, revision 7.0 (361050-007, April 2026)
- Intel 64 and IA-32 Architectures Software Developer's Manual, Volume 2 (325383-093, September 2026): Volume 2C, page 5-437 (VPBLENDMB/
VPBLENDMW) - 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 timings come from LLVM's scheduling models, part of the LLVM Project, licensed under the Apache License 2.0 with LLVM Exceptions. The text is our own.