mmops - Multimedia Operators Zero-cost typed SIMD wrapper
Consts
CMP_EQ_OQ = 0x00000000
CMP_LE_OS = 0x00000002
CMP_LT_OS = 0x00000001
CMP_NEQ_UQ = 0x00000004
CMP_NLE_US = 0x00000006
CMP_NLT_US = 0x00000005
CMP_ORD_Q = 0x00000007
CMP_UNORD_Q = 0x00000003
ROUND_DOWN = 0x00000001
ROUND_NEAREST = 0x00000000
ROUND_TRUNC = 0x00000003
ROUND_UP = 0x00000002
Templates
template `[]=`[N, T](a: var Mm[N, T]; index: int; value: T)
-
Set element in vector at specified index (array-style assignment)
Performance Note: For frequent single-element updates of float32 values, consider maintaining 8 local variables and using load() for better performance. Example: let vec = load([f0, f1, f2, f3, f4, f5, f6, f7])
template initMm(e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0: int16): Mm[16, int16]
template initMm(e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0: uint16): Mm[16, uint16]
template initMm(e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0: int8): Mm[32, int8]
template permuteVar[N, T](a: Mm[N, T]; idx: Mm[N, int32]): Mm[N, T]
- Shuffle elements using control indices in idx
template saturatedAdd[N, T](a, b: Mm[N, T]): Mm[N, T]
- Add packed elements using saturation
template saturatedSub[N, T](a, b: Mm[N, T]): Mm[N, T]
- Subtract packed elements using saturation
template set(e3, e2, e1, e0: float64): Mm[4, float64]
- Set 4 double-precision floating-point elements with specified values (e3 is highest)
template set(e3, e2, e1, e0: int64): Mm[4, int64]
- Set 4 64-bit integer elements with specified values (e3 is highest)
template set(e3, e2, e1, e0: uint64): Mm[4, uint64]
- Set 4 64-bit unsigned integer elements with specified values (e3 is highest)
template set(e7, e6, e5, e4, e3, e2, e1, e0: float32): Mm[8, float32]
- Set 8 single-precision floating-point elements with specified values (e7 is highest)
template set(e7, e6, e5, e4, e3, e2, e1, e0: int32): Mm[8, int32]
- Set 8 32-bit integer elements with specified values (e7 is highest)
template set(e7, e6, e5, e4, e3, e2, e1, e0: uint32): Mm[8, uint32]
- Set 8 32-bit unsigned integer elements with specified values (e7 is highest)
template set(e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0: int16): Mm[16, int16]
- Set 16 16-bit integer elements with specified values (e15 is highest)
template set(e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0: uint16): Mm[16, uint16]
- Set 16 16-bit unsigned integer elements with specified values (e15 is highest)
template splat[N](val: float32): Mm[N, float32]
- Broadcast a single-precision floating-point value to all elements
template splat[N](val: float64): Mm[N, float64]
- Broadcast a double-precision floating-point value to all elements
template splat[N](val: uint8): Mm[N, uint8]
- Broadcast an 8-bit unsigned integer value to all elements
template splat[N](val: uint16): Mm[N, uint16]
- Broadcast a 16-bit unsigned integer value to all elements
template streamLoad[T](p: array[8, T]): Mm[8, T]
- Load data from memory using non-temporal memory hint