blob: c1dd6e4d7156cf75a36139ef793d6a5d43883884 [file] [log] [blame]
!sum
- go: SetElem
asm: "VPINSR[BWDQ]"
in:
- &t
class: vreg
base: $b
- class: greg
base: $b
lanes: 1 # Scalar, darn it!
- &imm
class: immediate
immOffset: 0
name: index
out:
- *t
- go: GetElem
asm: "VPEXTR[BWDQ]"
in:
- class: vreg
base: $b
elemBits: $e
- *imm
out:
- class: greg
base: $b
bits: $e
- go: Set128
asm: "VINSERTI128"
in:
- &i8x32
class: vreg
base: $t
bits: 256
OverwriteElementBits: 8
- &i8x16
class: vreg
base: $t
bits: 128
OverwriteElementBits: 8
- &imm01 # This immediate should be only 0 or 1
class: immediate
immOffset: 0
name: index
out:
- *i8x32
- go: Get128
asm: "VEXTRACTI128"
in:
- *i8x32
- *imm01
out:
- *i8x16
- go: Set128
asm: "VINSERTI128"
in:
- &i16x16
class: vreg
base: $t
bits: 256
OverwriteElementBits: 16
- &i16x8
class: vreg
base: $t
bits: 128
OverwriteElementBits: 16
- *imm01
out:
- *i16x16
- go: Get128
asm: "VEXTRACTI128"
in:
- *i16x16
- *imm01
out:
- *i16x8
- go: Set128
asm: "VINSERTI128"
in:
- &i32x8
class: vreg
base: $t
bits: 256
OverwriteElementBits: 32
- &i32x4
class: vreg
base: $t
bits: 128
OverwriteElementBits: 32
- *imm01
out:
- *i32x8
- go: Get128
asm: "VEXTRACTI128"
in:
- *i32x8
- *imm01
out:
- *i32x4
- go: Set128
asm: "VINSERTI128"
in:
- &i64x4
class: vreg
base: $t
bits: 256
OverwriteElementBits: 64
- &i64x2
class: vreg
base: $t
bits: 128
OverwriteElementBits: 64
- *imm01
out:
- *i64x4
- go: Get128
asm: "VEXTRACTI128"
in:
- *i64x4
- *imm01
out:
- *i64x2
- go: Set128
asm: "VINSERTF128"
in:
- &f32x8
class: vreg
base: $t
bits: 256
OverwriteElementBits: 32
- &f32x4
class: vreg
base: $t
bits: 128
OverwriteElementBits: 32
- *imm01
out:
- *f32x8
- go: Get128
asm: "VEXTRACTF128"
in:
- *f32x8
- *imm01
out:
- *f32x4
- go: Set128
asm: "VINSERTF128"
in:
- &f64x4
class: vreg
base: $t
bits: 256
- &f64x2
class: vreg
base: $t
bits: 128
- *imm01
out:
- *f64x4
- go: Get128
asm: "VEXTRACTF128"
in:
- *f64x4
- *imm01
out:
- *f64x2
- go: Permute
asm: "VPERM[BWDQ]|VPERMP[SD]"
operandOrder: "21Type1"
in:
- &anyindices
go: $t
name: indices
overwriteBase: uint
- &any
go: $t
out:
- *any
- go: Permute2
asm: "VPERMI2[BWDQ]|VPERMI2P[SD]"
# Because we are overwriting the receiver's type, we
# have to move the receiver to be a parameter so that
# we can have no duplication.
operandOrder: "231Type1"
in:
- *anyindices # result in arg 0
- *any
- *any
out:
- *any
- go: Compress
asm: "VPCOMPRESS[BWDQ]|VCOMPRESSP[SD]"
in:
# The mask in Compress is a control mask rather than a write mask, so it's not optional.
- class: mask
- *any
out:
- *any