blob: 7e7adf7a7bf024414f44a2eb17304b2f99d0dea3 [file] [log] [blame]
!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