blob: 9d1fd5d7008f3a2e8259b5d51c7eab3aabe30608 [file]
!sum
- go: Add
commutative: "true"
extension: "AVX.*"
- go: SaturatedAdd
commutative: "true"
extension: "AVX.*"
- go: MaskedAdd
masked: "true"
commutative: "true"
extension: "AVX.*"
- go: MaskedSaturatedAdd
masked: "true"
commutative: "true"
extension: "AVX.*"
- go: Sub
commutative: "false"
extension: "AVX.*"
- go: SaturatedSub
commutative: "false"
extension: "AVX.*"
- go: MaskedSub
masked: "true"
commutative: "false"
extension: "AVX.*"
- go: MaskedSaturatedSub
masked: "true"
commutative: "false"
extension: "AVX.*"
- go: PairwiseAdd
commutative: "false"
extension: "AVX.*"
documentation: "Add pairs of elements in vector x and store them in higher half of the target; Add pairs of elements in vector y and store them in lower half of the target"
- go: PairwiseSub
commutative: "false"
extension: "AVX.*"
documentation: "Sub pairs of elements in vector x and store them in higher half of the target; Sub pairs of elements in vector y and store them in lower half of the target"
- go: SaturatedPairwiseAdd
commutative: "false"
extension: "AVX.*"
documentation: "Add pairs of elements in vector x and store them in higher half of the target; Add pairs of elements in vector y and store them in lower half of the target; With saturation"
- go: SaturatedPairwiseSub
commutative: "false"
extension: "AVX.*"
documentation: "Sub pairs of elements in vector x and store them in higher half of the target; Sub pairs of elements in vector y and store them in lower half of the target; With saturation"
- go: And
commutative: "true"
extension: "AVX.*"
- go: MaskedAnd
masked: "true"
commutative: "true"
extension: "AVX.*"
- go: Or
commutative: "true"
extension: "AVX.*"
- go: MaskedOr
masked: "true"
commutative: "true"
extension: "AVX.*"
- go: AndNot
commutative: "true"
extension: "AVX.*"
- go: MaskedAndNot
masked: "true"
commutative: "true"
extension: "AVX.*"
- go: Xor
commutative: "true"
extension: "AVX.*"
- go: MaskedXor
masked: "true"
commutative: "true"
extension: "AVX.*"
# 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: "Predicate immediate is 0 if it has;"
- go: Less
constImm: 1
commutative: "false"
extension: "AVX.*"
documentation: "Predicate immediate is 1 if it has;"
- go: LessEqual
constImm: 2
commutative: "false"
extension: "AVX.*"
documentation: "Predicate immediate is 2 if it has;"
- go: IsNan # For float only.
constImm: 3
commutative: "true"
extension: "AVX.*"
documentation: "Predicate immediate is 3 if it has; Returns mask element True if either one of the input\\'s element is Nan; Please use this method as x\\.IsNan\\(x\\) to check x only;"
- go: NotEqual
constImm: 4
commutative: "true"
extension: "AVX.*"
documentation: "Predicate immediate is 4 if it has;"
- go: GreaterEqual
constImm: 5
commutative: "false"
extension: "AVX.*"
documentation: "Predicate immediate is 5 if it has;"
- go: Greater
constImm: 6
commutative: "false"
extension: "AVX.*"
documentation: "Predicate immediate is 6 if it has;"
- go: MaskedEqual
constImm: 0
masked: "true"
commutative: "true"
extension: "AVX.*"
documentation: "Predicate immediate is 0 if it has;"
- go: MaskedLess
constImm: 1
masked: "true"
commutative: "false"
extension: "AVX.*"
documentation: "Predicate immediate is 1 if it has;"
- go: MaskedLessEqual
constImm: 2
masked: "true"
commutative: "false"
extension: "AVX.*"
documentation: "Predicate immediate is 2 if it has;"
- go: MaskedIsNan # For float only.
constImm: 3
masked: "true"
commutative: "true"
extension: "AVX.*"
documentation: "Predicate immediate is 3 if it has; Returns mask element True if either one of the input\\'s element is Nan; Please use this method as x\\.IsNan\\(x\\) to check x only;"
- go: MaskedNotEqual
constImm: 4
masked: "true"
commutative: "true"
extension: "AVX.*"
documentation: "Predicate immediate is 4 if it has;"
- go: MaskedGreaterEqual
constImm: 5
masked: "true"
commutative: "false"
extension: "AVX.*"
documentation: "Predicate immediate is 5 if it has;"
- go: MaskedGreater
constImm: 6
masked: "true"
commutative: "false"
extension: "AVX.*"
documentation: "Predicate immediate is 6 if it has;"
- go: Div
commutative: "false"
extension: "AVX.*"
- go: MaskedDiv
commutative: "false"
masked: "true"
extension: "AVX.*"
- go: Sqrt
commutative: "false"
extension: "AVX.*"
- go: MaskedSqrt
commutative: "false"
masked: "true"
extension: "AVX.*"
- go: ApproximateReciprocal
commutative: "false"
extension: "AVX.*"
- go: MaskedApproximateReciprocal
commutative: "false"
masked: "true"
extension: "AVX.*"
- go: ApproximateReciprocalOfSqrt
commutative: "false"
extension: "AVX.*"
- go: MaskedApproximateReciprocalOfSqrt
commutative: "false"
masked: "true"
extension: "AVX.*"
- go: MaskedMulByPowOf2 # This operation is all after AVX512, the unmasked version will be generated.
commutative: "false"
masked: "true"
extension: "AVX.*"
- go: Average
commutative: "true"
extension: "AVX.*" # VPAVGB/W are available across various AVX versions
- go: MaskedAverage
commutative: "true"
masked: "true"
extension: "AVX512.*" # Masked operations are typically AVX512
- go: Absolute
commutative: "false"
# Unary operation, not commutative
extension: "AVX.*" # VPABSB/W/D are AVX, VPABSQ is AVX512
- go: MaskedAbsolute
commutative: "false"
masked: "true"
extension: "AVX512.*"
- go: Sign
# Applies sign of second operand to first: sign(val, sign_src)
commutative: "false"
extension: "AVX.*"
# Sign does not have masked version
- go: MaskedPopCount
commutative: "false"
masked: "true"
extension: "AVX512.*" # VPOPCNT instructions are AVX512 (BITALG or VPOPCNTDQ)
- go: Max
commutative: "true"
extension: "AVX.*"
- go: MaskedMax
commutative: "true"
masked: "true"
extension: "AVX.*"
- go: Min
commutative: "true"
extension: "AVX.*"
- go: MaskedMin
commutative: "true"
masked: "true"
extension: "AVX.*"
- go: Mul
commutative: "true"
extension: "AVX.*"
- go: MulEvenWiden
commutative: "true"
extension: "AVX.*"
documentation: "Multiplies the even index elements from the two sources of size X at index i, store the result of size 2X at index i/2"
- go: MulHigh
commutative: "true"
extension: "AVX.*"
documentation: "Multiplies the elements from the two sources of size X at index i, store the high X bits of the result of size 2X at index i"
- go: MulLow
commutative: "true"
extension: "AVX.*"
documentation: "Multiplies the elements from the two sources of size X at index i, store the low X bits of the result of size 2X at index i"
- go: MaskedMul
masked: "true"
commutative: "true"
extension: "AVX.*"
- go: MaskedMulEvenWiden
masked: "true"
commutative: "true"
extension: "AVX.*"
documentation: "Multiplies the even index elements from the two sources of size X at index i, store the result of size 2X at index i/2"
- go: MaskedMulHigh
masked: "true"
commutative: "true"
extension: "AVX.*"
documentation: "Multiplies the elements from the two sources of size X at index i, store the high X bits of the result of size 2X at index i"
- go: MaskedMulLow
masked: "true"
commutative: "true"
extension: "AVX.*"
documentation: "Multiplies the elements from the two sources of size X at index i, store the low X bits of the result of size 2X at index i"