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

TILEMOVROW copies one row of a tile into a ZMM register,: tilemovrow zmm1, tmm2, ecx or with an immediate row. Bits 3:0 of ECX or of the immediate name the row, and the other bits are ignored. It is the plain member of AMX-AVX512; TCVTROWD2PS and the other TCVTROW instructions convert the row on the way.

No fault for a row that is not there

A row number at or past the tile’s configured rows is no error: the ZMM register becomes all zeros. So does the part of a row past the configured bytes per row, and the instruction always writes the whole 64 bytes. A short tile thus reads as if padded with zeros. Bytes are copied whole, but the tile’s row width must still be in whole dwords.

The checks combine both register files: 64-bit mode, the tile and AVX-512 state in XCR0, a loaded configuration and a tile that it gives rows. Any of them missing raises #UD; CR0.TS or bit 18 of IA32_XFD raises #NM. The ISE’s TILEMOVROW page gives AMX-E7-EVEX to the register form and AMX-E8-EVEX to the immediate; its TCVTROW pages and XED have them the other way round, and only an immediate form can leave vvvv unused as AMX-E7-EVEX asks. Inside a TSX transaction it aborts the transaction.

ACE’s direction back

Under the ACE specification, TILEMOVROW also runs the other way, tilemovrow tmm1, zmm2, ecx or with an immediate, with W1 in place of W0, and this write form works only under ACE’s palette 2 with SCALEDATA enabled in XCR0. There every tile has all 16 rows of 64 bytes, so the zeros above never arise, and ACE calls the upper bits of the row number reserved, to be zero. It is how results leave a tile after outer products such as TOP4BSSD, and how data enters one, since palette 2 has no tile loads or stores; TILEMOVCOL writes a column.

In our builds

GCC 14 has no -mamx-avx512 option. With it, Clang 23 at -O2 compiles _tile_movrow(2, r) to tilemovrow zmm0, tmm2, edi; tilemovrow zmm1, tmm2, ecx is 62 F2 75 48 4A CA. _tile_movrow(2, 5) still goes through a register, mov eax, 5; the immediate form takes _tile_movrowi(2, 5). Neither Clang 23 nor GNU as 2.44 accepted the write form. Zen 5 has no AMX, and this site’s recorded cases include none of TILEMOVROW.

Forms

Every encoding of TILEMOVROW that Intel XED knows, one row per XED instruction form (iform). How to read the notation.
InstructionEncodingRequires
TILEMOVROW zmm, tmm, imm8 64-bit mode only TILEMOVROW_ZMMu8_TMMu8_IMM8EVEX.512.66.0F3A.W0 07 /r ibACE v1 or AMX_AVX512
TILEMOVROW zmm, tmm, r32 64-bit mode only TILEMOVROW_ZMMu8_TMMu8_GPR32u32EVEX.512.66.0F38.W0 4A /rACE v1 or AMX_AVX512
TILEMOVROW tmm, zmm, imm8 64-bit mode only TILEMOVROW_TMMu32_ZMMu32_IMM8EVEX.512.66.0F3A.W1 07 /r ibACE v1
TILEMOVROW tmm, zmm, r32 64-bit mode only TILEMOVROW_TMMu32_ZMMu32_GPR32u32EVEX.512.66.0F38.W1 4A /rACE v1

Operation

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

TILEMOVROW zmm, tmm, imm8 64-bit mode only TILEMOVROW zmm, tmm, r32 64-bit mode only
on = xcr0 if cr4 >> 18 & 1 else 0    # XCR0, where CR4.OSXSAVE is set
if on >> 17 & 3 != 3:                # TILECFG and TILEDATA
    fault(UD)
if on & 0xE6 != 0xE6:                # AVX-512's state, AVX's and
    fault(UD)                        # SSE's
if palette == 0 or not tmm2.rows:    # no configuration, or a tile it
    fault(UD)                        # leaves out
if tmm2.colsb % 4:                   # whole dwords
    fault(UD)
if cr0 >> 3 & 1 or xfd >> 18 & 1:    # CR0.TS, or the OS keeps the
    fault(NM)                        # tiles from this thread
# ACE's exception class for these forms asks for XCR0 bit 20
# (SCALEDATA) too
r = src3 & 15                        # bits 3:0 of imm8 or r32
v = 0                                # a row past the tile's: zeros
if r < tmm2.rows:                    # bytes past colsb: zeros
    v = low(tmm2.row[r], 8 * tmm2.colsb)
zmm1.write(v)
start_row = 0

Not run on a processor: none of these processors has AMX.

TILEMOVROW tmm, zmm, imm8 64-bit mode only TILEMOVROW tmm, zmm, r32 64-bit mode only
on = xcr0 if cr4 >> 18 & 1 else 0    # XCR0, where CR4.OSXSAVE is set
if on >> 17 & 0xB != 0xB:            # TILECFG, TILEDATA, SCALEDATA
    fault(UD)
if on & 0xE6 != 0xE6:                # AVX-512's state, AVX's and
    fault(UD)                        # SSE's
if palette != 2:                     # ACE's palette alone
    fault(UD)
if cr0 >> 3 & 1 or xfd >> 18 & 1:    # CR0.TS, or the OS keeps the
    fault(NM)                        # tiles from this thread
r = src3 & 15                        # bits 3:0 of imm8 or r32
tmm1.row[r] = zmm2                   # under palette 2, all 64 bytes

Not run on a processor: none of these processors has ACE.

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
TILEMOVROW zmm, tmm, imm8 64-bit mode only
zmmexplicitwrite
tmmexplicitread
imm8explicitread
TILEMOVROW zmm, tmm, r32 64-bit mode only
zmmexplicitwrite
tmmexplicitread
r32explicitread
TILEMOVROW tmm, zmm, imm8 64-bit mode only
tmmexplicitwrite
zmmexplicitread
imm8explicitread
TILEMOVROW tmm, zmm, r32 64-bit mode only
tmmexplicitwrite
zmmexplicitread
r32explicitread

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.

TILEMOVROW zmm, tmm, imm8 64-bit mode only
AMX-E7-EVEX
TILEMOVROW zmm, tmm, r32 64-bit mode only
AMX-E8-EVEX
TILEMOVROW tmm, zmm, imm8 64-bit mode only
ACE-E1
TILEMOVROW tmm, zmm, r32 64-bit mode only
ACE-E6

Attributes

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

All forms
may abort a TSX transaction

Intrinsics

The C intrinsics of Clang 23.1.2 that compile to TILEMOVROW, 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
_tile_movrow __m512i _tile_movrow(const int a, const int b)

TILEMOVROW zmm, tmm, r32 EVEX.512 -mamx-avx512 -mavx10.2

_tile_movrowi __m512i _tile_movrowi(const int a, const int b)

TILEMOVROW zmm, tmm, imm8 EVEX.512 -mamx-avx512 -mavx10.2

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
AMX_AVX512

ACE v1
CPUID.(EAX=07H,ECX=1):ECX[11] ACE
CPUID.(EAX=1DH,ECX=2):EAX[7:0] ≥ 1 ACE version

or

AMX_AVX512
CPUID.(EAX=1EH,ECX=1):EAX[7] AMX_AVX512

Diamond Rapids
ACE_1

ACE v1
CPUID.(EAX=07H,ECX=1):ECX[11] ACE
CPUID.(EAX=1DH,ECX=2):EAX[7:0] ≥ 1 ACE version

None in XED’s chip model, which lists these instructions only under its placeholder for future processors.

More AMX-AVX512 instructions

More ACE 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. 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.
  3. Intel Architecture Instruction Set Extensions and Future Features Programming Reference (319433-062, June 2026): page 3-27 (TILEMOVROW)
  4. x86 Ecosystem Advisory Group: AI Compute Extensions (ACE) Specification, version 1.16.2 (July 2026)

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, part of the LLVM Project, licensed under the Apache License 2.0 with LLVM Exceptions. The text is our own.