You copied the Doc URL to your clipboard.

QN, DN, and SN

The QN, DN, and SN directives define names for NEON and VFP registers.

name directive expr {.type }{[ x ]}



is QN, DN, or SN.


is the name to be assigned to the extension register. name cannot be the same as any of the predefined names.


Can be:

  • An expression that evaluates to a number in the range:

    • 0-15 if you are using DN in VFPv2 or QN in NEON.

    • 0-31 otherwise.

  • A predefined register name, or a register name that has already been defined in a previous directive.


is any NEON or VFP datatype.


is only available for NEON code. [x] is a scalar index into a register.

type and [x] are Extended notation.


Use QN, DN, or SN to allocate convenient names to extension registers, to help you to remember what you use each one for.

The QN directive defines a name for a specified 128-bit extension register.

The DN directive defines a name for a specified 64-bit extension register.

The SN directive defines a name for a specified single-precision VFP register.


Avoid conflicting uses of the same register under different names.

You cannot specify a vector length in a DN or SN directive.


energy  DN  6   ; defines energy as a symbol for VFP double-precision register 6
mass    SN  16  ; defines mass as a symbol for VFP single-precision register 16

Extended notation examples

varA    DN      d1.U16
varB    DN      d2.U16
varC    DN      d3.U16
        VADD    varA,varB,varC       ; VADD.U16 d1,d2,d3
index   DN      d4.U16[0]
result  QN      q5.I32
        VMULL   result,varA,index    ; VMULL.U16 q5,d1,d4[0]