IntrinX86_128

Usage

use IntrinX86_128;

or

import IntrinX86_128;
type vec32x4r
type vec64x2r

“__m128d”

type vec8x16i
type vec16x8i

“__m128i”

type vec32x4i
type vec64x2i

“__m128i”

type vec8x16u
type vec16x8u

“__m128i”

type vec32x4u
type vec64x2u

“__m128i”

proc numBits(type t) param : int  where t == vec32x4r || t == vec64x2r || t == vec8x16i || t == vec16x8i || t == vec32x4i || t == vec64x2i || t == vec8x16u || t == vec16x8u || t == vec32x4u || t == vec64x2u
proc type vec32x4r.numBits param : int
proc type vec64x2r.numBits param : int
proc type vec8x16i.numBits param : int
proc type vec16x8i.numBits param : int
proc type vec32x4i.numBits param : int
proc type vec64x2i.numBits param : int
proc type vec8x16u.numBits param : int
proc type vec16x8u.numBits param : int
proc type vec32x4u.numBits param : int
proc type vec64x2u.numBits param : int
proc typeToSuffix(type t) param : string
proc type vec32x4r.typeSuffix param : string
proc type vec64x2r.typeSuffix param : string
proc type vec8x16i.typeSuffix param : string
proc type vec16x8i.typeSuffix param : string
proc type vec32x4i.typeSuffix param : string
proc type vec64x2i.typeSuffix param : string
proc type vec8x16u.typeSuffix param : string
proc type vec16x8u.typeSuffix param : string
proc type vec32x4u.typeSuffix param : string
proc type vec64x2u.typeSuffix param : string
proc vecTypeStr(type t) param : string
proc type vec32x4r.typeStr param : string
proc type vec64x2r.typeStr param : string
proc type vec8x16i.typeStr param : string
proc type vec16x8i.typeStr param : string
proc type vec32x4i.typeStr param : string
proc type vec64x2i.typeStr param : string
proc type vec8x16u.typeStr param : string
proc type vec16x8u.typeStr param : string
proc type vec32x4u.typeStr param : string
proc type vec64x2u.typeStr param : string
proc type vec32x4r.isIntegralVector param : bool
proc type vec64x2r.isIntegralVector param : bool
proc type vec8x16i.isIntegralVector param : bool
proc type vec16x8i.isIntegralVector param : bool
proc type vec32x4i.isIntegralVector param : bool
proc type vec64x2i.isIntegralVector param : bool
proc type vec8x16u.isIntegralVector param : bool
proc type vec16x8u.isIntegralVector param : bool
proc type vec32x4u.isIntegralVector param : bool
proc type vec64x2u.isIntegralVector param : bool
proc type vec32x4r.bitMaskType type
proc type vec64x2r.bitMaskType type
proc type vec8x16i.bitMaskType type
proc type vec16x8i.bitMaskType type
proc type vec32x4i.bitMaskType type
proc type vec64x2i.bitMaskType type
proc type vec32x4r.implType type
proc type vec64x2r.implType type
proc type vec8x16i.implType type
proc type vec16x8i.implType type
proc type vec32x4i.implType type
proc type vec64x2i.implType type
proc doSimpleOp(param op: string, x: ?t) : t

Call a simple op on a vector type x must be a vector type and also specifies the return type

proc doSimpleOp(param op: string, x: ?t, y: ?) : t
proc doSimpleOp(param op: string, x: ?t, y: ?, z: ?) : t
proc doSimpleOp(param op: string, x: ?t, y: ?, z: ?, w: ?) : t
proc doSimpleOp(param op: string, xs) : xs(0).type  where isTuple(xs)
proc doSimpleOp(param op: string, type returnType, x: ?t) : returnType

Call a simple op on a vector type returnType specifies the return type

proc doSimpleOp(param op: string, type returnType, x: ?t1, y: ?t2) : returnType
proc doSimpleOp(param op: string, type returnType, x: ?t1, y: ?t2, z: ?t3) : returnType
proc doSimpleOp(param op: string, type returnType, x: ?t1, y: ?t2, z: ?t3, w: ?t4) : returnType
proc doSimpleOp(param op: string, type returnType, xs) : returnType  where isTuple(xs)
proc reinterpret(param mmPrefix: string, x: ?fromType, type toType) : toType
record x8664_NxM
type extensionType
proc type vecType type
proc type laneType type
proc type numLanes param : int
proc type mmPrefix param : string
proc type extract(x: vecType, param idx: int) : laneType
proc type insert(x: vecType, y: laneType, param idx: int) : vecType
proc type splat(x: laneType) : vecType
proc type set(xs ...) : vecType
proc type loada(x: c_ptrConst(laneType)) : vecType
proc type loadu(x: c_ptrConst(laneType)) : vecType
proc type storea(x: c_ptr(laneType), y: vecType) : void
proc type storeu(x: c_ptr(laneType), y: vecType) : void
proc type loadMasked(x: c_ptrConst(laneType), mask: ?) : vecType
proc type gather(x: c_ptrConst(laneType), type indexType, indices: ?, param scale: int) : vecType
proc type gatherMasked(x: c_ptrConst(laneType), type indexType, indices: ?, param scale: int, mask: ?, src: vecType) : vecType
proc type shiftLeftImm(x: vecType, param offset: int) : vecType
proc type shiftLeftVec(x: vecType, y: vecType) : vecType
proc type shiftRightImm(x: vecType, param offset: int) : vecType
proc type shiftRightVec(x: vecType, y: vecType) : vecType
proc type shiftRightArithImm(x: vecType, param offset: int) : vecType
proc type shiftRightArithVec(x: vecType, y: vecType) : vecType
proc type swapPairs(x: vecType) : vecType
proc type swapLowHigh(x: vecType) : vecType
proc type reverse(x: vecType) : vecType
proc type rotateLeft(x: vecType) : vecType
proc type rotateRight(x: vecType) : vecType
proc type interleaveLower(x: vecType, y: vecType) : vecType
proc type interleaveUpper(x: vecType, y: vecType) : vecType
proc type deinterleaveLower(x: vecType, y: vecType) : vecType
proc type deinterleaveUpper(x: vecType, y: vecType) : vecType
proc type blendLowHigh(x: vecType, y: vecType) : vecType
proc type add(x: vecType, y: vecType) : vecType
proc type sub(x: vecType, y: vecType) : vecType
proc type mul(x: vecType, y: vecType) : vecType
proc type div(x: vecType, y: vecType) : vecType
proc type neg(x: vecType) : vecType
proc type and(x: vecType, y: vecType) : vecType
proc type or(x: vecType, y: vecType) : vecType
proc type xor(x: vecType, y: vecType) : vecType
proc type not(x: vecType) : vecType
proc type andNot(x: vecType, y: vecType) : vecType
proc type cmpEq(x: vecType, y: vecType) : vecType

For floating point types, the comparison is ordered and non-signaling.

proc type cmpNe(x: vecType, y: vecType) : vecType
proc type cmpLt(x: vecType, y: vecType) : vecType
proc type cmpLe(x: vecType, y: vecType) : vecType
proc type cmpGt(x: vecType, y: vecType) : vecType
proc type cmpGe(x: vecType, y: vecType) : vecType
proc type bitSelect(mask: ?, x: vecType, y: vecType) : vecType  where mask.type.numBits == vecType.numBits
proc type isAllZeros(x: vecType) : bool
proc type allOnes() : vecType
proc type allZeros() : vecType
proc type moveMask(x: vecType) : c_int
proc type min(x: vecType, y: vecType) : vecType
proc type max(x: vecType, y: vecType) : vecType
proc type abs(x: vecType) : vecType
proc type hadd(x: vecType, y: vecType) : vecType
proc type sqrt(x: vecType) : vecType
proc type rsqrt(x: vecType) : vecType
proc type fmadd(x: vecType, y: vecType, z: vecType) : vecType
proc type fmsub(x: vecType, y: vecType, z: vecType) : vecType
proc type reinterpretCast(type toVecType, x: vecType) : toVecType
proc type typeCast(type toVecType, x: vecType) : toVecType
proc x8664_32x4r type
proc x8664_64x2r type
proc x8664_8x16i type
proc x8664_16x8i type
proc x8664_32x4i type
proc x8664_64x2i type
record x8664_32x4r_extension
type base
proc type vecType type
proc type laneType type
proc type hadd(x: vecType, y: vecType) : vecType
proc type abs(x: vecType) : vecType
record x8664_64x2r_extension
type base
proc type vecType type
proc type laneType type
proc type swapLowHigh(x: vecType) : vecType
proc type reverse(x: vecType) : vecType
proc type rotateLeft(x: vecType) : vecType
proc type rotateRight(x: vecType) : vecType
proc type deinterleaveLower(x: vecType, y: vecType) : vecType
proc type deinterleaveUpper(x: vecType, y: vecType) : vecType
proc type typeCast()
proc type typeCast(type toVecType, x: vecType) : toVecType
proc type rsqrt(x: vecType) : vecType
proc type abs(x: vecType) : vecType
record x8664_8x16i_extension
type base
proc type vecType type
proc type laneType type
proc type mul(x: vecType, y: vecType) : vecType
proc type div(x: vecType, y: vecType) : vecType
proc type hadd(x: vecType, y: vecType) : vecType
proc type fmadd(x: vecType, y: vecType, z: vecType) : vecType
proc type fmsub(x: vecType, y: vecType, z: vecType) : vecType
proc type shiftLeftImm()
proc type shiftLeftImm(x: vecType, param offset: int) : vecType
proc type shiftLeftVec()
proc type shiftLeftVec(x: vecType, y: vecType) : vecType
proc type shiftRightImm()
proc type shiftRightImm(x: vecType, param offset: int) : vecType
proc type shiftRightVec()
proc type shiftRightVec(x: vecType, y: vecType) : vecType
proc type shiftRightArithImm()
proc type shiftRightArithImm(x: vecType, param offset: int) : vecType
proc type shiftRightArithVec()
proc type shiftRightArithVec(x: vecType, y: vecType) : vecType
proc type deinterleaveLower(x: vecType, y: vecType) : vecType
proc type deinterleaveUpper(x: vecType, y: vecType) : vecType
record x8664_16x8i_extension
type base
proc type vecType type
proc type laneType type
proc type mul(x: vecType, y: vecType) : vecType
proc type div(x: vecType, y: vecType) : vecType
proc type hadd(x: vecType, y: vecType) : vecType
proc type fmadd(x: vecType, y: vecType, z: vecType) : vecType
proc type fmsub(x: vecType, y: vecType, z: vecType) : vecType
proc type deinterleaveLower(x: vecType, y: vecType) : vecType
proc type deinterleaveUpper(x: vecType, y: vecType) : vecType
record x8664_32x4i_extension
type base
proc type vecType type
proc type laneType type
proc type div(x: vecType, y: vecType) : vecType
proc type mul(x: vecType, y: vecType) : vecType
proc type hadd(x: vecType, y: vecType) : vecType
proc type fmadd(x: vecType, y: vecType, z: vecType) : vecType
proc type fmsub(x: vecType, y: vecType, z: vecType) : vecType
record x8664_64x2i_extension
type base
proc type vecType type
proc type laneType type
proc type set(xs ...) : vecType
proc type splat(x: laneType) : vecType
proc type shiftRightArithImm()
proc type shiftRightArithImm(x: vecType, param offset: int) : vecType
proc type shiftRightArithVec()
proc type shiftRightArithVec(x: vecType, y: vecType) : vecType
proc type swapLowHigh(x: vecType) : vecType
proc type reverse(x: vecType) : vecType
proc type rotateLeft(x: vecType) : vecType
proc type rotateRight(x: vecType) : vecType
proc type deinterleaveLower(x: vecType, y: vecType) : vecType
proc type deinterleaveUpper(x: vecType, y: vecType) : vecType
proc type typeCast()
proc type typeCast(type toVecType, x: vecType) : toVecType
proc type div(x: vecType, y: vecType) : vecType
proc type hadd(x: vecType, y: vecType) : vecType
proc type fmadd(x: vecType, y: vecType, z: vecType) : vecType
proc type fmsub(x: vecType, y: vecType, z: vecType) : vecType
proc type max(x: vecType, y: vecType) : vecType
proc type min(x: vecType, y: vecType) : vecType
proc type abs(x: vecType) : vecType