| !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" |