simdpp::mull(integer)

From libsimdpp-docs
< int
template<unsigned N, class E1, class E2>
Ret<N, _DETAIL_> mull( Vec1<N,E1> a, Vec2<N,E2> b );

Multiplies two vectors with integer values and returns expanded values. The implementation behaves as if the following set of overloads is provided:

Ret Vec1 Vec2
int32 int16 int16
uint32 uint16 int16
uint32 int16 uint16
uint32 uint16 uint16
int64 int32 int32
uint64 uint32 int32
uint64 int32 uint32
uint64 uint32 uint32

The return type is a vector expression.

Scalar arguments[edit]

Several additional overloads are provided to implement implicit conversions from scalar types. Values of the following types are accepted as the first or the second argument: int32_t, int64_t, uint32_t, uint64_t, float, double. Each element of the expanded vector is set to the source value, converting it using standard conversions if needed.

The return type is a vector expression. The vector type is the same as the vector argument except that masks are unmasked to respective non-mask vector types.

This function does not map to well to native instructions on x86 and PowerPC. On average, for each multiplication instruction a shuffle instruction is needed. Consider using different data layout if this is important.

Parameters[edit]

a, b - integer vectors

Return value[edit]

A vector expression evaluating to a * b.

Equivalent operation[edit]

r0 = a0 * b0
...
rN = aN * bN

See also[edit]