blob: f839f69bdb7c901af271f80baa7b18381153ec9d [file] [log] [blame]
!sum
- 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: AddMasked
masked: true
commutative: true
extension: "AVX.*"
documentation: !string |-
// AddMasked adds corresponding elements of two vectors.
- go: SaturatedAddMasked
masked: true
commutative: true
extension: "AVX.*"
documentation: !string |-
// SaturatedAddMasked 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: SubMasked
masked: true
commutative: false
extension: "AVX.*"
documentation: !string |-
// SubMasked subtracts corresponding elements of two vectors.
- go: SaturatedSubMasked
masked: true
commutative: false
extension: "AVX.*"
documentation: !string |-
// SaturatedSubMasked 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: AndMasked
masked: true
commutative: true
extension: "AVX.*"
documentation: !string |-
// AndMasked performs a bitwise AND operation between two vectors.
- go: Or
commutative: true
extension: "AVX.*"
documentation: !string |-
// Or performs a bitwise OR operation between two vectors.
- go: OrMasked
masked: true
commutative: true
extension: "AVX.*"
documentation: !string |-
// OrMasked performs a bitwise OR operation between two vectors.
- go: AndNot
commutative: false
extension: "AVX.*"
documentation: !string |-
// AndNot performs a bitwise x &^ y.
- go: AndNotMasked
masked: true
commutative: false
extension: "AVX.*"
documentation: !string |-
// AndNotMasked performs a bitwise x &^ y.
- go: Xor
commutative: true
extension: "AVX.*"
documentation: !string |-
// Xor performs a bitwise XOR operation between two vectors.
- go: XorMasked
masked: true
commutative: true
extension: "AVX.*"
documentation: !string |-
// XorMasked performs a 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.
- go: Less
constImm: 1
commutative: false
extension: "AVX.*"
documentation: !string |-
// Less compares for less than.
- go: LessEqual
constImm: 2
commutative: false
extension: "AVX.*"
documentation: !string |-
// LessEqual compares for less than or equal.
- go: IsNan # For float only.
constImm: 3
commutative: true
extension: "AVX.*"
documentation: !string |-
// IsNan checks if elements are NaN. Use as x.IsNan(x).
- go: NotEqual
constImm: 4
commutative: true
extension: "AVX.*"
documentation: !string |-
// NotEqual compares for inequality.
- go: GreaterEqual
constImm: 13
commutative: false
extension: "AVX.*"
documentation: !string |-
// GreaterEqual compares for greater than or equal.
- go: Greater
constImm: 14
commutative: false
extension: "AVX.*"
documentation: !string |-
// Greater compares for greater than.
- go: EqualMasked
constImm: 0
masked: true
commutative: true
extension: "AVX.*"
documentation: !string |-
// EqualMasked compares for equality.
- go: LessMasked
constImm: 1
masked: true
commutative: false
extension: "AVX.*"
documentation: !string |-
// LessMasked compares for less than.
- go: LessEqualMasked
constImm: 2
masked: true
commutative: false
extension: "AVX.*"
documentation: !string |-
// LessEqualMasked compares for less than or equal.
- go: IsNanMasked # For float only.
constImm: 3
masked: true
commutative: true
extension: "AVX.*"
documentation: !string |-
// IsNanMasked checks if elements are NaN. Use as x.IsNan(x).
- go: NotEqualMasked
constImm: 4
masked: true
commutative: true
extension: "AVX.*"
documentation: !string |-
// NotEqualMasked compares for inequality.
- go: GreaterEqualMasked
constImm: 13
masked: true
commutative: false
extension: "AVX.*"
documentation: !string |-
// GreaterEqualMasked compares for greater than or equal.
- go: GreaterMasked
constImm: 14
masked: true
commutative: false
extension: "AVX.*"
documentation: !string |-
// GreaterMasked compares for greater than.
- go: Div
commutative: false
extension: "AVX.*"
documentation: !string |-
// Div divides elements of two vectors.
- go: DivMasked
commutative: false
masked: true
extension: "AVX.*"
documentation: !string |-
// DivMasked divides elements of two vectors.
- go: Sqrt
commutative: false
extension: "AVX.*"
documentation: !string |-
// Sqrt computes the square root of each element.
- go: SqrtMasked
commutative: false
masked: true
extension: "AVX.*"
documentation: !string |-
// SqrtMasked computes the square root of each element.
- go: ApproximateReciprocal
commutative: false
extension: "AVX.*"
documentation: !string |-
// ApproximateReciprocal computes an approximate reciprocal of each element.
- go: ApproximateReciprocalMasked
commutative: false
masked: true
extension: "AVX.*"
documentation: !string |-
// ApproximateReciprocalMasked 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: ApproximateReciprocalOfSqrtMasked
commutative: false
masked: true
extension: "AVX.*"
documentation: !string |-
// ApproximateReciprocalOfSqrtMasked computes an approximate reciprocal of the square root of each element.
- go: MulByPowOf2Masked # This operation is all after AVX512, the unmasked version will be generated.
commutative: false
masked: true
extension: "AVX.*"
documentation: !string |-
// MulByPowOf2Masked multiplies elements by a power of 2.
- go: Round
commutative: false
extension: "AVX.*"
constImm: 0
documentation: !string |-
// Round rounds elements to the nearest integer.
- go: RoundWithPrecisionMasked
commutative: false
extension: "AVX.*"
constImm: 0
masked: true
documentation: !string |-
// RoundWithPrecisionMasked rounds elements with specified precision.
- go: DiffWithRoundWithPrecisionMasked
commutative: false
extension: "AVX.*"
constImm: 0
masked: true
documentation: !string |-
// DiffWithRoundWithPrecisionMasked computes the difference after rounding with specified precision.
- go: Floor
commutative: false
extension: "AVX.*"
constImm: 1
documentation: !string |-
// Floor rounds elements down to the nearest integer.
- go: FloorWithPrecisionMasked
commutative: false
extension: "AVX.*"
constImm: 1
masked: true
documentation: !string |-
// FloorWithPrecisionMasked rounds elements down with specified precision.
- go: DiffWithFloorWithPrecisionMasked
commutative: false
extension: "AVX.*"
constImm: 1
masked: true
documentation: !string |-
// DiffWithFloorWithPrecisionMasked computes the difference after flooring with specified precision.
- go: Ceil
commutative: false
extension: "AVX.*"
constImm: 2
documentation: !string |-
// Ceil rounds elements up to the nearest integer.
- go: CeilWithPrecisionMasked
commutative: false
extension: "AVX.*"
constImm: 2
masked: true
documentation: !string |-
// CeilWithPrecisionMasked rounds elements up with specified precision.
- go: DiffWithCeilWithPrecisionMasked
commutative: false
extension: "AVX.*"
constImm: 2
masked: true
documentation: !string |-
// DiffWithCeilWithPrecisionMasked computes the difference after ceiling with specified precision.
- go: Trunc
commutative: false
extension: "AVX.*"
constImm: 3
documentation: !string |-
// Trunc truncates elements towards zero.
- go: TruncWithPrecisionMasked
commutative: false
extension: "AVX.*"
constImm: 3
masked: true
documentation: !string |-
// TruncWithPrecisionMasked truncates elements with specified precision.
- go: DiffWithTruncWithPrecisionMasked
commutative: false
extension: "AVX.*"
constImm: 3
masked: true
documentation: !string |-
// DiffWithTruncWithPrecisionMasked computes the difference after truncating with specified precision.
- go: AddSub
commutative: false
extension: "AVX.*"
documentation: !string |-
// AddSub subtracts even elements and adds odd elements of two vectors.
- go: GaloisFieldAffineTransformMasked
masked: true
commutative: false
extension: "AVX.*"
documentation: !string |-
// GaloisFieldAffineTransformMasked 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;
// b is an 8-bit vector. The affine transformation is y * x + b, with each element of y
// corresponding to a group of 8 elements in x.
- go: GaloisFieldAffineTransformInverseMasked
masked: true
commutative: false
extension: "AVX.*"
documentation: !string |-
// GaloisFieldAffineTransformInverseMasked computes an affine transformation in GF(2^8),
// with x inverted with respect to 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;
// b is an 8-bit vector. The affine transformation is y * x + b, with each element of y
// corresponding to a group of 8 elements in x.
- go: GaloisFieldMulMasked
masked: true
commutative: false
extension: "AVX.*"
documentation: !string |-
// GaloisFieldMulMasked 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: AverageMasked
commutative: true
masked: true
extension: "AVX512.*" # Masked operations are typically AVX512
documentation: !string |-
// AverageMasked 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: AbsoluteMasked
commutative: false
masked: true
extension: "AVX512.*"
documentation: !string |-
// AbsoluteMasked 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: PopCountMasked
commutative: false
masked: true
extension: "AVX512.*" # VPOPCNT instructions are AVX512 (BITALG or VPOPCNTDQ)
documentation: !string |-
// PopCountMasked 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: PairDotProdMasked
masked: true
commutative: false
extension: "AVX.*"
documentation: !string |-
// PairDotProdMasked multiplies the elements and add the pairs together,
// yielding a vector of half as many elements with twice the input element size.
# TODO: maybe simplify this name within the receiver-type + method-naming scheme we use.
- go: SaturatedUnsignedSignedPairDotProd
commutative: false
extension: "AVX.*"
documentation: !string |-
// SaturatedUnsignedSignedPairDotProd 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: SaturatedUnsignedSignedPairDotProdMasked
masked: true
commutative: false
extension: "AVX.*"
documentation: !string |-
// SaturatedUnsignedSignedPairDotProdMasked 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.
- go: UnsignedSignedQuadDotProdAccumulate
commutative: false
extension: "AVX.*"
documentation: !string |-
// UnsignedSignedQuadDotProdAccumulate performs dot products on groups of 4 elements of x and y and then adds z.
- go: UnsignedSignedQuadDotProdAccumulateMasked
masked: true
commutative: false
extension: "AVX.*"
documentation: !string |-
// UnsignedSignedQuadDotProdAccumulateMasked performs dot products on groups of 4 elements of x and y and then adds z.
- go: SaturatedUnsignedSignedQuadDotProdAccumulate
commutative: false
extension: "AVX.*"
documentation: !string |-
// SaturatedUnsignedSignedQuadDotProdAccumulate multiplies performs dot products on groups of 4 elements of x and y and then adds z.
- go: SaturatedUnsignedSignedQuadDotProdAccumulateMasked
masked: true
commutative: false
extension: "AVX.*"
documentation: !string |-
// SaturatedUnsignedSignedQuadDotProdAccumulateMasked multiplies performs dot products on groups of 4 elements of x and y and then adds z.
- go: PairDotProdAccumulate
commutative: false
extension: "AVX.*"
documentation: !string |-
// PairDotProdAccumulate performs dot products on pairs of elements of x and y and then adds z.
- go: PairDotProdAccumulateMasked
masked: true
commutative: false
extension: "AVX.*"
documentation: !string |-
// PairDotProdAccumulateMasked performs dot products on pairs of elements of x and y and then adds z.
- go: SaturatedPairDotProdAccumulate
commutative: false
extension: "AVX.*"
documentation: !string |-
// SaturatedPairDotProdAccumulate performs dot products on pairs of elements of x and y and then adds z.
- go: SaturatedPairDotProdAccumulateMasked
masked: true
commutative: false
extension: "AVX.*"
documentation: !string |-
// SaturatedPairDotProdAccumulateMasked performs dot products on pairs of elements of x and y and then adds z.
- go: FusedMultiplyAddMasked
masked: true
commutative: false
extension: "AVX.*"
documentation: !string |-
// FusedMultiplyAddMasked performs (x * y) + z.
- go: FusedMultiplyAddSubMasked
masked: true
commutative: false
extension: "AVX.*"
documentation: !string |-
// FusedMultiplyAddSubMasked performs (x * y) - z for odd-indexed elements, and (x * y) + z for even-indexed elements.
- go: FusedMultiplySubAddMasked
masked: true
commutative: false
extension: "AVX.*"
documentation: !string |-
// FusedMultiplySubAddMasked performs (x * y) + z for odd-indexed elements, and (x * y) - z for even-indexed elements.
- go: Max
commutative: true
extension: "AVX.*"
documentation: !string |-
// Max computes the maximum of corresponding elements.
- go: MaxMasked
commutative: true
masked: true
extension: "AVX.*"
documentation: !string |-
// MaxMasked computes the maximum of corresponding elements.
- go: Min
commutative: true
extension: "AVX.*"
documentation: !string |-
// Min computes the minimum of corresponding elements.
- go: MinMasked
commutative: true
masked: true
extension: "AVX.*"
documentation: !string |-
// MinMasked 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: Set128
commutative: false
extension: "AVX.*"
documentation: !string |-
// Set128 combines a 128-bit vector with a 256-bit vector, where the constant operand specifies whether the low (0) or high (1) half is receives the smaller vector.
- go: Get128
commutative: false
extension: "AVX.*"
documentation: !string |-
// Get128 retrieves the upper (1) or lower (0) half of a 256-bit vector, depending on the constant operand.
- go: Permute
commutative: false
extension: "AVX.*"
documentation: !string |-
// Permute performs a full permutation of vector x using indices:
// result := {x[indices[0]], x[indices[1]], ..., x[indices[n]]}
// Only the needed bits to represent x's index are used in indices' elements.
- go: PermuteMasked
commutative: false
masked: true
extension: "AVX.*"
documentation: !string |-
// PermuteMasked performs a full permutation of vector y using indices:
// result := {x[indices[0]], x[indices[1]], ..., x[indices[n]]}
// Only the needed bits to represent x's index are used in indices' elements.
- go: Permute2Masked # Permute2Masked is only available on or after AVX512
commutative: false
masked: true
extension: "AVX.*"
documentation: !string |-
// Permute2Masked performs a full permutation of vector x, y using indices:
// result := {xy[indices[0]], xy[indices[1]], ..., xy[indices[n]]}
// where xy is x appending y.
// Only the needed bits to represent xy's index are used in indices' elements.
- go: Compress
commutative: false
# The mask in Compress is a control mask rather than a write mask, so we don't mark it "masked"
extension: "AVX.*"
documentation: !string |-
// Compress performs a compression on vector x using mask by
// selecting elements as indicated by mask, and pack them to lower indexed elements.
- 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: MulMasked
masked: true
commutative: true
extension: "AVX.*"
documentation: !string |-
// MulMasked multiplies corresponding elements of two vectors.
- go: MulEvenWidenMasked
masked: true
commutative: true
extension: "AVX.*"
documentation: !string |-
// MulEvenWidenMasked multiplies even-indexed elements, widening the result.
// Result[i] = v1.Even[i] * v2.Even[i].
- go: MulHighMasked
masked: true
commutative: true
extension: "AVX.*"
documentation: !string |-
// MulHighMasked multiplies elements and stores the high part of the result.
- go: MulLowMasked
masked: true
commutative: true
extension: "AVX.*"
documentation: !string |-
// MulLowMasked 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: ShiftAllLeftMasked
nameAndSizeCheck: true
masked: true
commutative: false
extension: "AVX.*"
documentation: !string |-
// ShiftAllLeftMasked shifts each element to the left by the specified number of bits. Emptied lower bits are zeroed.
- go: ShiftAllRight
signed: false
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: ShiftAllRightMasked
signed: false
nameAndSizeCheck: true
masked: true
commutative: false
extension: "AVX.*"
documentation: !string |-
// ShiftAllRightMasked shifts each element to the right by the specified number of bits. Emptied upper bits are zeroed.
- go: ShiftAllRight
signed: true
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 filled with the sign bit.
- go: ShiftAllRightMasked
signed: true
nameAndSizeCheck: true
masked: true
commutative: false
extension: "AVX.*"
documentation: !string |-
// ShiftAllRightMasked 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: ShiftLeftMasked
nameAndSizeCheck: true
masked: true
commutative: false
extension: "AVX.*"
documentation: !string |-
// ShiftLeftMasked 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
signed: false
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: ShiftRightMasked
signed: false
nameAndSizeCheck: true
masked: true
commutative: false
extension: "AVX.*"
documentation: !string |-
// ShiftRightMasked 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: ShiftRight
signed: true
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 filled with the sign bit.
- go: ShiftRightMasked
signed: true
nameAndSizeCheck: true
masked: true
commutative: false
extension: "AVX.*"
documentation: !string |-
// ShiftRightMasked 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: RotateAllLeftMasked
nameAndSizeCheck: true
masked: true
commutative: false
extension: "AVX.*"
documentation: !string |-
// RotateAllLeftMasked rotates each element to the left by the number of bits specified by the immediate.
- go: RotateLeftMasked
nameAndSizeCheck: true
masked: true
commutative: false
extension: "AVX.*"
documentation: !string |-
// RotateLeftMasked rotates each element in x to the left by the number of bits specified by y's corresponding elements.
- go: RotateAllRightMasked
nameAndSizeCheck: true
masked: true
commutative: false
extension: "AVX.*"
documentation: !string |-
// RotateAllRightMasked rotates each element to the right by the number of bits specified by the immediate.
- go: RotateRightMasked
nameAndSizeCheck: true
masked: true
commutative: false
extension: "AVX.*"
documentation: !string |-
// RotateRightMasked rotates each element in x to the right by the number of bits specified by y's corresponding elements.
- go: ShiftAllLeftAndFillUpperFromMasked
nameAndSizeCheck: true
masked: true
commutative: false
extension: "AVX.*"
documentation: !string |-
// ShiftAllLeftAndFillUpperFromMasked 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: ShiftAllRightAndFillUpperFromMasked
nameAndSizeCheck: true
masked: true
commutative: false
extension: "AVX.*"
documentation: !string |-
// ShiftAllRightAndFillUpperFromMasked 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: ShiftLeftAndFillUpperFromMasked
nameAndSizeCheck: true
masked: true
commutative: false
extension: "AVX.*"
documentation: !string |-
// ShiftLeftAndFillUpperFromMasked 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: ShiftRightAndFillUpperFromMasked
nameAndSizeCheck: true
masked: true
commutative: false
extension: "AVX.*"
documentation: !string |-
// ShiftRightAndFillUpperFromMasked 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.