Intrin¶
Usage
use Intrin;
or
import Intrin;
- proc isX8664() param : bool¶
- proc isArm64() param : bool¶
- proc vectorType(type eltType, param numElts: int) type¶
- proc implType(type eltType, param numElts: int) type¶
- proc extract(type eltType, param numElts: int, x: vectorType(eltType, numElts), param idx: int) : eltType¶
idx 0 is the least significant element
- proc insert(type eltType, param numElts: int, x: vectorType(eltType, numElts), y: eltType, param idx: int) : x.type¶
idx 0 is the least significant element
- proc splat(type eltType, param numElts: int, x: eltType) : vectorType(eltType, numElts)¶
- proc set(type eltType, param numElts: int, values: numElts*eltType) : vectorType(eltType, numElts)¶
values(0) is the least significant element
- proc loadAligned(type eltType, param numElts: int, ptr: c_ptrConst(eltType)) : vectorType(eltType, numElts)¶
- proc loadUnaligned(type eltType, param numElts: int, ptr: c_ptrConst(eltType)) : vectorType(eltType, numElts)¶
- proc storeAligned(type eltType, param numElts: int, ptr: c_ptr(eltType), x: vectorType(eltType, numElts))¶
- proc storeUnaligned(type eltType, param numElts: int, ptr: c_ptr(eltType), x: vectorType(eltType, numElts))¶
- proc loadMasked(type eltType, param numElts: int, ptr: c_ptrConst(eltType), mask: ?) : vectorType(eltType, numElts)¶
Load with a mask masked out elements are zeroed out only the most significant bit in each vector lane is considered for the mask
- proc gather(type eltType, param numElts: int, ptr: c_ptrConst(eltType), type indexType, indices: ?, param scale: int) : vectorType(eltType, numElts)¶
- proc gatherMasked(type eltType, param numElts: int, ptr: c_ptrConst(eltType), type indexType, indices: ?, param scale: int, mask: ?, src: vectorType(eltType, numElts)) : vectorType(eltType, numElts)¶
- proc swapPairs(type eltType, param numElts: int, x: vectorType(eltType, numElts)) : x.type¶
- proc swapLowHigh(type eltType, param numElts: int, x: vectorType(eltType, numElts)) : x.type¶
- proc reverse(type eltType, param numElts: int, x: vectorType(eltType, numElts)) : x.type¶
- proc rotateLeft(type eltType, param numElts: int, x: vectorType(eltType, numElts)) : x.type¶
- proc rotateRight(type eltType, param numElts: int, x: vectorType(eltType, numElts)) : x.type¶
- proc interleaveLower(type eltType, param numElts: int, x: vectorType(eltType, numElts), y: x.type) : x.type¶
- proc interleaveUpper(type eltType, param numElts: int, x: vectorType(eltType, numElts), y: x.type) : x.type¶
- proc deinterleaveLower(type eltType, param numElts: int, x: vectorType(eltType, numElts), y: x.type) : x.type¶
- proc deinterleaveUpper(type eltType, param numElts: int, x: vectorType(eltType, numElts), y: x.type) : x.type¶
- proc blendLowHigh(type eltType, param numElts: int, x: vectorType(eltType, numElts), y: x.type) : x.type¶
- proc add(type eltType, param numElts: int, x: vectorType(eltType, numElts), y: x.type) : x.type¶
- proc sub(type eltType, param numElts: int, x: vectorType(eltType, numElts), y: x.type) : x.type¶
- proc mul(type eltType, param numElts: int, x: vectorType(eltType, numElts), y: x.type) : x.type¶
- proc div(type eltType, param numElts: int, x: vectorType(eltType, numElts), y: x.type) : x.type¶
- proc neg(type eltType, param numElts: int, x: vectorType(eltType, numElts)) : x.type¶
- proc and(type eltType, param numElts: int, x: vectorType(eltType, numElts), y: x.type) : x.type¶
- proc or(type eltType, param numElts: int, x: vectorType(eltType, numElts), y: x.type) : x.type¶
- proc xor(type eltType, param numElts: int, x: vectorType(eltType, numElts), y: x.type) : x.type¶
- proc not(type eltType, param numElts: int, x: vectorType(eltType, numElts)) : x.type¶
- proc andNot(type eltType, param numElts: int, x: vectorType(eltType, numElts), y: x.type) : x.type¶
- proc cmpEq(type eltType, param numElts: int, x: vectorType(eltType, numElts), y: x.type) : x.type¶
- proc cmpNe(type eltType, param numElts: int, x: vectorType(eltType, numElts), y: x.type) : x.type¶
- proc cmpLt(type eltType, param numElts: int, x: vectorType(eltType, numElts), y: x.type) : x.type¶
- proc cmpLe(type eltType, param numElts: int, x: vectorType(eltType, numElts), y: x.type) : x.type¶
- proc cmpGt(type eltType, param numElts: int, x: vectorType(eltType, numElts), y: x.type) : x.type¶
- proc cmpGe(type eltType, param numElts: int, x: vectorType(eltType, numElts), y: x.type) : x.type¶
- proc bitSelect(type eltType, param numElts: int, mask: ?, x: vectorType(eltType, numElts), y: x.type) : x.type¶
- proc isAllZeros(type eltType, param numElts: int, x: vectorType(eltType, numElts)) : bool¶
- proc allOnes(type eltType, param numElts: int) : vectorType(eltType, numElts)¶
- proc allZeros(type eltType, param numElts: int) : vectorType(eltType, numElts)¶
- proc moveMask(type eltType, param numElts: int, x: vectorType(eltType, numElts)) : c_int¶
- proc reinterpretCast(type fromEltType, param fromNumElts: int, type toEltType, param toNumElts: int, x: vectorType(fromEltType, fromNumElts)) : vectorType(toEltType, toNumElts)¶
- proc hadd(type eltType, param numElts: int, x: vectorType(eltType, numElts), y: x.type) : x.type¶
Add pairs of adjacent elements
x: [a, b, c, d] y: [e, f, g, h]
returns: [a+b, e+f, c+d, g+h]
- proc sqrt(type eltType, param numElts: int, x: vectorType(eltType, numElts)) : x.type¶
- proc rsqrt(type eltType, param numElts: int, x: vectorType(eltType, numElts)) : x.type¶
- proc fmadd(type eltType, param numElts: int, x: vectorType(eltType, numElts), y: x.type, z: x.type) : x.type¶
Performs (x*y)+z
- proc fmsub(type eltType, param numElts: int, x: vectorType(eltType, numElts), y: x.type, z: x.type) : x.type¶
Performs (x*y)-z
- proc min(type eltType, param numElts: int, x: vectorType(eltType, numElts), y: x.type) : x.type¶
- proc max(type eltType, param numElts: int, x: vectorType(eltType, numElts), y: x.type) : x.type¶
- proc abs(type eltType, param numElts: int, x: vectorType(eltType, numElts)) : x.type¶