5 A64 INSTRUCTION SET
5.7 Advanced SIMD
5.7.10 Vector-by-element Arithmetic
In all cases the immediate index is a constant in the range 0 to nelem(<Ts>)–1. FMLA Vd.<T>, Vn.<T>, Vm.<Ts>[index]
Floating-point fused multiply add (vector, by element). Where <T>/<Ts> is 2S/S, 4S/S or 2D/D. If <Ts> is S, then Vm must be in the range V0-V15.
FMLS Vd.<T>, Vn.<T>, Vm.<Ts>[index]
Floating-point fused multiply subtract (vector, by element). Where <T>/<Ts> is 2S/S, 4S/S or 2D/D. If <Ts> is S, then Vm must be in the range V0-V15.
FMUL Vd.<T>, Vn.<T>, Vm.<Ts>[index]
Floating-point multiply (vector, by element). Where <Td>/<Ts> is 2S/S 4S/S or 2D/D. If <Ts> is S, then Vm must be in the range V0-V15.
FMULX Vd.<T>, Vn.<T>, Vm.<Ts>[index]
Floating-point multiply extended (vector, by element): like FMUL but 0±∞→ ±2. Where <Td>/<Ts> is 2S/S, 4S/S or 2D/D. If <Ts> is S, then Vm must be in the range V0-V15.
MLAVd.<T>, Vn.<T>, Vm.<Ts>[index]
Integer multiply accumulate (vector, by element). Where <T>/<Ts> is 4H/H, 8H/H, 2S/S or 4S/S. If <Ts> is H, then Vm must be in the range V0-V15.
MLSVd.<T>, Vn.<T>, Vm.<Ts>[index]
Integer multiply subtract (vector, by element). Where <T>/<Ts> is 4H/H, 8H/H, 2S/S or 4S/S. If <Ts> is H, then Vm must be in the range V0-V15.
MULVd.<T>, Vn.<T>, Vm.<Ts>[index]
Integer multiply (vector, by element). Where <T>/<Ts> is 4H/H, 8H/H, 2S/S or 4S/S. If <Ts> is H, then Vm must be in the range V0-V15.
SMLALVd.<Ta>, Vn.<Tb>, Vm.<Ts>[index]
Signed integer multiply accumulate long (vector, by element). Where <Ta>/<Tb>/<Ts> is 4S/4H/H or 2D/2S/S. If <Ts> is H, then Vm must be in the range V0-V15.
SMLAL2Vd.<Ta>, Vn.<Tb>, Vm.<Ts>[index]
Signed integer multiply accumulate long (vector, by element, second part). Where <Ta>/<Tb>/<Ts> is 4S/8H/H or 2D/4S/S. If <Ts> is H, then Vm must be in the range V0-V15.
SMLSLVd.<Ta>, Vn.<Tb>, Vm.<Ts>[index]
Signed integer multiply subtract long (vector, by element). Where <Ta>/<Tb>/<Ts> is 4S/4H/H or 2D/2S/S. If <Ts> is H, then Vm must be in the range V0-V15.
SMLSL2Vd.<Ta>, Vn.<Tb>, Vm.<Ts>[index]
Signed integer multiply subtract long (vector, by element, second part). Where <Ta>/<Tb>/<Ts> is
4S/8H/H or 2D/4S/S. If <Ts> is H, then Vm must be in the range V0-V15. If <Ts> is H, then Vm must be in the range V0-V15.
SMULLVd.<Ta>, Vn.<Tb>, Vm.<Ts>[index]
Signed integer multiply long (vector, by element). Where <Ta>/<Tb>/<Ts> is 4S/4H/H or 2D/2S/S. If <Ts> is H, then Vm must be in the range V0-V15.
SMULL2Vd.<Ta>, Vn.<Tb>, Vm.<Ts>[index]
Signed integer multiply long (vector, by element, second part). Where <Ta>/<Tb>/<Ts> is 4S/8H/H or 2D/4S/S. If <Ts> is H, then Vm must be in the range V0-V15.
UMLALVd.<Ta>, Vn.<Tb>, Vm.<Ts>[index]
Unsigned integer multiply accumulate long (vector, by element). Where <Ta>/<Tb>/<Ts> is 4S/4H/H or 2D/2S/S. If <Ts> is H, then Vm must be in the range V0-V15.
UMLAL2Vd.<Ta>, Vn.<Tb>, Vm.<Ts>[index]
Unsigned integer multiply accumulate long (vector, by element, second part). Where <Ta>/<Tb>/<Ts> is 4S/8H/H or 2D/4S/S. If <Ts> is H, then Vm must be in the range V0-V15.
UMLSLVd.<Ta>, Vn.<Tb>, Vm.<Ts>[index]
Unsigned integer multiply subtract long (vector, by element). Where <Ta>/<Tb>/<Ts> is 4S/4H/H or 2D/2S/S. If <Ts> is H, then Vm must be in the range V0-V15.
UMLSL2Vd.<Ta>, Vn.<Tb>, Vm.<Ts>[index]
Unsigned integer multiply subtract long (vector, by element, second part). Where <Ta>/<Tb>/<Ts> is 4S/8H/H or 2D/4S/S. If <Ts> is H, then Vm must be in the range V0-V15.
UMULLVd.<Ta>, Vn.<Tb>, Vm.<Ts>[index]
Unsigned integer multiply long (vector, by element). Where <Ta>/<Tb>/<Ts> is 4S/4H/H or 2D/2S/S. If <Ts> is H, then Vm must be in the range V0-V15.
UMULL2Vd.<Ta>, Vn.<Tb>, Vm.<Ts>[index]
Unsigned integer multiply long (vector, by element, second part). Where <Ta>/<Tb>/<Ts> is 4S/8H/H or 2D/4S/S. If <Ts> is H, then Vm must be in the range V0-V15.
SQDMLALVd.<Ta>, Vn.<Tb>, Vm.<Ts>[index]
Signed integer saturating doubling multiply accumulate long (vector, by element). Where <Ta>/<Tb>/<Ts> is 4S/4H/H or 2D/2S/S. If <Ts> is H, then Vm must be in the range V0-V15.
SQDMLAL2Vd.<Ta>, Vn.<Tb>, Vm.<Ts>[index]
Signed integer saturating doubling multiply accumulate long (vector, by element, second part). Where <Ta>/<Tb>/<Ts> is 4S/8H/H or 2D/4S/S. If <Ts> is H, then Vm must be in the range V0-V15.
SQDMLSLVd.<Ta>, Vn.<Tb>, Vm.<Ts>[index]
Signed integer saturating doubling multiply subtract long (vector, by element). Where <Ta>/<Tb>/<Ts> is 4S/4H/H or 2D/2S/S. If <Ts> is H, then Vm must be in the range V0-V15.
SQDMLSL2Vd.<Ta>, Vn.<Tb>, Vm.<Ts>[index]
Signed integer saturating doubling multiply subtract long (vector, by element, second part). Where <Ta>/<Tb>/<Ts> is 4S/8H/H or 2D/4S/S. If <Ts> is H, then Vm must be in the range V0-V15. SQDMULLVd.<Ta>, Vn.<Tb>, Vm.<Ts>[index]
Signed integer saturating doubling multiply long (vector, by element). Where <Ta>/<Tb>/<Ts> is 4S/4H/H or 2D/2S/S. If <Ts> is H, then Vm must be in the range V0-V15.
SQDMULL2Vd.<Ta>, Vn.<Tb>, Vm.<Ts>[index]
Signed integer saturating doubling multiply long (vector, by element, second part). Where <Ta>/<Tb>/<Ts> is 4S/8H/H or 2D/4S/S. If <Ts> is H, then Vm must be in the range V0-V15. SQDMULHVd.<Td>, Vn.<Td>, Vm.<Ts>[index]
Signed integer saturating doubling multiply returning high half (vector, by element). Where <Td>/<Ts> is 4H/H, 8H/H, 2S/S or 4S/S. If <Ts> is H, then Vm must be in the range V0-V15.
SQRDMULH Vd.<Td>, Vn.<Td>, Vm.<Ts>[index]
Signed integer saturating rounding doubling multiply returning high half (vector, by element). Where <Td>/<Ts> is 4H/H, 8H/H, 2S/S or 4S/S. If <Ts> is H, then Vm must be in the range V0-V15.