![]() |
AI Engine
(AIE) r2p15.2
|
Cyclic addressing intrinsics allow indexing into circular buffers.
Macros | |
#define | cyclic_add_unaligned_load(P, OFFS, START, LEN) (circ_add_load_ptr ((P), (mod_t)((OFFS)*sizeof(v8int16)), (START), (mod_t)((LEN)*sizeof(v8int16)), (P))) |
#define | cyclic_add_unaligned_store(P, OFFS, START, LEN, D) (circ_add_store_ptr((P), (D), (mod_t)((OFFS)*sizeof(v8int16)), (START), (mod_t)((LEN)*sizeof(v8int16)), (P))) |
#define | PROM(T) |
Functions | |
promotion v32int8 | circ_add_load_ptr (const v32int8 *, mod_t, const v32int8 *, mod_t, const v32int8 *&) |
promotion v32uint8 | circ_add_load_ptr (const v32uint8 *, mod_t, const v32uint8 *, mod_t, const v32uint8 *&) |
promotion v16int16 | circ_add_load_ptr (const v16int16 *, mod_t, const v16int16 *, mod_t, const v16int16 *&) |
promotion v8cint16 | circ_add_load_ptr (const v8cint16 *, mod_t, const v8cint16 *, mod_t, const v8cint16 *&) |
promotion v8int32 | circ_add_load_ptr (const v8int32 *, mod_t, const v8int32 *, mod_t, const v8int32 *&) |
promotion v4cint32 | circ_add_load_ptr (const v4cint32 *, mod_t, const v4cint32 *, mod_t, const v4cint32 *&) |
promotion v4int64 | circ_add_load_ptr (const v4int64 *, mod_t, const v4int64 *, mod_t, const v4int64 *&) |
promotion v2cint64 | circ_add_load_ptr (const v2cint64 *, mod_t, const v2cint64 *, mod_t, const v2cint64 *&) |
promotion v2int128 | circ_add_load_ptr (const v2int128 *, mod_t, const v2int128 *, mod_t, const v2int128 *&) |
promotion v8float | circ_add_load_ptr (const v8float *, mod_t, const v8float *, mod_t, const v8float *&) |
promotion v4cfloat | circ_add_load_ptr (const v4cfloat *, mod_t, const v4cfloat *, mod_t, const v4cfloat *&) |
promotion void | circ_add_store_ptr (const v32int8 *, v32int8, mod_t, const v32int8 *, mod_t, const v32int8 *&) |
promotion void | circ_add_store_ptr (const v32uint8 *, v32uint8, mod_t, const v32uint8 *, mod_t, const v32uint8 *&) |
promotion void | circ_add_store_ptr (const v16int16 *, v16int16, mod_t, const v16int16 *, mod_t, const v16int16 *&) |
promotion void | circ_add_store_ptr (const v8cint16 *, v8cint16, mod_t, const v8cint16 *, mod_t, const v8cint16 *&) |
promotion void | circ_add_store_ptr (const v8int32 *, v8int32, mod_t, const v8int32 *, mod_t, const v8int32 *&) |
promotion void | circ_add_store_ptr (const v4cint32 *, v4cint32, mod_t, const v4cint32 *, mod_t, const v4cint32 *&) |
promotion void | circ_add_store_ptr (const v4int64 *, v4int64, mod_t, const v4int64 *, mod_t, const v4int64 *&) |
promotion void | circ_add_store_ptr (const v2cint64 *, v2cint64, mod_t, const v2cint64 *, mod_t, const v2cint64 *&) |
promotion void | circ_add_store_ptr (const v2int128 *, v2int128, mod_t, const v2int128 *, mod_t, const v2int128 *&) |
promotion void | circ_add_store_ptr (const v8float *, v8float, mod_t, const v8float *, mod_t, const v8float *&) |
promotion void | circ_add_store_ptr (const v4cfloat *, v4cfloat, mod_t, const v4cfloat *, mod_t, const v4cfloat *&) |
void * | cyclic_add (void *a, int offs, void *restrict start, int len) |
#define cyclic_add_unaligned_load | ( | P, | |
OFFS, | |||
START, | |||
LEN | |||
) | (circ_add_load_ptr ((P), (mod_t)((OFFS)*sizeof(v8int16)), (START), (mod_t)((LEN)*sizeof(v8int16)), (P))) |
Load a vector from a pointer and perform a cyclic increment or decrement within a buffer
Please use this intrinsic if your pointer is unaligned with respect to the vector size.
a] | Current circular buffer pointer position |
offs] | Number of (half) elements to increment the pointer by (each step is half the size of the input type) |
start] | Pointer to the start of the circular buffer (must be aligned to the vector size) |
len] | Size of the circular buffer (double the number of elements of the datatype of the pointer) |
#define cyclic_add_unaligned_store | ( | P, | |
OFFS, | |||
START, | |||
LEN, | |||
D | |||
) | (circ_add_store_ptr((P), (D), (mod_t)((OFFS)*sizeof(v8int16)), (START), (mod_t)((LEN)*sizeof(v8int16)), (P))) |
#define PROM | ( | T | ) |
promotion v32int8 circ_add_load_ptr | ( | const v32int8 * | , |
mod_t | , | ||
const v32int8 * | , | ||
mod_t | , | ||
const v32int8 *& | |||
) |
promotion v32uint8 circ_add_load_ptr | ( | const v32uint8 * | , |
mod_t | , | ||
const v32uint8 * | , | ||
mod_t | , | ||
const v32uint8 *& | |||
) |
promotion v16int16 circ_add_load_ptr | ( | const v16int16 * | , |
mod_t | , | ||
const v16int16 * | , | ||
mod_t | , | ||
const v16int16 *& | |||
) |
promotion v8cint16 circ_add_load_ptr | ( | const v8cint16 * | , |
mod_t | , | ||
const v8cint16 * | , | ||
mod_t | , | ||
const v8cint16 *& | |||
) |
promotion v8int32 circ_add_load_ptr | ( | const v8int32 * | , |
mod_t | , | ||
const v8int32 * | , | ||
mod_t | , | ||
const v8int32 *& | |||
) |
promotion v4cint32 circ_add_load_ptr | ( | const v4cint32 * | , |
mod_t | , | ||
const v4cint32 * | , | ||
mod_t | , | ||
const v4cint32 *& | |||
) |
promotion v4int64 circ_add_load_ptr | ( | const v4int64 * | , |
mod_t | , | ||
const v4int64 * | , | ||
mod_t | , | ||
const v4int64 *& | |||
) |
promotion v2cint64 circ_add_load_ptr | ( | const v2cint64 * | , |
mod_t | , | ||
const v2cint64 * | , | ||
mod_t | , | ||
const v2cint64 *& | |||
) |
promotion v2int128 circ_add_load_ptr | ( | const v2int128 * | , |
mod_t | , | ||
const v2int128 * | , | ||
mod_t | , | ||
const v2int128 *& | |||
) |
promotion v8float circ_add_load_ptr | ( | const v8float * | , |
mod_t | , | ||
const v8float * | , | ||
mod_t | , | ||
const v8float *& | |||
) |
promotion v4cfloat circ_add_load_ptr | ( | const v4cfloat * | , |
mod_t | , | ||
const v4cfloat * | , | ||
mod_t | , | ||
const v4cfloat *& | |||
) |
promotion void circ_add_store_ptr | ( | const v32int8 * | , |
v32int8 | , | ||
mod_t | , | ||
const v32int8 * | , | ||
mod_t | , | ||
const v32int8 *& | |||
) |
promotion void circ_add_store_ptr | ( | const v32uint8 * | , |
v32uint8 | , | ||
mod_t | , | ||
const v32uint8 * | , | ||
mod_t | , | ||
const v32uint8 *& | |||
) |
promotion void circ_add_store_ptr | ( | const v16int16 * | , |
v16int16 | , | ||
mod_t | , | ||
const v16int16 * | , | ||
mod_t | , | ||
const v16int16 *& | |||
) |
promotion void circ_add_store_ptr | ( | const v8cint16 * | , |
v8cint16 | , | ||
mod_t | , | ||
const v8cint16 * | , | ||
mod_t | , | ||
const v8cint16 *& | |||
) |
promotion void circ_add_store_ptr | ( | const v8int32 * | , |
v8int32 | , | ||
mod_t | , | ||
const v8int32 * | , | ||
mod_t | , | ||
const v8int32 *& | |||
) |
promotion void circ_add_store_ptr | ( | const v4cint32 * | , |
v4cint32 | , | ||
mod_t | , | ||
const v4cint32 * | , | ||
mod_t | , | ||
const v4cint32 *& | |||
) |
promotion void circ_add_store_ptr | ( | const v4int64 * | , |
v4int64 | , | ||
mod_t | , | ||
const v4int64 * | , | ||
mod_t | , | ||
const v4int64 *& | |||
) |
promotion void circ_add_store_ptr | ( | const v2cint64 * | , |
v2cint64 | , | ||
mod_t | , | ||
const v2cint64 * | , | ||
mod_t | , | ||
const v2cint64 *& | |||
) |
promotion void circ_add_store_ptr | ( | const v2int128 * | , |
v2int128 | , | ||
mod_t | , | ||
const v2int128 * | , | ||
mod_t | , | ||
const v2int128 *& | |||
) |
promotion void circ_add_store_ptr | ( | const v8float * | , |
v8float | , | ||
mod_t | , | ||
const v8float * | , | ||
mod_t | , | ||
const v8float *& | |||
) |
promotion void circ_add_store_ptr | ( | const v4cfloat * | , |
v4cfloat | , | ||
mod_t | , | ||
const v4cfloat * | , | ||
mod_t | , | ||
const v4cfloat *& | |||
) |
void* cyclic_add | ( | void * | a, |
int | offs, | ||
void *restrict | start, | ||
int | len | ||
) |
Cyclic increment or decrement of a pointer within a buffer
a] | Current circular buffer pointer position |
offs] | Number of elements to increment the pointer by (each step is the size of the input type) |
start] | Pointer to the start of the circular buffer (must be aligned to the vector size) |
len] | Size of the circular buffer (number of elements of the datatype of the pointer) |