SIMD ISAReturn TypeNameArgumentsInstruction Group
Neonuint64x2_tvmlsl_high_n_u32(uint64x2_t a, uint32x4_t b, uint32_t c)Scalar arithmetic / Vector multiply-accumulate by scalar and widen
Description
Unsigned Multiply-Subtract Long (vector). This instruction multiplies corresponding vector elements in the lower or upper half of the two source SIMD&FP registers, and subtracts the results from the vector elements of the destination SIMD&FP register. The destination vector elements are twice as long as the elements that are multiplied. All the values in this instruction are unsigned integer values.
Results
Vd.2D result
This intrinsic compiles to the following instructions:

UMLSL2 Vd.2D,Vn.4S,Vm.S[0]

Argument Preparation
a register: Vd.2Db register: Vn.4Sc register: Vm.S[0]
Architectures
A64

Operation

CheckFPAdvSIMDEnabled64();
bits(datasize)   operand1 = Vpart[n, part];
bits(datasize)   operand2 = Vpart[m, part];
bits(2*datasize) operand3 = V[d];
bits(2*datasize) result;
integer element1;
integer element2;
bits(2*esize) product;
bits(2*esize) accum;

for e = 0 to elements-1
    element1 = Int(Elem[operand1, e, esize], unsigned);
    element2 = Int(Elem[operand2, e, esize], unsigned);
    product = (element1 * element2)<2*esize-1:0>;
    if sub_op then
        accum = Elem[operand3, e, 2*esize] - product;
    else
        accum = Elem[operand3, e, 2*esize] + product;
    Elem[result, e, 2*esize] = accum;

V[d] = result;