blob: bb4492ed797ec551a5509c04a2e9b0bcb0a4c653 [file]
!sum
# TODO: remove the "Const Immediate" from the documentation field, it's there only for debug purposes.
- go: Add
commutative: "true"
extension: "AVX.*"
documentation: !string |-
// Add adds corresponding elements of two vectors.
- go: SaturatedAdd
commutative: "true"
extension: "AVX.*"
documentation: !string |-
// SaturatedAdd adds corresponding elements of two vectors with saturation.
- go: MaskedAdd
masked: "true"
commutative: "true"
extension: "AVX.*"
documentation: !string |-
// MaskedAdd adds corresponding elements of two vectors.
- go: MaskedSaturatedAdd
masked: "true"
commutative: "true"
extension: "AVX.*"
documentation: !string |-
// MaskedSaturatedAdd adds corresponding elements of two vectors with saturation.
- go: Sub
commutative: "false"
extension: "AVX.*"
documentation: !string |-
// Sub subtracts corresponding elements of two vectors.
- go: SaturatedSub
commutative: "false"
extension: "AVX.*"
documentation: !string |-
// SaturatedSub subtracts corresponding elements of two vectors with saturation.
- go: MaskedSub
masked: "true"
commutative: "false"
extension: "AVX.*"
documentation: !string |-
// MaskedSub subtracts corresponding elements of two vectors.
- go: MaskedSaturatedSub
masked: "true"
commutative: "false"
extension: "AVX.*"
documentation: !string |-
// MaskedSaturatedSub subtracts corresponding elements of two vectors with saturation.
- go: PairwiseAdd
commutative: "false"
extension: "AVX.*"
documentation: !string |-
// PairwiseAdd horizontally adds adjacent pairs of elements.
// For x = [x0, x1, x2, x3, ...] and y = [y0, y1, y2, y3, ...], the result is [y0+y1, y2+y3, ..., x0+x1, x2+x3, ...].
- go: PairwiseSub
commutative: "false"
extension: "AVX.*"
documentation: !string |-
// PairwiseSub horizontally subtracts adjacent pairs of elements.
// For x = [x0, x1, x2, x3, ...] and y = [y0, y1, y2, y3, ...], the result is [y0-y1, y2-y3, ..., x0-x1, x2-x3, ...].
- go: SaturatedPairwiseAdd
commutative: "false"
extension: "AVX.*"
documentation: !string |-
// SaturatedPairwiseAdd horizontally adds adjacent pairs of elements with saturation.
// For x = [x0, x1, x2, x3, ...] and y = [y0, y1, y2, y3, ...], the result is [y0+y1, y2+y3, ..., x0+x1, x2+x3, ...].
- go: SaturatedPairwiseSub
commutative: "false"
extension: "AVX.*"
documentation: !string |-
// SaturatedPairwiseSub horizontally subtracts adjacent pairs of elements with saturation.
// For x = [x0, x1, x2, x3, ...] and y = [y0, y1, y2, y3, ...], the result is [y0-y1, y2-y3, ..., x0-x1, x2-x3, ...].
- go: And
commutative: "true"
extension: "AVX.*"
documentation: !string |-
// And performs a bitwise AND operation between two vectors.
- go: MaskedAnd
masked: "true"
commutative: "true"
extension: "AVX.*"
documentation: !string |-
// MaskedAnd performs a masked bitwise AND operation between two vectors.
- go: Or
commutative: "true"
extension: "AVX.*"
documentation: !string |-
// Or performs a bitwise OR operation between two vectors.
- go: MaskedOr
masked: "true"
commutative: "true"
extension: "AVX.*"
documentation: !string |-
// MaskedOr performs a masked bitwise OR operation between two vectors.
- go: AndNot
commutative: "false"
extension: "AVX.*"
documentation: !string |-
// AndNot performs a bitwise AND NOT operation between two vectors.
- go: MaskedAndNot
masked: "true"
commutative: "false"
extension: "AVX.*"
documentation: !string |-
// MaskedAndNot performs a masked bitwise AND NOT operation between two vectors.
- go: Xor
commutative: "true"
extension: "AVX.*"
documentation: !string |-
// Xor performs a bitwise XOR operation between two vectors.
- go: MaskedXor
masked: "true"
commutative: "true"
extension: "AVX.*"
documentation: !string |-
// MaskedXor performs a masked bitwise XOR operation between two vectors.
# We also have PTEST and VPTERNLOG, those should be hidden from the users
# and only appear in rewrite rules.
# const imm predicate(holds for both float and int|uint):
# 0: Equal
# 1: Less
# 2: LessEqual
# 4: NotEqual
# 5: GreaterEqual
# 6: Greater
- go: Equal
constImm: 0
commutative: "true"
extension: "AVX.*"
documentation: !string |-
// Equal compares for equality.
// Const Immediate = 0.
- go: Less
constImm: 1
commutative: "false"
extension: "AVX.*"
documentation: !string |-
// Less compares for less than.
// Const Immediate = 1.
- go: LessEqual
constImm: 2
commutative: "false"
extension: "AVX.*"
documentation: !string |-
// LessEqual compares for less than or equal.
// Const Immediate = 2.
- go: IsNan # For float only.
constImm: 3
commutative: "true"
extension: "AVX.*"
documentation: !string |-
// IsNan checks if elements are NaN. Use as x.IsNan(x).
// Const Immediate = 3.
- go: NotEqual
constImm: 4
commutative: "true"
extension: "AVX.*"
documentation: !string |-
// NotEqual compares for inequality.
// Const Immediate = 4.
- go: GreaterEqual
constImm: 5
commutative: "false"
extension: "AVX.*"
documentation: !string |-
// GreaterEqual compares for greater than or equal.
// Const Immediate = 5.
- go: Greater
constImm: 6
commutative: "false"
extension: "AVX.*"
documentation: !string |-
// Greater compares for greater than.
// Const Immediate = 6.
- go: MaskedEqual
constImm: 0
masked: "true"
commutative: "true"
extension: "AVX.*"
documentation: !string |-
// MaskedEqual compares for equality, masked.
// Const Immediate = 0.
docUnmasked: !string |-
// Equal compares for equality.
// Const Immediate = 0.
- go: MaskedLess
constImm: 1
masked: "true"
commutative: "false"
extension: "AVX.*"
documentation: !string |-
// MaskedLess compares for less than.
// Const Immediate = 1.
- go: MaskedLessEqual
constImm: 2
masked: "true"
commutative: "false"
extension: "AVX.*"
documentation: !string |-
// MaskedLessEqual compares for less than or equal.
// Const Immediate = 2.
- go: MaskedIsNan # For float only.
constImm: 3
masked: "true"
commutative: "true"
extension: "AVX.*"
documentation: !string |-
// MaskedIsNan checks if elements are NaN. Use as x.IsNan(x).
// Const Immediate = 3.
- go: MaskedNotEqual
constImm: 4
masked: "true"
commutative: "true"
extension: "AVX.*"
documentation: !string |-
// MaskedNotEqual compares for inequality.
// Const Immediate = 4.
- go: MaskedGreaterEqual
constImm: 5
masked: "true"
commutative: "false"
extension: "AVX.*"
documentation: !string |-
// MaskedGreaterEqual compares for greater than or equal.
// Const Immediate = 5.
- go: MaskedGreater
constImm: 6
masked: "true"
commutative: "false"
extension: "AVX.*"
documentation: !string |-
// MaskedGreater compares for greater than.
// Const Immediate = 6.
- go: Div
commutative: "false"
extension: "AVX.*"
documentation: !string |-
// Div divides elements of two vectors.
- go: MaskedDiv
commutative: "false"
masked: "true"
extension: "AVX.*"
documentation: !string |-
// MaskedDiv divides elements of two vectors.
- go: Sqrt
commutative: "false"
extension: "AVX.*"
documentation: !string |-
// Sqrt computes the square root of each element.
- go: MaskedSqrt
commutative: "false"
masked: "true"
extension: "AVX.*"
documentation: !string |-
// MaskedSqrt computes the square root of each element.
- go: ApproximateReciprocal
commutative: "false"
extension: "AVX.*"
documentation: !string |-
// ApproximateReciprocal computes an approximate reciprocal of each element.
- go: MaskedApproximateReciprocal
commutative: "false"
masked: "true"
extension: "AVX.*"
documentation: !string |-
// MaskedApproximateReciprocal computes an approximate reciprocal of each element.
- go: ApproximateReciprocalOfSqrt
commutative: "false"
extension: "AVX.*"
documentation: !string |-
// ApproximateReciprocalOfSqrt computes an approximate reciprocal of the square root of each element.
- go: MaskedApproximateReciprocalOfSqrt
commutative: "false"
masked: "true"
extension: "AVX.*"
documentation: !string |-
// MaskedApproximateReciprocalOfSqrt computes an approximate reciprocal of the square root of each element.
- go: MaskedMulByPowOf2 # This operation is all after AVX512, the unmasked version will be generated.
commutative: "false"
masked: "true"
extension: "AVX.*"
documentation: !string |-
// MaskedMulByPowOf2 multiplies elements by a power of 2.
- go: Round
commutative: "false"
extension: "AVX.*"
constImm: 0
documentation: !string |-
// Round rounds elements to the nearest integer.
// Const Immediate = 0.
- go: MaskedRoundWithPrecision
commutative: "false"
extension: "AVX.*"
constImm: 0
masked: "true"
documentation: !string |-
// MaskedRoundWithPrecision rounds elements with specified precision.
// Const Immediate = 0.
- go: MaskedRoundSuppressExceptionWithPrecision
commutative: "false"
extension: "AVX.*"
constImm: 8
masked: "true"
documentation: !string |-
// MaskedRoundSuppressExceptionWithPrecision rounds elements with specified precision, suppressing exceptions.
// Const Immediate = 8.
- go: MaskedDiffWithRoundWithPrecision
commutative: "false"
extension: "AVX.*"
constImm: 0
masked: "true"
documentation: !string |-
// MaskedDiffWithRoundWithPrecision computes the difference after rounding with specified precision.
// Const Immediate = 0.
- go: MaskedDiffWithRoundSuppressExceptionWithPrecision
commutative: "false"
extension: "AVX.*"
constImm: 8
masked: "true"
documentation: !string |-
// MaskedDiffWithRoundSuppressExceptionWithPrecision computes the difference after rounding with specified precision, suppressing exceptions.
// Const Immediate = 8.
- go: Floor
commutative: "false"
extension: "AVX.*"
constImm: 1
documentation: !string |-
// Floor rounds elements down to the nearest integer.
// Const Immediate = 1.
- go: MaskedFloorWithPrecision
commutative: "false"
extension: "AVX.*"
constImm: 1
masked: "true"
documentation: !string |-
// MaskedFloorWithPrecision rounds elements down with specified precision, masked.
// Const Immediate = 1.
docUnmasked: !string |-
// FloorWithPrecision rounds elements down with specified precision.
// Const Immediate = 1.
- go: MaskedFloorSuppressExceptionWithPrecision
commutative: "false"
extension: "AVX.*"
constImm: 9
masked: "true"
documentation: !string |-
// MaskedFloorSuppressExceptionWithPrecision rounds elements down with specified precision, suppressing exceptions, masked.
// Const Immediate = 9.
docUnmasked: !string |-
// FloorSuppressExceptionWithPrecision rounds elements down with specified precision, suppressing exceptions.
// Const Immediate = 9.
- go: MaskedDiffWithFloorWithPrecision
commutative: "false"
extension: "AVX.*"
constImm: 1
masked: "true"
documentation: !string |-
// MaskedDiffWithFloorWithPrecision computes the difference after flooring with specified precision.
// Const Immediate = 1.
- go: MaskedDiffWithFloorSuppressExceptionWithPrecision
commutative: "false"
extension: "AVX.*"
constImm: 9
masked: "true"
documentation: !string |-
// MaskedDiffWithFloorSuppressExceptionWithPrecision computes the difference after flooring with specified precision, suppressing exceptions.
// Const Immediate = 9.
- go: Ceil
commutative: "false"
extension: "AVX.*"
constImm: 2
documentation: !string |-
// Ceil rounds elements up to the nearest integer.
// Const Immediate = 2.
- go: MaskedCeilWithPrecision
commutative: "false"
extension: "AVX.*"
constImm: 2
masked: "true"
documentation: !string |-
// MaskedCeilWithPrecision rounds elements up with specified precision, masked.
// Const Immediate = 2.
docUnmasked: !string |-
// CeilWithPrecision rounds elements up with specified precision.
// Const Immediate = 2.
- go: MaskedCeilSuppressExceptionWithPrecision
commutative: "false"
extension: "AVX.*"
constImm: 10
masked: "true"
documentation: !string |-
// MaskedCeilSuppressExceptionWithPrecision rounds elements up with specified precision, suppressing exceptions.
// Const Immediate = 10.
- go: MaskedDiffWithCeilWithPrecision
commutative: "false"
extension: "AVX.*"
constImm: 2
masked: "true"
documentation: !string |-
// MaskedDiffWithCeilWithPrecision computes the difference after ceiling with specified precision.
// Const Immediate = 2.
- go: MaskedDiffWithCeilSuppressExceptionWithPrecision
commutative: "false"
extension: "AVX.*"
constImm: 10
masked: "true"
documentation: !string |-
// MaskedDiffWithCeilSuppressExceptionWithPrecision computes the difference after ceiling with specified precision, suppressing exceptions.
// Const Immediate = 10.
- go: Trunc
commutative: "false"
extension: "AVX.*"
constImm: 3
documentation: !string |-
// Trunc truncates elements towards zero.
// Const Immediate = 3.
- go: MaskedTruncWithPrecision
commutative: "false"
extension: "AVX.*"
constImm: 3
masked: "true"
documentation: !string |-
// MaskedTruncWithPrecision truncates elements with specified precision.
// Const Immediate = 3.
- go: MaskedTruncSuppressExceptionWithPrecision
commutative: "false"
extension: "AVX.*"
constImm: 11
masked: "true"
documentation: !string |-
// MaskedTruncSuppressExceptionWithPrecision truncates elements with specified precision, suppressing exceptions.
// Const Immediate = 11.
- go: MaskedDiffWithTruncWithPrecision
commutative: "false"
extension: "AVX.*"
constImm: 3
masked: "true"
documentation: !string |-
// MaskedDiffWithTruncWithPrecision computes the difference after truncating with specified precision.
// Const Immediate = 3.
- go: MaskedDiffWithTruncSuppressExceptionWithPrecision
commutative: "false"
extension: "AVX.*"
constImm: 11
masked: "true"
documentation: !string |-
// MaskedDiffWithTruncSuppressExceptionWithPrecision computes the difference after truncating with specified precision, suppressing exceptions.
// Const Immediate = 11.
- go: AddSub
commutative: "false"
extension: "AVX.*"
documentation: !string |-
// AddSub subtracts even elements and adds odd elements of two vectors.
- go: MaskedGaloisFieldAffineTransform
masked: "true"
commutative: "false"
extension: "AVX.*"
documentation: !string |-
// GaloisFieldAffineTransform computes an affine transformation in GF(2^8):
// x is a vector of 8-bit vectors, with each adjacent 8 as a group; y is a vector of 8x8 1-bit matrixes;
// imm is an 8-bit vector. The affine transformation is y * x + imm, with each element of y
// corresponding to a group of 8 elements in x.
- go: MaskedGaloisFieldAffineTransformInversed
masked: "true"
commutative: "false"
extension: "AVX.*"
documentation: !string |-
// GaloisFieldAffineTransform computes an affine transformation in GF(2^8),
// with x inversed with reduction polynomial x^8 + x^4 + x^3 + x + 1:
// x is a vector of 8-bit vectors, with each adjacent 8 as a group; y is a vector of 8x8 1-bit matrixes;
// imm is an 8-bit vector. The affine transformation is y * x + imm, with each element of y
// corresponding to a group of 8 elements in x.
- go: MaskedGaloisFieldMul
masked: "true"
commutative: "false"
extension: "AVX.*"
documentation: !string |-
// GaloisFieldMul computes element-wise GF(2^8) multiplication with
// reduction polynomial x^8 + x^4 + x^3 + x + 1.
- go: Average
commutative: "true"
extension: "AVX.*" # VPAVGB/W are available across various AVX versions
documentation: !string |-
// Average computes the rounded average of corresponding elements.
- go: MaskedAverage
commutative: "true"
masked: "true"
extension: "AVX512.*" # Masked operations are typically AVX512
documentation: !string |-
// MaskedAverage computes the rounded average of corresponding elements.
- go: Absolute
commutative: "false"
# Unary operation, not commutative
extension: "AVX.*" # VPABSB/W/D are AVX, VPABSQ is AVX512
documentation: !string |-
// Absolute computes the absolute value of each element.
- go: MaskedAbsolute
commutative: "false"
masked: "true"
extension: "AVX512.*"
documentation: !string |-
// MaskedAbsolute computes the absolute value of each element.
- go: Sign
# Applies sign of second operand to first: sign(val, sign_src)
commutative: "false"
extension: "AVX.*"
documentation: !string |-
// Sign returns the product of the first operand with -1, 0, or 1,
// whichever constant is nearest to the value of the second operand.
# Sign does not have masked version
- go: MaskedPopCount
commutative: "false"
masked: "true"
extension: "AVX512.*" # VPOPCNT instructions are AVX512 (BITALG or VPOPCNTDQ)
documentation: !string |-
// MaskedPopCount counts the number of set bits in each element.
- go: PairDotProd
commutative: "false"
extension: "AVX.*"
documentation: !string |-
// PairDotProd multiplies the elements and add the pairs together,
// yielding a vector of half as many elements with twice the input element size.
- go: MaskedPairDotProd
masked: "true"
commutative: "false"
extension: "AVX.*"
documentation: !string |-
// MaskedPairDotProd multiplies the elements and add the pairs together,
// yielding a vector of half as many elements with twice the input element size.
- go: SaturatedUnsignedSignedPairDotProd
commutative: "false"
extension: "AVX.*"
documentation: !string |-
// SaturatedPairDotProd multiplies the elements and add the pairs together with saturation,
// yielding a vector of half as many elements with twice the input element size.
- go: MaskedSaturatedUnsignedSignedPairDotProd
masked: "true"
commutative: "false"
extension: "AVX.*"
documentation: !string |-
// MaskedSaturatedPairDotProd multiplies the elements and add the pairs together with saturation,
// yielding a vector of half as many elements with twice the input element size.
# QuadDotProd, i.e. VPDPBUSD(S) are operations with src/dst on the same register, we are not supporting this as of now.
- go: DotProdBroadcast
commutative: "true"
extension: "AVX.*"
documentation: !string |-
// DotProdBroadcast multiplies all elements and broadcasts the sum.
// Const Immediate = 127.
- go: UnsignedSignedQuadDotProdAccumulate
commutative: "false"
extension: "AVX.*"
documentation: !string |-
// UnsignedSignedQuadDotProdAccumulate performs dot products on groups of 4 elements of y and z and accumulates the results to x.
- go: MaskedUnsignedSignedQuadDotProdAccumulate
masked: "true"
commutative: "false"
extension: "AVX.*"
documentation: !string |-
// MaskedUnsignedSignedQuadDotProdAccumulate performs dot products on groups of 4 elements of y and z and accumulates the results to x.
- go: SaturatedUnsignedSignedQuadDotProdAccumulate
commutative: "false"
extension: "AVX.*"
documentation: !string |-
// SaturatedUnsignedSignedQuadDotProdAccumulate multiplies performs dot products on groups of 4 elements of y and z and accumulates the results to x.
- go: MaskedSaturatedUnsignedSignedQuadDotProdAccumulate
masked: "true"
commutative: "false"
extension: "AVX.*"
documentation: !string |-
// SaturatedUnsignedSignedQuadDotProdAccumulate multiplies performs dot products on groups of 4 elements of y and z and accumulates the results to x.
- go: PairDotProdAccumulate
commutative: "false"
extension: "AVX.*"
documentation: !string |-
// PairDotProdAccumulate performs dot products on pairs of elements of y and z and accumulates the results to x.
- go: MaskedPairDotProdAccumulate
masked: "true"
commutative: "false"
extension: "AVX.*"
documentation: !string |-
// MaskedPairDotProdAccumulate performs dot products on pairs of elements of y and z and accumulates the results to x.
- go: SaturatedPairDotProdAccumulate
commutative: "false"
extension: "AVX.*"
documentation: !string |-
// SaturatedPairDotProdAccumulate performs dot products on pairs of elements of y and z and accumulates the results to x.
- go: MaskedSaturatedPairDotProdAccumulate
masked: "true"
commutative: "false"
extension: "AVX.*"
documentation: !string |-
// MaskedSaturatedPairDotProdAccumulate performs dot products on pairs of elements of y and z and accumulates the results to x.
- go: MaskedFusedMultiplyAdd
masked: "true"
commutative: "false"
extension: "AVX.*"
documentation: !string |-
// MaskedFusedMultiplyAdd performs `(v1 * v2) + v3`.
- go: MaskedFusedMultiplyAddSub
masked: "true"
commutative: "false"
extension: "AVX.*"
documentation: !string |-
// MaskedFusedMultiplyAddSub performs `(v1 * v2) - v3` for odd-indexed elements, and `(v1 * v2) + v3` for even-indexed elements.
- go: MaskedFusedMultiplySubAdd
masked: "true"
commutative: "false"
extension: "AVX.*"
documentation: !string |-
// MaskedFusedMultiplySubAdd performs `(v1 * v2) + v3` for odd-indexed elements, and `(v1 * v2) - v3` for even-indexed elements.
- go: Max
commutative: "true"
extension: "AVX.*"
documentation: !string |-
// Max computes the maximum of corresponding elements.
- go: MaskedMax
commutative: "true"
masked: "true"
extension: "AVX.*"
documentation: !string |-
// MaskedMax computes the maximum of corresponding elements.
- go: Min
commutative: "true"
extension: "AVX.*"
documentation: !string |-
// Min computes the minimum of corresponding elements.
- go: MaskedMin
commutative: "true"
masked: "true"
extension: "AVX.*"
documentation: !string |-
// MaskedMin computes the minimum of corresponding elements.
- go: SetElem
commutative: "false"
extension: "AVX.*"
documentation: !string |-
// SetElem sets a single constant-indexed element's value.
- go: GetElem
commutative: "false"
extension: "AVX.*"
documentation: !string |-
// GetElem retrieves a single constant-indexed element's value.
- go: Mul
commutative: "true"
extension: "AVX.*"
documentation: !string |-
// Mul multiplies corresponding elements of two vectors.
- go: MulEvenWiden
commutative: "true"
extension: "AVX.*"
documentation: !string |-
// MulEvenWiden multiplies even-indexed elements, widening the result.
// Result[i] = v1.Even[i] * v2.Even[i].
- go: MulHigh
commutative: "true"
extension: "AVX.*"
documentation: !string |-
// MulHigh multiplies elements and stores the high part of the result.
- go: MulLow
commutative: "true"
extension: "AVX.*"
documentation: !string |-
// MulLow multiplies elements and stores the low part of the result.
- go: MaskedMul
masked: "true"
commutative: "true"
extension: "AVX.*"
documentation: !string |-
// MaskedMul multiplies corresponding elements of two vectors, masked.
docUnmasked: !string |-
// Mul multiplies corresponding elements of two vectors.
- go: MaskedMulEvenWiden
masked: "true"
commutative: "true"
extension: "AVX.*"
documentation: !string |-
// MaskedMulEvenWiden multiplies even-indexed elements, widening the result, masked.
// Result[i] = v1.Even[i] * v2.Even[i].
docUnmasked: !string |-
// MulEvenWiden multiplies even-indexed elements, widening the result.
// Result[i] = v1.Even[i] * v2.Even[i].
- go: MaskedMulHigh
masked: "true"
commutative: "true"
extension: "AVX.*"
documentation: !string |-
// MaskedMulHigh multiplies elements and stores the high part of the result, masked.
docUnmasked: !string |-
// MulHigh multiplies elements and stores the high part of the result.
- go: MaskedMulLow
masked: "true"
commutative: "true"
extension: "AVX.*"
documentation: !string |-
// MaskedMulLow multiplies elements and stores the low part of the result, masked.
docUnmasked: !string |-
// MulLow multiplies elements and stores the low part of the result.
- go: ShiftAllLeft
nameAndSizeCheck: "true"
commutative: "false"
extension: "AVX.*"
documentation: !string |-
// ShiftAllLeft shifts each element to the left by the specified number of bits. Emptied lower bits are zeroed.
- go: MaskedShiftAllLeft
nameAndSizeCheck: "true"
masked: "true"
commutative: "false"
extension: "AVX.*"
documentation: !string |-
// MaskedShiftAllLeft shifts each element to the left by the specified number of bits. Emptied lower bits are zeroed.
- go: ShiftAllRight
nameAndSizeCheck: "true"
commutative: "false"
extension: "AVX.*"
documentation: !string |-
// ShiftAllRight shifts each element to the right by the specified number of bits. Emptied upper bits are zeroed.
- go: MaskedShiftAllRight
nameAndSizeCheck: "true"
masked: "true"
commutative: "false"
extension: "AVX.*"
documentation: !string |-
// MaskedShiftAllRight shifts each element to the right by the specified number of bits. Emptied upper bits are zeroed.
- go: ShiftAllRightSignExtended
nameAndSizeCheck: "true"
commutative: "false"
extension: "AVX.*"
documentation: !string |-
// ShiftAllRightSignExtended shifts each element to the right by the specified number of bits. Emptied upper bits are filled with the sign bit.
- go: MaskedShiftAllRightSignExtended
nameAndSizeCheck: "true"
masked: "true"
commutative: "false"
extension: "AVX.*"
documentation: !string |-
// MaskedShiftAllRightSignExtended shifts each element to the right by the specified number of bits. Emptied upper bits are filled with the sign bit.
- go: ShiftLeft
nameAndSizeCheck: "true"
commutative: "false"
extension: "AVX.*"
documentation: !string |-
// ShiftLeft shifts each element in x to the left by the number of bits specified in y's corresponding elements. Emptied lower bits are zeroed.
- go: MaskedShiftLeft
nameAndSizeCheck: "true"
masked: "true"
commutative: "false"
extension: "AVX.*"
documentation: !string |-
// MaskedShiftLeft shifts each element in x to the left by the number of bits specified in y's corresponding elements. Emptied lower bits are zeroed.
- go: ShiftRight
nameAndSizeCheck: "true"
commutative: "false"
extension: "AVX.*"
documentation: !string |-
// ShiftRight shifts each element in x to the right by the number of bits specified in y's corresponding elements. Emptied upper bits are zeroed.
- go: MaskedShiftRight
nameAndSizeCheck: "true"
masked: "true"
commutative: "false"
extension: "AVX.*"
documentation: !string |-
// MaskedShiftRight shifts each element in x to the right by the number of bits specified in y's corresponding elements. Emptied upper bits are zeroed.
- go: ShiftRightSignExtended
nameAndSizeCheck: "true"
commutative: "false"
extension: "AVX.*"
documentation: !string |-
// ShiftRightSignExtended shifts each element in x to the right by the number of bits specified in y's corresponding elements. Emptied upper bits are filled with the sign bit.
- go: MaskedShiftRightSignExtended
nameAndSizeCheck: "true"
masked: "true"
commutative: "false"
extension: "AVX.*"
documentation: !string |-
// MaskedShiftRightSignExtended shifts each element in x to the right by the number of bits specified in y's corresponding elements. Emptied upper bits are filled with the sign bit.
- go: MaskedRotateAllLeft
nameAndSizeCheck: "true"
masked: "true"
commutative: "false"
extension: "AVX.*"
documentation: !string |-
// MaskedRotateAllLeft rotates each element to the left by the number of bits specified by the immediate.
- go: MaskedRotateLeft
nameAndSizeCheck: "true"
masked: "true"
commutative: "false"
extension: "AVX.*"
documentation: !string |-
// MaskedRotateLeft rotates each element in x to the left by the number of bits specified by y's corresponding elements.
- go: MaskedRotateAllRight
nameAndSizeCheck: "true"
masked: "true"
commutative: "false"
extension: "AVX.*"
documentation: !string |-
// MaskedRotateAllRight rotates each element to the right by the number of bits specified by the immediate.
- go: MaskedRotateRight
nameAndSizeCheck: "true"
masked: "true"
commutative: "false"
extension: "AVX.*"
documentation: !string |-
// MaskedRotateRight rotates each element in x to the right by the number of bits specified by y's corresponding elements.
- go: MaskedShiftAllLeftAndFillUpperFrom
nameAndSizeCheck: "true"
masked: "true"
commutative: "false"
extension: "AVX.*"
documentation: !string |-
// MaskedShiftAllLeftAndFillUpperFrom shifts each element of x to the left by the number of bits specified by the
// immediate(only the lower 5 bits are used), and then copies the upper bits of y to the emptied lower bits of the shifted x.
- go: MaskedShiftAllRightAndFillUpperFrom
nameAndSizeCheck: "true"
masked: "true"
commutative: "false"
extension: "AVX.*"
documentation: !string |-
// MaskedShiftAllRightAndFillUpperFrom shifts each element of x to the right by the number of bits specified by the
// immediate(only the lower 5 bits are used), and then copies the lower bits of y to the emptied upper bits of the shifted x.
- go: MaskedShiftLeftAndFillUpperFrom
nameAndSizeCheck: "true"
masked: "true"
commutative: "false"
extension: "AVX.*"
documentation: !string |-
// MaskedShiftLeftAndFillUpperFrom shifts each element of x to the left by the number of bits specified by the
// corresponding elements in y(only the lower 5 bits are used), and then copies the upper bits of z to the emptied lower bits of the shifted x.
- go: MaskedShiftRightAndFillUpperFrom
nameAndSizeCheck: "true"
masked: "true"
commutative: "false"
extension: "AVX.*"
documentation: !string |-
// MaskedShiftRightAndFillUpperFrom shifts each element of x to the right by the number of bits specified by the
// corresponding elements in y(only the lower 5 bits are used), and then copies the lower bits of z to the emptied upper bits of the shifted x.