SIMD::AVX2
Inherits SIMD::SSE41 / SIMD::SSE2 / SIMD::Base / Reference / Object
AVX2 backend for x86_64 Processes 8 floats (256-bit) at a time Uses ymm registers (ymm0-ymm15)
Constants
VECTOR_WIDTH = 8
VECTOR_WIDTH_16 = 16
VECTOR_WIDTH_64 = 4
VECTOR_WIDTH_8 = 32
VECTOR_WIDTH_F64 = 4
Instance methods
abs(dst : Slice(Int8), a : Slice(Int8)) : Nil
Sourceabs(dst : Slice(Int16), a : Slice(Int16)) : Nil
Sourceabs(dst : Slice(Int32), a : Slice(Int32)) : Nil
Sourceabs(dst : Slice(Float64), a : Slice(Float64)) : Nil
Sourceadd(dst : Slice(Float64), a : Slice(Float64), b : Slice(Float64)) : Nil
Sourceadd(dst : Slice(UInt64), a : Slice(UInt64), b : Slice(UInt64)) : Nil
Sourceadd(dst : Slice(UInt32), a : Slice(UInt32), b : Slice(UInt32)) : Nil
Sourceadd(dst : Slice(UInt16), a : Slice(UInt16), b : Slice(UInt16)) : Nil
Sourceadd(dst : Slice(UInt8), a : Slice(UInt8), b : Slice(UInt8)) : Nil
Sourceaxpby(dst : Slice(Float32), a : Slice(Float32), b : Slice(Float32), alpha : Float32, beta : Float32) : Nil
dst[i] = alpha * a[i] + beta * b[i]
axpby(dst : Slice(Float64), a : Slice(Float64), b : Slice(Float64), alpha : Float64, beta : Float64) : Nil
Sourcebitwise_and(dst : Slice(UInt32), a : Slice(UInt32), b : Slice(UInt32)) : Nil
Sourcebitwise_and(dst : Slice(UInt64), a : Slice(UInt64), b : Slice(UInt64)) : Nil
Sourcebitwise_and(dst : Slice(UInt16), a : Slice(UInt16), b : Slice(UInt16)) : Nil
Sourcebitwise_and(dst : Slice(UInt8), a : Slice(UInt8), b : Slice(UInt8)) : Nil
Sourcebitwise_or(dst : Slice(UInt32), a : Slice(UInt32), b : Slice(UInt32)) : Nil
Sourcebitwise_or(dst : Slice(UInt64), a : Slice(UInt64), b : Slice(UInt64)) : Nil
Sourcebitwise_or(dst : Slice(UInt16), a : Slice(UInt16), b : Slice(UInt16)) : Nil
Sourcebitwise_or(dst : Slice(UInt8), a : Slice(UInt8), b : Slice(UInt8)) : Nil
Sourceblend(dst : Slice(UInt8), t : Slice(UInt8), f : Slice(UInt8), mask : Slice(UInt8)) : Nil
Sourcebswap(dst : Slice(UInt32), a : Slice(UInt32)) : Nil
Sourcebswap(dst : Slice(UInt64), a : Slice(UInt64)) : Nil
Sourcebswap(dst : Slice(UInt16), a : Slice(UInt16)) : Nil
Sourceceil(dst : Slice(Float64), a : Slice(Float64)) : Nil
Sourceclamp(dst : Slice(Float32), a : Slice(Float32), lo : Float32, hi : Float32) : Nil
dst[i] = clamp(a[i], lo, hi)
clamp(dst : Slice(Float64), a : Slice(Float64), lo : Float64, hi : Float64) : Nil
Sourceclamp(dst : Slice(UInt32), a : Slice(UInt32), lo : UInt32, hi : UInt32) : Nil
Sourceclamp(dst : Slice(Int32), a : Slice(Int32), lo : Int32, hi : Int32) : Nil
Sourcecmp_eq(dst_mask : Slice(UInt8), a : Slice(Int8), b : Slice(Int8)) : Nil
Sourcecmp_eq(dst_mask : Slice(UInt8), a : Slice(Float32), b : Slice(Float32)) : Nil
Sourcecmp_eq(dst_mask : Slice(UInt8), a : Slice(Float64), b : Slice(Float64)) : Nil
Sourcecmp_ge(dst_mask : Slice(UInt8), a : Slice(Int8), b : Slice(Int8)) : Nil
Sourcecmp_ge(dst_mask : Slice(UInt8), a : Slice(Int32), b : Slice(Int32)) : Nil
Sourcecmp_gt_mask(dst_mask : Slice(UInt8), a : Slice(Float32), b : Slice(Float32)) : Nil
Writes an output mask byte per element: 0xFF if a[i] > b[i], else 0x00
cmp_gt_mask(dst_mask : Slice(UInt8), a : Slice(Float64), b : Slice(Float64)) : Nil
Sourcecmp_gt_mask(dst_mask : Slice(UInt8), a : Slice(Int64), b : Slice(Int64)) : Nil
Compare/mask - needs signed comparison
cmp_gt_mask(dst_mask : Slice(UInt8), a : Slice(Int32), b : Slice(Int32)) : Nil
Sourcecmp_gt_mask(dst_mask : Slice(UInt8), a : Slice(Int8), b : Slice(Int8)) : Nil
Sourcecmp_le(dst_mask : Slice(UInt8), a : Slice(Int8), b : Slice(Int8)) : Nil
Sourcecmp_le(dst_mask : Slice(UInt8), a : Slice(Int32), b : Slice(Int32)) : Nil
Sourcecmp_lt(dst_mask : Slice(UInt8), a : Slice(Int8), b : Slice(Int8)) : Nil
Sourcecmp_lt(dst_mask : Slice(UInt8), a : Slice(Float32), b : Slice(Float32)) : Nil
Sourcecmp_ne(dst_mask : Slice(UInt8), a : Slice(Int8), b : Slice(Int8)) : Nil
Sourcecmp_ne(dst_mask : Slice(UInt8), a : Slice(Int32), b : Slice(Int32)) : Nil
Sourcecmp_ne(dst_mask : Slice(UInt8), a : Slice(Float32), b : Slice(Float32)) : Nil
Sourcecmp_ne(dst_mask : Slice(UInt8), a : Slice(Float64), b : Slice(Float64)) : Nil
Sourceconvert(dst : Slice(Float32), src : Slice(UInt8), scale : Float32) : Nil
UInt8 -> Float32 with scale
copy(dst : Slice(UInt8), src : Slice(UInt8)) : Nil
dst[i] = src[i] (may use wide loads/stores + prefetch)
div(dst : Slice(Float64), a : Slice(Float64), b : Slice(Float64)) : Nil
Sourcedot(a : Slice(Float32), b : Slice(Float32)) : Float32
Returns dot(a,b) = sum(a[i] * b[i]) (can use FMA)
dot(a : Slice(Float64), b : Slice(Float64)) : Float64
Sourcefir(dst : Slice(Float32), src : Slice(Float32), coeff : Slice(Float32)) : Nil
1D FIR: dst[i] = sum_{k=0..taps-1} coeff[k] * src[i+k]
floor(dst : Slice(Float32), a : Slice(Float32)) : Nil
SSE2 doesn't provide vector floor/ceil/round for Float32. (SSE4.1 overrides these in SIMD::SSE41.)
floor(dst : Slice(Float64), a : Slice(Float64)) : Nil
Sourcefma(dst : Slice(Float32), a : Slice(Float32), b : Slice(Float32), c : Slice(Float32)) : Nil
dst[i] = a[i] * b[i] + c[i] (FMA on capable backends)
fma(dst : Slice(Float64), a : Slice(Float64), b : Slice(Float64), c : Slice(Float64)) : Nil
Sourcemax(dst : Slice(Int8), a : Slice(Int8), b : Slice(Int8)) : Nil
Sourcemax(dst : Slice(Int16), a : Slice(Int16), b : Slice(Int16)) : Nil
Sourcemax(dst : Slice(Int32), a : Slice(Int32), b : Slice(Int32)) : Nil
Sourcemax(dst : Slice(Float32), a : Slice(Float32), b : Slice(Float32)) : Nil
Sourcemax(dst : Slice(Float64), a : Slice(Float64), b : Slice(Float64)) : Nil
Sourcemax(a : Slice(Float64)) : Float64
Sourcemax(a : Slice(UInt32)) : UInt32
Sourcemax(a : Slice(Int32)) : Int32
Sourcemax(a : Slice(Int8)) : Int8
Sourcemin(dst : Slice(Int8), a : Slice(Int8), b : Slice(Int8)) : Nil
Sourcemin(dst : Slice(Int16), a : Slice(Int16), b : Slice(Int16)) : Nil
Sourcemin(dst : Slice(Int32), a : Slice(Int32), b : Slice(Int32)) : Nil
Sourcemin(dst : Slice(Float32), a : Slice(Float32), b : Slice(Float32)) : Nil
Sourcemin(dst : Slice(Float64), a : Slice(Float64), b : Slice(Float64)) : Nil
Sourcemin(a : Slice(Float64)) : Float64
Sourcemin(a : Slice(UInt32)) : UInt32
Sourcemin(a : Slice(Int32)) : Int32
Sourcemin(a : Slice(Int8)) : Int8
Sourcemul(dst : Slice(Float64), a : Slice(Float64), b : Slice(Float64)) : Nil
Sourcemul(dst : Slice(UInt32), a : Slice(UInt32), b : Slice(UInt32)) : Nil
Sourcemul(dst : Slice(UInt16), a : Slice(UInt16), b : Slice(UInt16)) : Nil
Sourceneg(dst : Slice(Int8), a : Slice(Int8)) : Nil
Sourceneg(dst : Slice(Int16), a : Slice(Int16)) : Nil
Sourceneg(dst : Slice(Int32), a : Slice(Int32)) : Nil
Sourceneg(dst : Slice(Int64), a : Slice(Int64)) : Nil
Sourceneg(dst : Slice(Float64), a : Slice(Float64)) : Nil
Sourceround(dst : Slice(Float64), a : Slice(Float64)) : Nil
Sourcersqrt(dst : Slice(Float32), a : Slice(Float32)) : Nil
dst[i] = 1 / sqrt(a[i]) (fast approx on capable backends)
rsqrt(dst : Slice(Float64), a : Slice(Float64)) : Nil
Sourcesqrt(dst : Slice(Float64), a : Slice(Float64)) : Nil
Sourcesub(dst : Slice(Float64), a : Slice(Float64), b : Slice(Float64)) : Nil
Sourcesub(dst : Slice(UInt64), a : Slice(UInt64), b : Slice(UInt64)) : Nil
Sourcesub(dst : Slice(UInt32), a : Slice(UInt32), b : Slice(UInt32)) : Nil
Sourcesub(dst : Slice(UInt16), a : Slice(UInt16), b : Slice(UInt16)) : Nil
Sourcesub(dst : Slice(UInt8), a : Slice(UInt8), b : Slice(UInt8)) : Nil
Sourcesum(a : Slice(Float64)) : Float64
Sourcexor(dst : Slice(UInt32), a : Slice(UInt32), b : Slice(UInt32)) : Nil
Sourcexor(dst : Slice(UInt64), a : Slice(UInt64), b : Slice(UInt64)) : Nil
Sourcexor(dst : Slice(UInt16), a : Slice(UInt16), b : Slice(UInt16)) : Nil
Sourcexor(dst : Slice(UInt8), a : Slice(UInt8), b : Slice(UInt8)) : Nil
Sourcexor_block16(dst : Slice(UInt8), src : Slice(UInt8), key16 : StaticArray(UInt8, 16)) : Nil
XOR a stream with a 16-byte repeated block key