**VecLib DSP Libraries**

VecLib is a large set of routines offering high-performance, optimised implementations of vector elementwise functions.

The library contains 4576 functions of 2, 3, or 4 operands, real or complex, scalar or vector.

The functions have the following forms:

r[i] = a[i] op1 b[i], i = 1, ..., N

r[i] = a[i] op1 (b[i] op2 c[i]), i = 1, ..., N

r[i] = (a[i] op1 b[i]) op2 c[i], i = 1, ..., N

r[i] = (a[i] op1 b[i]) op2 (c[i] op3 d[i]), i = 1, ..., N, where

- each of op1, op2, and op3 can be +, -, × or ÷
- each of a, b, c, and d can be real or complex, scalar or vector
- the vectors can be strided independently.

**Library Contents**

Functions of 2 operands:

- Contains all possible combinations of real, complex, scalar or vector arguments.
- A total of 110 independent functions, 128 functions in all.

Real functions of 3 operands:

- Contains all possible combinations of real scalar or real vector arguments.
- A total of 149 independent functions, 336 functions in all.

Complex functions of 3 operands:

- Contains all possible combinations of complex scalar and complex vector arguments.
- A total of 1263 independent functions, 3024 functions in all.

Real vector functions of 4 operands:

- Contains all possible combinations of real vector arguments.
- A total of 62 independent functions, 64 functions in all.

Complex vector functions of 4 operands:

- Contains all possible combinations of complex vector arguments.
- A total of 805 independent functions, 1024 functions in all.

## Naming Convention

VecLib is a large library, but using it is simplified by the systematic naming convention. Function names are made up of the components describing the function:

- brackets ( and ) are denoted
**b** - operations +, -, × and ÷ are denoted
**p**,**m**,**t,**and**d**, respectively - real vector or matrix operands are denoted
**r** - complex vector or matrix operands are denoted
**c** - conjugated complex vector or matrix operands are denoted
**j** - real scalar operands are denoted
**R** - complex scalar operands are denoted
**C** - conjugated complex scalars are denoted
**J** - functions for vectors start
**v** - functions for matrices start
**m** - transposed matrix inputs are denoted
**T** - transposed and conjugated matrix inputs are denoted
**H** - operands marked for cache removal have
**l**appended to them.

Here are a few examples of function names: r, a, b, c are vectors, ß (beta) is a scalar.

Function Name | Action | Comment |
---|---|---|

vrpbrmrb | r[i] = a[i] * (b[i] - c[i]) | all parameters real |

vcpbjmjb | r[i] = a[i] + (b[i]' - c[i]') | all parameters complex |

vcpbrtJb | r[i] = a[i] + (b[i] * ß') | r, a and beta are complex, b is real |

## Implementations

**ARM A53, A57, and A72****PPC****T2080****PPC T2081****PPC****T4240****Intel AVX512****Intel Phi****Intel AVX2****Intel AVX****Intel SSE**