UMOV

Unsigned move vector element to general-purpose register

This instruction reads the unsigned integer from the source SIMD&FP register, zero-extends it to form a 32-bit or 64-bit value, and writes the result to the destination general-purpose register.

Depending on the settings in the CPACR_EL1, CPTR_EL2, and CPTR_EL3 registers, and the current Security state and Exception level, an attempt to execute the instruction might be trapped.

This instruction is used by the alias MOV (to general).

Advanced SIMD
(FEAT_AdvSIMD)

313029282726252423222120191817161514131211109876543210
0Q001110000imm5001111RnRd
opimm4

Encoding for the 32-bit variant

Applies when (Q == 0)

UMOV <Wd>, <Vn>.<Ts>[<index>]

Encoding for the 64-bit variant

Applies when (Q == 1 && imm5 == x1000)

UMOV <Xd>, <Vn>.D[<index>]

Decode for all variants of this encoding

if !IsFeatureImplemented(FEAT_AdvSIMD) then EndOfDecode(Decode_UNDEF); end; if imm5 == 'x0000' then EndOfDecode(Decode_UNDEF); end; let size : integer{} = LowestSetBitNZ(imm5[3:0]); let d : integer{} = UInt(Rd); let n : integer{} = UInt(Rn); let esize : integer{} = 8 << size; let datasize : integer{} = 32 << UInt(Q); if datasize == 64 && esize < 64 then EndOfDecode(Decode_UNDEF); end; if datasize == 32 && esize >= 64 then EndOfDecode(Decode_UNDEF); end; let index : integer = UInt(imm5[4:size+1]); let idxdsize : integer{} = 64 << UInt(imm5[4]);

Assembler Symbols

<Wd>

Is the 32-bit name of the general-purpose destination register, encoded in the "Rd" field.

<Vn>

Is the name of the SIMD&FP source register, encoded in the "Rn" field.

<Ts>

Is an element size specifier, encoded in imm5:

imm5 <Ts>
xx000 RESERVED
xxxx1 B
xxx10 H
xx100 S
<index>

For the "32-bit" variant: is the element index encoded in imm5:

imm5 <index>
xx000 RESERVED
xxxx1 UInt(imm5[4:1])
xxx10 UInt(imm5[4:2])
xx100 UInt(imm5[4:3])

For the "64-bit" variant: is the element index encoded in "imm5<4>".

<Xd>

Is the 64-bit name of the general-purpose destination register, encoded in the "Rd" field.

Alias Conditions

AliasOf variantIs preferred when
MOV (to general)32-bitimm5 IN {'xx100'}
MOV (to general)64-bitimm5 IN {'x1000'}

Operation

if index == 0 then AArch64_CheckFPEnabled(); else AArch64_CheckFPAdvSIMDEnabled(); end; let operand : bits(idxdsize) = V{}(n); X{datasize}(d) = ZeroExtend{datasize}(operand[index*:esize]);

Operational information

This instruction is a data-independent-time instruction as described in About PSTATE.DIT.


2026-03_rel 2026-03-26 20:48:11

Copyright © 2010-2026 Arm Limited or its affiliates. All rights reserved. This document is Non-Confidential.