all: add GFNI instructions (#344)

Adds support for the GFNI "Galois Field New Instructions" instruction set.

These instructions are not included in the Opcodes database, therefore they're
added using the "extras" mechanism introduced in #345.

For simplicity, the loading phase is updated slightly so that AVX-512 form
expansion rules are applied after extras are added to the list. This greatly
reduces the number of forms that have to be specified by hand.

Based on #343
Fixes #335

Co-authored-by: Klaus Post <klauspost@gmail.com>
This commit is contained in:
Michael McLoughlin
2022-11-27 18:53:46 -08:00
committed by GitHub
parent a0ea0f3e6f
commit 946323570a
10 changed files with 2362 additions and 398 deletions

View File

@@ -21950,6 +21950,158 @@ func VGETMANTSS_Z(i, mx, x, k, x1 operand.Op) (*intrep.Instruction, error) {
return build(opcVGETMANTSS.Forms(), sffxs{sffxZ}, []operand.Op{i, mx, x, k, x1})
}
// VGF2P8AFFINEINVQB: Galois Field Affine Transformation Inverse.
//
// Forms:
//
// VGF2P8AFFINEINVQB imm8 m128 xmm xmm
// VGF2P8AFFINEINVQB imm8 m256 ymm ymm
// VGF2P8AFFINEINVQB imm8 xmm xmm xmm
// VGF2P8AFFINEINVQB imm8 ymm ymm ymm
// VGF2P8AFFINEINVQB imm8 m512 zmm k zmm
// VGF2P8AFFINEINVQB imm8 m512 zmm zmm
// VGF2P8AFFINEINVQB imm8 zmm zmm k zmm
// VGF2P8AFFINEINVQB imm8 zmm zmm zmm
// VGF2P8AFFINEINVQB imm8 m128 xmm k xmm
// VGF2P8AFFINEINVQB imm8 m256 ymm k ymm
// VGF2P8AFFINEINVQB imm8 xmm xmm k xmm
// VGF2P8AFFINEINVQB imm8 ymm ymm k ymm
func VGF2P8AFFINEINVQB(ops ...operand.Op) (*intrep.Instruction, error) {
return build(opcVGF2P8AFFINEINVQB.Forms(), sffxs{}, ops)
}
// VGF2P8AFFINEINVQB_BCST: Galois Field Affine Transformation Inverse (Broadcast).
//
// Forms:
//
// VGF2P8AFFINEINVQB.BCST imm8 m64 zmm k zmm
// VGF2P8AFFINEINVQB.BCST imm8 m64 zmm zmm
// VGF2P8AFFINEINVQB.BCST imm8 m64 xmm k xmm
// VGF2P8AFFINEINVQB.BCST imm8 m64 xmm xmm
// VGF2P8AFFINEINVQB.BCST imm8 m64 ymm k ymm
// VGF2P8AFFINEINVQB.BCST imm8 m64 ymm ymm
func VGF2P8AFFINEINVQB_BCST(ops ...operand.Op) (*intrep.Instruction, error) {
return build(opcVGF2P8AFFINEINVQB.Forms(), sffxs{sffxBCST}, ops)
}
// VGF2P8AFFINEINVQB_BCST_Z: Galois Field Affine Transformation Inverse (Broadcast, Zeroing Masking).
//
// Forms:
//
// VGF2P8AFFINEINVQB.BCST.Z imm8 m64 zmm k zmm
// VGF2P8AFFINEINVQB.BCST.Z imm8 m64 xmm k xmm
// VGF2P8AFFINEINVQB.BCST.Z imm8 m64 ymm k ymm
func VGF2P8AFFINEINVQB_BCST_Z(i, m, xyz, k, xyz1 operand.Op) (*intrep.Instruction, error) {
return build(opcVGF2P8AFFINEINVQB.Forms(), sffxs{sffxBCST, sffxZ}, []operand.Op{i, m, xyz, k, xyz1})
}
// VGF2P8AFFINEINVQB_Z: Galois Field Affine Transformation Inverse (Zeroing Masking).
//
// Forms:
//
// VGF2P8AFFINEINVQB.Z imm8 m512 zmm k zmm
// VGF2P8AFFINEINVQB.Z imm8 zmm zmm k zmm
// VGF2P8AFFINEINVQB.Z imm8 m128 xmm k xmm
// VGF2P8AFFINEINVQB.Z imm8 m256 ymm k ymm
// VGF2P8AFFINEINVQB.Z imm8 xmm xmm k xmm
// VGF2P8AFFINEINVQB.Z imm8 ymm ymm k ymm
func VGF2P8AFFINEINVQB_Z(i, mxyz, xyz, k, xyz1 operand.Op) (*intrep.Instruction, error) {
return build(opcVGF2P8AFFINEINVQB.Forms(), sffxs{sffxZ}, []operand.Op{i, mxyz, xyz, k, xyz1})
}
// VGF2P8AFFINEQB: Galois Field Affine Transformation.
//
// Forms:
//
// VGF2P8AFFINEQB imm8 m128 xmm xmm
// VGF2P8AFFINEQB imm8 m256 ymm ymm
// VGF2P8AFFINEQB imm8 xmm xmm xmm
// VGF2P8AFFINEQB imm8 ymm ymm ymm
// VGF2P8AFFINEQB imm8 m512 zmm k zmm
// VGF2P8AFFINEQB imm8 m512 zmm zmm
// VGF2P8AFFINEQB imm8 zmm zmm k zmm
// VGF2P8AFFINEQB imm8 zmm zmm zmm
// VGF2P8AFFINEQB imm8 m128 xmm k xmm
// VGF2P8AFFINEQB imm8 m256 ymm k ymm
// VGF2P8AFFINEQB imm8 xmm xmm k xmm
// VGF2P8AFFINEQB imm8 ymm ymm k ymm
func VGF2P8AFFINEQB(ops ...operand.Op) (*intrep.Instruction, error) {
return build(opcVGF2P8AFFINEQB.Forms(), sffxs{}, ops)
}
// VGF2P8AFFINEQB_BCST: Galois Field Affine Transformation (Broadcast).
//
// Forms:
//
// VGF2P8AFFINEQB.BCST imm8 m64 zmm k zmm
// VGF2P8AFFINEQB.BCST imm8 m64 zmm zmm
// VGF2P8AFFINEQB.BCST imm8 m64 xmm k xmm
// VGF2P8AFFINEQB.BCST imm8 m64 xmm xmm
// VGF2P8AFFINEQB.BCST imm8 m64 ymm k ymm
// VGF2P8AFFINEQB.BCST imm8 m64 ymm ymm
func VGF2P8AFFINEQB_BCST(ops ...operand.Op) (*intrep.Instruction, error) {
return build(opcVGF2P8AFFINEQB.Forms(), sffxs{sffxBCST}, ops)
}
// VGF2P8AFFINEQB_BCST_Z: Galois Field Affine Transformation (Broadcast, Zeroing Masking).
//
// Forms:
//
// VGF2P8AFFINEQB.BCST.Z imm8 m64 zmm k zmm
// VGF2P8AFFINEQB.BCST.Z imm8 m64 xmm k xmm
// VGF2P8AFFINEQB.BCST.Z imm8 m64 ymm k ymm
func VGF2P8AFFINEQB_BCST_Z(i, m, xyz, k, xyz1 operand.Op) (*intrep.Instruction, error) {
return build(opcVGF2P8AFFINEQB.Forms(), sffxs{sffxBCST, sffxZ}, []operand.Op{i, m, xyz, k, xyz1})
}
// VGF2P8AFFINEQB_Z: Galois Field Affine Transformation (Zeroing Masking).
//
// Forms:
//
// VGF2P8AFFINEQB.Z imm8 m512 zmm k zmm
// VGF2P8AFFINEQB.Z imm8 zmm zmm k zmm
// VGF2P8AFFINEQB.Z imm8 m128 xmm k xmm
// VGF2P8AFFINEQB.Z imm8 m256 ymm k ymm
// VGF2P8AFFINEQB.Z imm8 xmm xmm k xmm
// VGF2P8AFFINEQB.Z imm8 ymm ymm k ymm
func VGF2P8AFFINEQB_Z(i, mxyz, xyz, k, xyz1 operand.Op) (*intrep.Instruction, error) {
return build(opcVGF2P8AFFINEQB.Forms(), sffxs{sffxZ}, []operand.Op{i, mxyz, xyz, k, xyz1})
}
// VGF2P8MULB: Galois Field Multiply Bytes.
//
// Forms:
//
// VGF2P8MULB m128 xmm xmm
// VGF2P8MULB m256 ymm ymm
// VGF2P8MULB xmm xmm xmm
// VGF2P8MULB ymm ymm ymm
// VGF2P8MULB m512 zmm k zmm
// VGF2P8MULB m512 zmm zmm
// VGF2P8MULB zmm zmm k zmm
// VGF2P8MULB zmm zmm zmm
// VGF2P8MULB m128 xmm k xmm
// VGF2P8MULB m256 ymm k ymm
// VGF2P8MULB xmm xmm k xmm
// VGF2P8MULB ymm ymm k ymm
func VGF2P8MULB(ops ...operand.Op) (*intrep.Instruction, error) {
return build(opcVGF2P8MULB.Forms(), sffxs{}, ops)
}
// VGF2P8MULB_Z: Galois Field Multiply Bytes (Zeroing Masking).
//
// Forms:
//
// VGF2P8MULB.Z m512 zmm k zmm
// VGF2P8MULB.Z zmm zmm k zmm
// VGF2P8MULB.Z m128 xmm k xmm
// VGF2P8MULB.Z m256 ymm k ymm
// VGF2P8MULB.Z xmm xmm k xmm
// VGF2P8MULB.Z ymm ymm k ymm
func VGF2P8MULB_Z(mxyz, xyz, k, xyz1 operand.Op) (*intrep.Instruction, error) {
return build(opcVGF2P8MULB.Forms(), sffxs{sffxZ}, []operand.Op{mxyz, xyz, k, xyz1})
}
// VHADDPD: Packed Double-FP Horizontal Add.
//
// Forms: