| !sum |
| # In the XED data, *all* floating point bitwise logic operation has their |
| # operand type marked as uint. We are not trying to understand why Intel |
| # decided that they want FP bit-wise logic operations, but this irregularity |
| # has to be dealed with in separate rules with some overwrites. |
| |
| # Int/Uint operations. |
| # Non-masked for 128/256-bit vectors |
| # For binary operations, we constrain their two inputs and one output to the |
| # same Go type using a variable. This will map to instructions before AVX512. |
| - go: And |
| asm: "VPAND" |
| in: |
| - &any |
| go: $t |
| - *any |
| out: |
| - *any |
| # Masked |
| # Looks like VPAND$xi works only for 2 shapes for integer: |
| # Dword and Qword. |
| # TODO: should we wildcard other smaller elemBits to VPANDQ or |
| # VPANDD? Looks like elemBits doesn't really matter afterall in bitwise operations. |
| - go: MaskedAnd |
| asm: "VPAND[DQ]" |
| in: |
| - class: mask |
| - *any |
| - *any |
| out: |
| - *any |
| |
| - go: AndNot |
| asm: "VPANDN" |
| in: |
| - *any |
| - *any |
| out: |
| - *any |
| - go: MaskedAndNot |
| asm: "VPANDN[DQ]" |
| in: |
| - class: mask |
| - *any |
| - *any |
| out: |
| - *any |
| |
| - go: Or |
| asm: "VPOR" |
| in: |
| - *any |
| - *any |
| out: |
| - *any |
| - go: MaskedOr |
| asm: "VPOR[DQ]" |
| in: |
| - class: mask |
| - *any |
| - *any |
| out: |
| - *any |
| |
| - go: Xor |
| asm: "VPXOR" |
| in: |
| - *any |
| - *any |
| out: |
| - *any |
| - go: MaskedXor |
| asm: "VPXOR[DQ]" |
| in: |
| - class: mask |
| - *any |
| - *any |
| out: |
| - *any |
| |
| # FP operations. |
| # Set the [base] to be "int" to not include duplicates(excluding "uint"). |
| # [base] is not used when [overwriteBase] is present. |
| - go: And |
| asm: "VANDP[SD]" |
| in: |
| - &intToFloat |
| go: $t |
| base: int |
| overwriteBase: float |
| - *intToFloat |
| out: |
| - *intToFloat |
| - go: MaskedAnd |
| asm: "VANDP[SD]" |
| in: |
| - class: mask |
| - *intToFloat |
| - *intToFloat |
| out: |
| - *intToFloat |
| |
| - go: AndNot |
| asm: "VANDNP[SD]" |
| in: |
| - *intToFloat |
| - *intToFloat |
| out: |
| - *intToFloat |
| - go: MaskedAndNot |
| asm: "VANDNP[SD]" |
| in: |
| - class: mask |
| - *intToFloat |
| - *intToFloat |
| out: |
| - *intToFloat |
| |
| - go: Or |
| asm: "VORP[SD]" |
| in: |
| - *intToFloat |
| - *intToFloat |
| out: |
| - *intToFloat |
| - go: MaskedOr |
| asm: "VORP[SD]" |
| in: |
| - class: mask |
| - *intToFloat |
| - *intToFloat |
| out: |
| - *intToFloat |
| |
| - go: Xor |
| asm: "VXORP[SD]" |
| in: |
| - *intToFloat |
| - *intToFloat |
| out: |
| - *intToFloat |
| - go: MaskedXor |
| asm: "VXORP[SD]" |
| in: |
| - class: mask |
| - *intToFloat |
| - *intToFloat |
| out: |
| - *intToFloat |