• No results found

Vector-by-element Arithmetic

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.