!sum
# "Normal" multiplication is only available for floats.
# This only covers the single and double precision.
- go: Mul
  asm: "VMULP[SD]"
  in:
  - &fp
    go: $t
    base: float
  - *fp
  out:
  - *fp

# Integer multiplications.

# MulEvenWiden
# Dword only.
- go: MulEvenWiden
  asm: "VPMULDQ"
  in:
  - &intNot64
    go: $t
    elemBits: 8|16|32
    base: int
  - *intNot64
  out:
  - &int2
    go: $t2
    base: int
- go: MulEvenWiden
  asm: "VPMULUDQ"
  in:
  - &uintNot64
    go: $t
    elemBits: 8|16|32
    base: uint
  - *uintNot64
  out:
  - &uint2
    go: $t2
    base: uint

# MulHigh
# Word only.
- go: MulHigh
  asm: "VPMULHW"
  in:
  - &int
    go: $t
    base: int
  - *int
  out:
  - *int
- go: MulHigh
  asm: "VPMULHUW"
  in:
  - &uint
    go: $t
    base: uint
  - *uint
  out:
  - *uint

# MulLow
# signed and unsigned are the same for lower bits.
- go: Mul
  asm: "VPMULL[WDQ]"
  in:
  - &any
    go: $t
  - *any
  out:
  - *any
