Instruction
VSHUFF32X4
Picks 128-bit blocks of singles from the two sources as an immediate selects, the lower half of the result from the first source.
- Extensions
- Forms
- 4 (4 EVEX)
- Data
- Intel XED v2026.08.23
VSHUFF32X4 is the floating-point name of VSHUFI32X4: it moves 128-bit blocks of singles with the immediate that VSHUFI64X2’s page explains, the low two blocks of the result from the first source and the high two from the second, and masks single by single. It moves bits without arithmetic, so nothing in MXCSR changes; all 4 cases recorded on Zen 5 left it at 1F80h.
Recorded on Zen 5
- One register three times.
vshuff32x4 zmm5{k6}, zmm5, zmm5, 0x74built blocks 0 to 3 from blocks 0, 1, 3 and 1 of ZMM5. K6’s low 16 bits, 43A4h, let only singles 2, 5, 7 to 9 and 14 through, so singles 8 and 9 took block 3’s first two, single 14 block 1’s third, and the rest of ZMM5 kept its value. - Broadcast. In
vshuff32x4 zmm9{k3}, zmm9, dword bcst [mem], 0x20the second source is one single repeated, so blocks 2 and 3, chosen from it, held that single wherever AAEBh, the low 16 bits of K3, had a bit set. - At 256 bits only bits 1:0 count. With 11h,
vshuff32x4 ymm1{k1}, ymm2, ymmword ptr [mem], 0x11chose the high block of YMM2 for the low half and, bit 1 being clear, the low block of memory for the high half; A0h in K1 let only singles 5 and 7 of it through.
In compiled code
GCC 14 and Clang 23 at -O2 with -march=x86-64-v4 treat the ps
intrinsics as the integer ones: both keep VSHUFF32X4 for
_mm512_mask_shuffle_f32x4 and its zero-masked form. Unmasked, GCC
keeps it for _mm512_shuffle_f32x4 and for block moves of float
vectors written with __builtin_shufflevector, while Clang emits
VSHUFF64X2, VINSERTF64X4
when the result is the low halves of the two sources (0x44), and
VPERM2F128 for the 256-bit form.
AMD’s Zen 5 latency spreadsheet gives VSHUFF32X4 3 cycles at 256 bits and 5 at 512, two per cycle on pipes FP1 and FP2, as VSHUFI32X4.
Forms
| Instruction | Encoding | Requires |
|---|---|---|
VSHUFF32X4 zmm {k}{z}, zmm, zmm, imm8
VSHUFF32X4_ZMMf32_MASKmskw_ZMMf32_ZMMf32_IMM8_AVX512 | EVEX.512.66.0F3A.W0 23 /r ib | AVX10.1 or AVX512F |
VSHUFF32X4 zmm {k}{z}, zmm, m512/m32bcst, imm8
VSHUFF32X4_ZMMf32_MASKmskw_ZMMf32_MEMf32_IMM8_AVX512 | EVEX.512.66.0F3A.W0 23 /r ib | AVX10.1 or AVX512F |
VSHUFF32X4 ymm {k}{z}, ymm, ymm, imm8
VSHUFF32X4_YMMf32_MASKmskw_YMMf32_YMMf32_IMM8_AVX512 | EVEX.256.66.0F3A.W0 23 /r ib | AVX10.1 or AVX512F + AVX512VL |
VSHUFF32X4 ymm {k}{z}, ymm, m256/m32bcst, imm8
VSHUFF32X4_YMMf32_MASKmskw_YMMf32_MEMf32_IMM8_AVX512 | EVEX.256.66.0F3A.W0 23 /r ib | AVX10.1 or AVX512F + AVX512VL |
Latency and throughput
| Model | zmm {k}{z}, zmm, zmm, imm8ymm {k}{z}, ymm, ymm, imm8 | zmm {k}{z}, zmm, m512/m32bcst, imm8ymm {k}{z}, ymm, m256/m32bcst, imm8 |
|---|---|---|
| Skylake-SP, Ice Lake | 3 / 1p5 | 10 / 1p5 |
| Sapphire Rapids | 3 / 1p5 | 11 / 1p5 |
| Zen 4 | 2 / 11FP1 | 9 / 1FP1 |
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.
Example: imm8 = 0x4E (0100 1110 in binary). Shown for the zmm form; the ymm form works the same on 8 singles. The forms write under a mask: where its bit is 0, the element keeps its old value, or zeroes it with {z}. With m32bcst, one single from memory stands for every element of zmm3.
With imm8 = 0x4E, result singles 15 to 0: b7, unchanged (bit 14 of k1 is 0), b5, b4, b3, b2, b1, b0, a15, a14, a13, a12, a11, a10, a9, a8.
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 // 32):
lane = i // 4
if VL == 256:
x = imm8 >> lane & 1 # one bit per lane
else:
x = imm8 >> 2 * lane & 3 # two bits per lane
j = x * 4 + i % 4
if k1[i]:
if lane < VL // 256:
zmm1.d[i] = zmm2.d[j]
else:
zmm1.d[i] = src3.d[j]
elif zeroing:
zmm1.d[i] = 0
# else: zmm1.d[i] keeps its value
# m32bcst: src3.f32[i] is the m32 for every i
# zmm1 is zeroed from bit VL upRun on AMD Zen 5 (EPYC 9645): 4 cases.
Operands
| Operand | Kind | Action |
|---|---|---|
VSHUFF32X4 ymm {k}{z}, ymm, ymm/m256/m32bcst, imm8 VSHUFF32X4 zmm {k}{z}, zmm, zmm/m512/m32bcst, imm8 | ||
ymm, zmm | explicit | write (masked) |
{k} | explicit | read (write mask) |
ymm, zmm | explicit | read |
ymm/m256/m32bcst, zmm/m512/m32bcst | explicit | read |
imm8 | 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-E4NF
Attributes
What else XED records about the forms. How to read.
- All forms
- write masking
- Memory forms
- embedded broadcast (tuple Full)
Intrinsics
The C intrinsics of Clang 23.1.2 that compile to VSHUFF32X4, 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.
| Intrinsic | Compiles to |
|---|---|
_mm512_broadcast_f32x4
__m512 _mm512_broadcast_f32x4(__m128 __A) |
|
_mm512_shuffle_f32x4
__m512 _mm512_shuffle_f32x4(__m512 A, __m512 B, const int imm) |
|
_mm512_mask_broadcast_f32x4
__m512 _mm512_mask_broadcast_f32x4(__m512 __O, __mmask16 __M, __m128 __A) |
|
_mm512_mask_shuffle_f32x4
__m512 _mm512_mask_shuffle_f32x4(__m512 W, __mmask16 U, __m512 A, __m512 B, const int imm) |
|
_mm512_maskz_broadcast_f32x4
__m512 _mm512_maskz_broadcast_f32x4(__mmask16 __M, __m128 __A) |
|
_mm512_maskz_shuffle_f32x4
__m512 _mm512_maskz_shuffle_f32x4(__mmask16 U, __m512 A, __m512 B, const int imm) |
|
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 |
|---|---|---|
AVX512F_512 | AVX10.1 or AVX512F | 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, Knights Landing, Knights Mill, Zen 4, Zen 5, Zen 6 |
AVX512F_256 | AVX10.1 or AVX512F + 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 |
More AVX10.1 instructions
- VRNDSCALEPS
- VRNDSCALESD
- VRNDSCALESH
- VRNDSCALESS
- VRSQRT14PD
- VRSQRT14PS
- VRSQRT14SD
- VRSQRT14SS
- VRSQRTPH
- VRSQRTSH
- VSCALEFPD
- VSCALEFPH
- VSCALEFPS
- VSCALEFSD
- VSCALEFSH
- VSCALEFSS
- VSCATTERDPD
- VSCATTERDPS
- VSCATTERQPD
- VSCATTERQPS
- VSHUFF64X2
- VSHUFI32X4
- VSHUFI64X2
- VSHUFPD
- VSHUFPS
- VSQRTPD
- VSQRTPH
- VSQRTPS
- VSQRTSD
- VSQRTSH
- VSQRTSS
- VSUBPD
- VSUBPH
- VSUBPS
- VSUBSD
- VSUBSH
- VSUBSS
- VUCOMISD
- VUCOMISH
- VUCOMISS
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. - 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. - 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-750 (VSHUFF32x4/
VSHUFF64x2/ VSHUFI32x4/ VSHUFI64x2) - 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.