Introduction
AVX10 is Intel’s name for AVX-512 from 2023 on. AVX-512 had grown into about twenty subsets (Foundation, BW, DQ, VL, FP16 and the rest), each with its own CPUID bit, and processors had different mixes of them. AVX10 replaces them with a single version number: each version has every instruction of the versions before it. The instructions are encoded with EVEX, as AVX-512’s are, and use the same state: the vector registers xmm0–xmm31, ymm0–ymm31 and zmm0–zmm31, the mask registers k0–k7, and MXCSR. Intel announced AVX10 in July 2023.
A program checks CPUID.(EAX=07H, ECX=1):EDX[bit 19] for AVX10, then reads the version from CPUID.(EAX=24H, ECX=0):EBX[bits 7:0].
AVX10.1
AVX10.1 has no instructions of its own. It is the AVX-512 of the Xeon processors code-named Sapphire Rapids, AVX-512 FP16 among it, under the new name. Its instructions are on the AVX-512 pages: Foundation, mask registers, BW, DQ and CD, the later extensions and FP16. The first processors with it were Intel’s Xeon 6 processors with P-cores (Granite Rapids), from 2024. A processor with AVX10.1 still sets the old AVX-512 CPUID bits.
The first versions of the specification let a processor support AVX10 with 256-bit vectors only, and named versions by length (AVX10.1/256, AVX10.1/512); CPUID leaf 24H said which lengths there were. In March 2025, with revision 3.0 of the AVX10 specification, Intel dropped that: every AVX10 processor has 512-bit vectors, and the length bits went away.
AVX10.2
AVX10.2 adds new instructions, all in the tables below: arithmetic on BF16 numbers, IEEE 754-2019 minimum and maximum, compares that set the flags in a new way, conversions to and from 8-bit floating point, saturating conversions to integers, EVEX forms of the AVX-VNNI-INT8 and AVX-VNNI-INT16 dot products, and a few moves. Intel first published its specification in July 2024, and has announced it for the processors code-named Diamond Rapids (Xeon) and Nova Lake (Core). Neither was on sale when this page was written, in November 2026: Intel has given 2027 for Diamond Rapids.
The specification first also gave 256-bit instructions embedded rounding and
{sae}, using EVEX’s U bit (bit 2 of its second payload byte), for
processors that would have only 256-bit vectors. When 512-bit vectors became compulsory,
in March 2025, Intel withdrew it; GNU binutils and LLVM removed it the same month. No
processor has it.
The VMOVRS loads (AVX10.2 with MOVRS) are on the cache and memory ordering page.
When the explorer disassembles a program, each instruction it shows links to its row on these pages.
Instructions
Packed forms are shown at 512 bits. Each also has a 128-bit and a 256-bit form
(EVEX.128 and EVEX.256, with xmm and ymm registers and m128 and m256 memory), without
{er} or {sae}; with AVX10 these need no further CPUID bit.
Scalar forms (EVEX.LLIG) ignore the vector length.
BF16 arithmetic
BF16 (bfloat16) is the top half of a single-precision number: a sign bit, 8 exponent
bits and 7 fraction bits. These instructions are the BF16 forms of the
FP16 ones, at the same opcodes with
another prefix. They take no rounding or {sae} operand.
| Instruction | Forms | Encoding | What it does | Set |
|---|---|---|---|---|
vaddbf16 | zmm1 {k1}{z}, zmm2, zmm3/m512/m16bcst | EVEX.512.66.MAP5.W0 58 /r | Adds packed BF16 numbers. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vsubbf16 | zmm1 {k1}{z}, zmm2, zmm3/m512/m16bcst | EVEX.512.66.MAP5.W0 5C /r | Subtracts the second source from the first. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vmulbf16 | zmm1 {k1}{z}, zmm2, zmm3/m512/m16bcst | EVEX.512.66.MAP5.W0 59 /r | Multiplies. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vdivbf16 | zmm1 {k1}{z}, zmm2, zmm3/m512/m16bcst | EVEX.512.66.MAP5.W0 5E /r | Divides the first source by the second. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vminbf16 | zmm1 {k1}{z}, zmm2, zmm3/m512/m16bcst | EVEX.512.66.MAP5.W0 5D /r | The smaller of each pair. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vmaxbf16 | zmm1 {k1}{z}, zmm2, zmm3/m512/m16bcst | EVEX.512.66.MAP5.W0 5F /r | The larger of each pair. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vsqrtbf16 | zmm1 {k1}{z}, zmm2/m512/m16bcst | EVEX.512.66.MAP5.W0 51 /r | Square root. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vfmadd132bf16 | zmm1 {k1}{z}, zmm2, zmm3/m512/m16bcst | EVEX.512.NP.MAP6.W0 98 /r | dest = dest × src3 + src2, rounded once. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vfmadd213bf16 | as above | EVEX.512.NP.MAP6.W0 A8 /r | dest = src2 × dest + src3. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vfmadd231bf16 | as above | EVEX.512.NP.MAP6.W0 B8 /r | dest = src2 × src3 + dest. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vfmsub132bf16 | as above | EVEX.512.NP.MAP6.W0 9A /r | Multiply, then subtract the addend (132 order). | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vfmsub213bf16 | as above | EVEX.512.NP.MAP6.W0 AA /r | Multiply, then subtract (213 order). | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vfmsub231bf16 | as above | EVEX.512.NP.MAP6.W0 BA /r | Multiply, then subtract (231 order). | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vfnmadd132bf16 | as above | EVEX.512.NP.MAP6.W0 9C /r | Negate the product, then add (132 order). | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vfnmadd213bf16 | as above | EVEX.512.NP.MAP6.W0 AC /r | Negate the product, then add (213 order). | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vfnmadd231bf16 | as above | EVEX.512.NP.MAP6.W0 BC /r | Negate the product, then add (231 order). | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vfnmsub132bf16 | as above | EVEX.512.NP.MAP6.W0 9E /r | Negate the product, then subtract (132 order). | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vfnmsub213bf16 | as above | EVEX.512.NP.MAP6.W0 AE /r | Negate the product, then subtract (213 order). | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vfnmsub231bf16 | as above | EVEX.512.NP.MAP6.W0 BE /r | Negate the product, then subtract (231 order). | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vscalefbf16 | zmm1 {k1}{z}, zmm2, zmm3/m512/m16bcst | EVEX.512.NP.MAP6.W0 2C /r | Multiplies the first source by 2 to the power floor(second source). | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vgetexpbf16 | zmm1 {k1}{z}, zmm2/m512/m16bcst | EVEX.512.NP.MAP6.W0 42 /r | The unbiased exponent of each number, as a BF16 number. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vrcpbf16 | zmm1 {k1}{z}, zmm2/m512/m16bcst | EVEX.512.NP.MAP6.W0 4C /r | Approximate reciprocal. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vrsqrtbf16 | zmm1 {k1}{z}, zmm2/m512/m16bcst | EVEX.512.NP.MAP6.W0 4E /r | Approximate reciprocal square root. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vgetmantbf16 | zmm1 {k1}{z}, zmm2/m512/m16bcst, imm8 | EVEX.512.F2.0F3A.W0 26 /r ib | The mantissa, normalised to the interval and sign that imm8 selects. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vreducebf16 | zmm1 {k1}{z}, zmm2/m512/m16bcst, imm8 | EVEX.512.F2.0F3A.W0 56 /r ib | What is left after VRNDSCALE’s rounding. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vrndscalebf16 | zmm1 {k1}{z}, zmm2/m512/m16bcst, imm8 | EVEX.512.F2.0F3A.W0 08 /r ib | Rounds to the number of fraction bits in imm8[7:4]. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vfpclassbf16 | k1 {k2}, zmm2/m512/m16bcst, imm8 | EVEX.512.F2.0F3A.W0 66 /r ib | Sets a mask bit for each number in any of the classes imm8 selects. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vcmpbf16 | k1 {k2}, zmm2, zmm3/m512/m16bcst, imm8 | EVEX.512.F2.0F3A.W0 C2 /r ib | Compares by the predicate in imm8[4:0] and sets a mask bit for each pair for which it holds. Predicate names (imm8 0 to 31): vcmpeqbf16, vcmpltbf16, vcmplebf16, vcmpunordbf16, vcmpneqbf16, vcmpnltbf16, vcmpnlebf16, vcmpordbf16, vcmpeq_uqbf16, vcmpngebf16, vcmpngtbf16, vcmpfalsebf16, vcmpneq_oqbf16, vcmpgebf16, vcmpgtbf16, vcmptruebf16, vcmpeq_osbf16, vcmplt_oqbf16, vcmple_oqbf16, vcmpunord_sbf16, vcmpneq_usbf16, vcmpnlt_uqbf16, vcmpnle_uqbf16, vcmpord_sbf16, vcmpeq_usbf16, vcmpnge_uqbf16, vcmpngt_uqbf16, vcmpfalse_osbf16, vcmpneq_osbf16, vcmpge_oqbf16, vcmpgt_oqbf16, vcmptrue_usbf16. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vcomisbf16 | xmm1, xmm2/m16 | EVEX.LLIG.66.MAP5.W0 2F /r | Compares the low BF16 numbers and sets ZF, PF and CF as COMISS does. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
Minimum and maximum (IEEE 754-2019)
VMINMAX does one of the minimum and maximum operations of IEEE 754-2019, which imm8 selects: minimum and maximum (−0 is less than +0, and a NaN input gives a NaN), their magnitude forms (which compare absolute values), and their “number” forms (which return the number when only one input is a NaN). imm8 also says how the sign of the result is set.
| Instruction | Forms | Encoding | What it does | Set |
|---|---|---|---|---|
vminmaxps | zmm1 {k1}{z}, zmm2, zmm3/m512/m32bcst {sae}, imm8 | EVEX.512.66.0F3A.W0 52 /r ib | Minimum or maximum of packed singles. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vminmaxpd | zmm1 {k1}{z}, zmm2, zmm3/m512/m64bcst {sae}, imm8 | EVEX.512.66.0F3A.W1 52 /r ib | Of packed doubles. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vminmaxph | zmm1 {k1}{z}, zmm2, zmm3/m512/m16bcst {sae}, imm8 | EVEX.512.NP.0F3A.W0 52 /r ib | Of packed halves. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vminmaxbf16 | zmm1 {k1}{z}, zmm2, zmm3/m512/m16bcst, imm8 | EVEX.512.F2.0F3A.W0 52 /r ib | Of packed BF16 numbers. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vminmaxss | xmm1 {k1}{z}, xmm2, xmm3/m32 {sae}, imm8 | EVEX.LLIG.66.0F3A.W0 53 /r ib | Of the low singles. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vminmaxsd | xmm1 {k1}{z}, xmm2, xmm3/m64 {sae}, imm8 | EVEX.LLIG.66.0F3A.W1 53 /r ib | Of the low doubles. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vminmaxsh | xmm1 {k1}{z}, xmm2, xmm3/m16 {sae}, imm8 | EVEX.LLIG.NP.0F3A.W0 53 /r ib | Of the low halves. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
Compares that set the flags
These compare like COMISS and UCOMISS, but also set OF and SF, so that an unordered
result never looks like “equal” or “less than”, and each relation can be tested with
one condition: the unsigned conditions for greater than, the signed ones for less
than. The comx forms signal invalid for any NaN, the ucomx
forms only for a signalling NaN.
| Instruction | Forms | Encoding | What it does | Set |
|---|---|---|---|---|
vcomxss | xmm1, xmm2/m32 {sae} | EVEX.LLIG.F3.0F.W0 2F /r | Compares the low singles. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vcomxsd | xmm1, xmm2/m64 {sae} | EVEX.LLIG.F2.0F.W1 2F /r | Compares the low doubles. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vcomxsh | xmm1, xmm2/m16 {sae} | EVEX.LLIG.F3.MAP5.W0 2F /r | Compares the low halves. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vucomxss | xmm1, xmm2/m32 {sae} | EVEX.LLIG.F3.0F.W0 2E /r | Compares the low singles, unordered. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vucomxsd | xmm1, xmm2/m64 {sae} | EVEX.LLIG.F2.0F.W1 2E /r | Compares the low doubles, unordered. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vucomxsh | xmm1, xmm2/m16 {sae} | EVEX.LLIG.F3.MAP5.W0 2E /r | Compares the low halves, unordered. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
8-bit floating point
Two 8-bit formats: bf8 is E5M2 (5 exponent bits, 2 fraction bits)
and hf8 is E4M3 (4 exponent bits, 3 fraction bits). The conversions
from halves round to nearest; the s forms saturate, turning a value too
large for the format into its largest finite value. The 2ph forms
convert two sources into one full vector; the bias forms add an 8-bit
bias, taken from the other source, to each half before converting.
| Instruction | Forms | Encoding | What it does | Set |
|---|---|---|---|---|
vcvtph2bf8 | ymm1 {k1}{z}, zmm2/m512/m16bcst | EVEX.512.F3.0F38.W0 74 /r | Halves to bf8. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vcvtph2bf8s | ymm1 {k1}{z}, zmm2/m512/m16bcst | EVEX.512.F3.MAP5.W0 74 /r | Halves to bf8, saturating. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vcvtph2hf8 | ymm1 {k1}{z}, zmm2/m512/m16bcst | EVEX.512.F3.MAP5.W0 18 /r | Halves to hf8. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vcvtph2hf8s | ymm1 {k1}{z}, zmm2/m512/m16bcst | EVEX.512.F3.MAP5.W0 1B /r | Halves to hf8, saturating. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vcvt2ph2bf8 | zmm1 {k1}{z}, zmm2, zmm3/m512/m16bcst | EVEX.512.F2.0F38.W0 74 /r | The halves of two sources to bf8, in one vector. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vcvt2ph2bf8s | zmm1 {k1}{z}, zmm2, zmm3/m512/m16bcst | EVEX.512.F2.MAP5.W0 74 /r | The same, saturating. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vcvt2ph2hf8 | zmm1 {k1}{z}, zmm2, zmm3/m512/m16bcst | EVEX.512.F2.MAP5.W0 18 /r | The halves of two sources to hf8. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vcvt2ph2hf8s | zmm1 {k1}{z}, zmm2, zmm3/m512/m16bcst | EVEX.512.F2.MAP5.W0 1B /r | The same, saturating. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vcvtbiasph2bf8 | ymm1 {k1}{z}, zmm2, zmm3/m512/m16bcst | EVEX.512.NP.0F38.W0 74 /r | Halves to bf8, with a bias. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vcvtbiasph2bf8s | ymm1 {k1}{z}, zmm2, zmm3/m512/m16bcst | EVEX.512.NP.MAP5.W0 74 /r | Halves to bf8, with a bias, saturating. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vcvtbiasph2hf8 | ymm1 {k1}{z}, zmm2, zmm3/m512/m16bcst | EVEX.512.NP.MAP5.W0 18 /r | Halves to hf8, with a bias. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vcvtbiasph2hf8s | ymm1 {k1}{z}, zmm2, zmm3/m512/m16bcst | EVEX.512.NP.MAP5.W0 1B /r | Halves to hf8, with a bias, saturating. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vcvthf82ph | zmm1 {k1}{z}, ymm2/m256 | EVEX.512.F2.MAP5.W0 1E /r | hf8 to halves (exactly; no broadcast). There is no bf8 form: a bf8 value is the top byte of the half with the same value, so a shift of each word left by 8 converts it. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vcvt2ps2phx | zmm1 {k1}{z}, zmm2, zmm3/m512/m32bcst {er} | EVEX.512.66.0F38.W0 67 /r | The singles of two sources to halves, in one vector. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
Saturating conversions to 8-bit integers
Each result is an 8-bit integer, saturated to −128…127 (ibs) or 0…255
(iubs) and kept in its own element: a word for the ph and bf16 forms, a
dword for the ps forms. The cvtt forms truncate.
| Instruction | Forms | Encoding | What it does | Set |
|---|---|---|---|---|
vcvtph2ibs | zmm1 {k1}{z}, zmm2/m512/m16bcst {er} | EVEX.512.NP.MAP5.W0 69 /r | Halves to signed bytes. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vcvtph2iubs | zmm1 {k1}{z}, zmm2/m512/m16bcst {er} | EVEX.512.NP.MAP5.W0 6B /r | Halves to unsigned bytes. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vcvttph2ibs | zmm1 {k1}{z}, zmm2/m512/m16bcst {sae} | EVEX.512.NP.MAP5.W0 68 /r | Halves to signed bytes, truncated. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vcvttph2iubs | zmm1 {k1}{z}, zmm2/m512/m16bcst {sae} | EVEX.512.NP.MAP5.W0 6A /r | Halves to unsigned bytes, truncated. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vcvtps2ibs | zmm1 {k1}{z}, zmm2/m512/m32bcst {er} | EVEX.512.66.MAP5.W0 69 /r | Singles to signed bytes. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vcvtps2iubs | zmm1 {k1}{z}, zmm2/m512/m32bcst {er} | EVEX.512.66.MAP5.W0 6B /r | Singles to unsigned bytes. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vcvttps2ibs | zmm1 {k1}{z}, zmm2/m512/m32bcst {sae} | EVEX.512.66.MAP5.W0 68 /r | Singles to signed bytes, truncated. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vcvttps2iubs | zmm1 {k1}{z}, zmm2/m512/m32bcst {sae} | EVEX.512.66.MAP5.W0 6A /r | Singles to unsigned bytes, truncated. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vcvtbf162ibs | zmm1 {k1}{z}, zmm2/m512/m16bcst | EVEX.512.F2.MAP5.W0 69 /r | BF16 numbers to signed bytes. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vcvtbf162iubs | zmm1 {k1}{z}, zmm2/m512/m16bcst | EVEX.512.F2.MAP5.W0 6B /r | BF16 numbers to unsigned bytes. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vcvttbf162ibs | zmm1 {k1}{z}, zmm2/m512/m16bcst | EVEX.512.F2.MAP5.W0 68 /r | BF16 numbers to signed bytes, truncated. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vcvttbf162iubs | zmm1 {k1}{z}, zmm2/m512/m16bcst | EVEX.512.F2.MAP5.W0 6A /r | BF16 numbers to unsigned bytes, truncated. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
Saturating truncations to dwords and qwords
These truncate like VCVTTPS2DQ and the rest, but a result out of range gives the largest or smallest integer of the type instead of the integer indefinite value.
| Instruction | Forms | Encoding | What it does | Set |
|---|---|---|---|---|
vcvttps2dqs | zmm1 {k1}{z}, zmm2/m512/m32bcst {sae} | EVEX.512.NP.MAP5.W0 6D /r | Singles to signed dwords. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vcvttps2udqs | zmm1 {k1}{z}, zmm2/m512/m32bcst {sae} | EVEX.512.NP.MAP5.W0 6C /r | Singles to unsigned dwords. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vcvttps2qqs | zmm1 {k1}{z}, ymm2/m256/m32bcst {sae} | EVEX.512.66.MAP5.W0 6D /r | Singles to signed qwords. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vcvttps2uqqs | zmm1 {k1}{z}, ymm2/m256/m32bcst {sae} | EVEX.512.66.MAP5.W0 6C /r | Singles to unsigned qwords. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vcvttpd2dqs | ymm1 {k1}{z}, zmm2/m512/m64bcst {sae} | EVEX.512.NP.MAP5.W1 6D /r | Doubles to signed dwords. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vcvttpd2udqs | ymm1 {k1}{z}, zmm2/m512/m64bcst {sae} | EVEX.512.NP.MAP5.W1 6C /r | Doubles to unsigned dwords. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vcvttpd2qqs | zmm1 {k1}{z}, zmm2/m512/m64bcst {sae} | EVEX.512.66.MAP5.W1 6D /r | Doubles to signed qwords. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vcvttpd2uqqs | zmm1 {k1}{z}, zmm2/m512/m64bcst {sae} | EVEX.512.66.MAP5.W1 6C /r | Doubles to unsigned qwords. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vcvttss2sis | r32, xmm1/m32 {sae} (W0); r64, xmm1/m32 {sae} (W1) | EVEX.LLIG.F3.MAP5.W0 6D /r, EVEX.LLIG.F3.MAP5.W1 6D /r | The low single to a signed integer in a general register. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vcvttss2usis | r32, xmm1/m32 {sae}; r64, xmm1/m32 {sae} | EVEX.LLIG.F3.MAP5.W0 6C /r, EVEX.LLIG.F3.MAP5.W1 6C /r | The low single to an unsigned integer. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vcvttsd2sis | r32, xmm1/m64 {sae}; r64, xmm1/m64 {sae} | EVEX.LLIG.F2.MAP5.W0 6D /r, EVEX.LLIG.F2.MAP5.W1 6D /r | The low double to a signed integer. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vcvttsd2usis | r32, xmm1/m64 {sae}; r64, xmm1/m64 {sae} | EVEX.LLIG.F2.MAP5.W0 6C /r, EVEX.LLIG.F2.MAP5.W1 6C /r | The low double to an unsigned integer. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
Dot products and sums of differences
The integer dot products are the EVEX forms of
AVX-VNNI-INT8 and AVX-VNNI-INT16, with masking,
broadcast and the 32 registers. Each multiplies groups of four bytes (or pairs of
words) of the two sources and adds the sums to the dwords of the destination. The
letters say which source is signed: ss both, su the first,
us the second, uu neither; a final s saturates
the sum.
| Instruction | Forms | Encoding | What it does | Set |
|---|---|---|---|---|
vpdpbssd | zmm1 {k1}{z}, zmm2, zmm3/m512/m32bcst | EVEX.512.F2.0F38.W0 50 /r | Signed bytes × signed bytes. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vpdpbssds | as above | EVEX.512.F2.0F38.W0 51 /r | Signed × signed, saturating. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vpdpbsud | as above | EVEX.512.F3.0F38.W0 50 /r | Signed bytes × unsigned bytes. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vpdpbsuds | as above | EVEX.512.F3.0F38.W0 51 /r | Signed × unsigned, saturating. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vpdpbuud | as above | EVEX.512.NP.0F38.W0 50 /r | Unsigned bytes × unsigned bytes. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vpdpbuuds | as above | EVEX.512.NP.0F38.W0 51 /r | Unsigned × unsigned, saturating. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vpdpwsud | as above | EVEX.512.F3.0F38.W0 D2 /r | Signed words × unsigned words. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vpdpwsuds | as above | EVEX.512.F3.0F38.W0 D3 /r | Signed × unsigned words, saturating. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vpdpwusd | as above | EVEX.512.66.0F38.W0 D2 /r | Unsigned words × signed words. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vpdpwusds | as above | EVEX.512.66.0F38.W0 D3 /r | Unsigned × signed words, saturating. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vpdpwuud | as above | EVEX.512.NP.0F38.W0 D2 /r | Unsigned words × unsigned words. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vpdpwuuds | as above | EVEX.512.NP.0F38.W0 D3 /r | Unsigned × unsigned words, saturating. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vdpphps | zmm1 {k1}{z}, zmm2, zmm3/m512/m32bcst | EVEX.512.NP.0F38.W0 52 /r | Multiplies pairs of halves and adds each pair’s sum to a single in the destination. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vmpsadbw | zmm1 {k1}{z}, zmm2, zmm3/m512, imm8 | EVEX.512.F3.0F3A.W0 42 /r ib | MPSADBW’s sums of absolute byte differences, in EVEX form with masking. The VEX form is on the AVX2 page. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
Moves
| Instruction | Forms | Encoding | What it does | Set |
|---|---|---|---|---|
vmovd | xmm1, xmm2/m32; xmm1/m32, xmm2 | EVEX.128.F3.0F.W0 7E /r; EVEX.128.66.0F.W0 D6 /r | Copies the low dword and clears the rest of the destination register. The forms with a general register are on the AVX-512 Foundation page. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
vmovw | xmm1, xmm2/m16; xmm1/m16, xmm2 | EVEX.128.F3.MAP5.W0 6E /r; EVEX.128.F3.MAP5.W0 7E /r | Copies the low word and clears the rest of the destination register. The forms with a general register are FP16’s. | AVX10.2 (Intel Diamond Rapids and Nova Lake, announced) |
Notes
- BF16 arithmetic and MXCSR. The BF16 instructions do not use MXCSR: they round to nearest even, treat denormal inputs and results as zero, and report no floating-point exceptions.
- Names. Early revisions of the AVX10.2 specification named the BF16 instructions differently (vaddnepbf16, vcmppbf16 and so on). This reference uses the later names, as LLVM does.
- 256-bit rounding. AVX-512 fixes bit 2 of EVEX’s second payload byte at 1; AVX10.2’s withdrawn 256-bit rounding used 0 there. APX now uses that bit as X4, the top bit of an index register, which a register form has none of. With EVEX.b set on a register form we treat 0 there as invalid, as LLVM does.
- VMOVD operand order. For the store form at 66 0F D6 W0, the order of the operands (register or memory first) is an inference; LLVM shows it the same way.
Links
Reference
- Intel 64 and IA-32 Architectures Software Developer’s Manuals – Intel’s manual, which now includes AVX10.1, with links to the AVX10 technical paper and the AVX10.2 specification
- Intel AVX10.2 Architecture Specification – the extension’s own specification
- The Converged Vector ISA: Intel Advanced Vector Extensions 10 – Intel’s technical paper that introduced AVX10 (2023)
- AMD64 Architecture Programmer’s Manual, Volume 4 – AMD’s reference to the 128-bit, 256-bit and 512-bit media instructions