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:
committed by
GitHub
parent
a0ea0f3e6f
commit
946323570a
@@ -23273,6 +23273,252 @@ func TestVGETMANTSS_ZValidFormsNoError(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestVGF2P8AFFINEINVQBValidFormsNoError(t *testing.T) {
|
||||
if _, err := VGF2P8AFFINEINVQB(opimm8, opm128, opxmm, opxmm); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := VGF2P8AFFINEINVQB(opimm8, opm256, opymm, opymm); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := VGF2P8AFFINEINVQB(opimm8, opxmm, opxmm, opxmm); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := VGF2P8AFFINEINVQB(opimm8, opymm, opymm, opymm); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := VGF2P8AFFINEINVQB(opimm8, opm512, opzmm, opk, opzmm); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := VGF2P8AFFINEINVQB(opimm8, opm512, opzmm, opzmm); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := VGF2P8AFFINEINVQB(opimm8, opzmm, opzmm, opk, opzmm); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := VGF2P8AFFINEINVQB(opimm8, opzmm, opzmm, opzmm); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := VGF2P8AFFINEINVQB(opimm8, opm128, opxmm, opk, opxmm); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := VGF2P8AFFINEINVQB(opimm8, opm256, opymm, opk, opymm); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := VGF2P8AFFINEINVQB(opimm8, opxmm, opxmm, opk, opxmm); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := VGF2P8AFFINEINVQB(opimm8, opymm, opymm, opk, opymm); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestVGF2P8AFFINEINVQB_BCSTValidFormsNoError(t *testing.T) {
|
||||
if _, err := VGF2P8AFFINEINVQB_BCST(opimm8, opm64, opzmm, opk, opzmm); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := VGF2P8AFFINEINVQB_BCST(opimm8, opm64, opzmm, opzmm); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := VGF2P8AFFINEINVQB_BCST(opimm8, opm64, opxmm, opk, opxmm); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := VGF2P8AFFINEINVQB_BCST(opimm8, opm64, opxmm, opxmm); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := VGF2P8AFFINEINVQB_BCST(opimm8, opm64, opymm, opk, opymm); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := VGF2P8AFFINEINVQB_BCST(opimm8, opm64, opymm, opymm); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestVGF2P8AFFINEINVQB_BCST_ZValidFormsNoError(t *testing.T) {
|
||||
if _, err := VGF2P8AFFINEINVQB_BCST_Z(opimm8, opm64, opzmm, opk, opzmm); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := VGF2P8AFFINEINVQB_BCST_Z(opimm8, opm64, opxmm, opk, opxmm); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := VGF2P8AFFINEINVQB_BCST_Z(opimm8, opm64, opymm, opk, opymm); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestVGF2P8AFFINEINVQB_ZValidFormsNoError(t *testing.T) {
|
||||
if _, err := VGF2P8AFFINEINVQB_Z(opimm8, opm512, opzmm, opk, opzmm); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := VGF2P8AFFINEINVQB_Z(opimm8, opzmm, opzmm, opk, opzmm); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := VGF2P8AFFINEINVQB_Z(opimm8, opm128, opxmm, opk, opxmm); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := VGF2P8AFFINEINVQB_Z(opimm8, opm256, opymm, opk, opymm); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := VGF2P8AFFINEINVQB_Z(opimm8, opxmm, opxmm, opk, opxmm); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := VGF2P8AFFINEINVQB_Z(opimm8, opymm, opymm, opk, opymm); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestVGF2P8AFFINEQBValidFormsNoError(t *testing.T) {
|
||||
if _, err := VGF2P8AFFINEQB(opimm8, opm128, opxmm, opxmm); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := VGF2P8AFFINEQB(opimm8, opm256, opymm, opymm); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := VGF2P8AFFINEQB(opimm8, opxmm, opxmm, opxmm); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := VGF2P8AFFINEQB(opimm8, opymm, opymm, opymm); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := VGF2P8AFFINEQB(opimm8, opm512, opzmm, opk, opzmm); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := VGF2P8AFFINEQB(opimm8, opm512, opzmm, opzmm); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := VGF2P8AFFINEQB(opimm8, opzmm, opzmm, opk, opzmm); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := VGF2P8AFFINEQB(opimm8, opzmm, opzmm, opzmm); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := VGF2P8AFFINEQB(opimm8, opm128, opxmm, opk, opxmm); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := VGF2P8AFFINEQB(opimm8, opm256, opymm, opk, opymm); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := VGF2P8AFFINEQB(opimm8, opxmm, opxmm, opk, opxmm); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := VGF2P8AFFINEQB(opimm8, opymm, opymm, opk, opymm); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestVGF2P8AFFINEQB_BCSTValidFormsNoError(t *testing.T) {
|
||||
if _, err := VGF2P8AFFINEQB_BCST(opimm8, opm64, opzmm, opk, opzmm); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := VGF2P8AFFINEQB_BCST(opimm8, opm64, opzmm, opzmm); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := VGF2P8AFFINEQB_BCST(opimm8, opm64, opxmm, opk, opxmm); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := VGF2P8AFFINEQB_BCST(opimm8, opm64, opxmm, opxmm); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := VGF2P8AFFINEQB_BCST(opimm8, opm64, opymm, opk, opymm); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := VGF2P8AFFINEQB_BCST(opimm8, opm64, opymm, opymm); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestVGF2P8AFFINEQB_BCST_ZValidFormsNoError(t *testing.T) {
|
||||
if _, err := VGF2P8AFFINEQB_BCST_Z(opimm8, opm64, opzmm, opk, opzmm); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := VGF2P8AFFINEQB_BCST_Z(opimm8, opm64, opxmm, opk, opxmm); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := VGF2P8AFFINEQB_BCST_Z(opimm8, opm64, opymm, opk, opymm); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestVGF2P8AFFINEQB_ZValidFormsNoError(t *testing.T) {
|
||||
if _, err := VGF2P8AFFINEQB_Z(opimm8, opm512, opzmm, opk, opzmm); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := VGF2P8AFFINEQB_Z(opimm8, opzmm, opzmm, opk, opzmm); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := VGF2P8AFFINEQB_Z(opimm8, opm128, opxmm, opk, opxmm); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := VGF2P8AFFINEQB_Z(opimm8, opm256, opymm, opk, opymm); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := VGF2P8AFFINEQB_Z(opimm8, opxmm, opxmm, opk, opxmm); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := VGF2P8AFFINEQB_Z(opimm8, opymm, opymm, opk, opymm); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestVGF2P8MULBValidFormsNoError(t *testing.T) {
|
||||
if _, err := VGF2P8MULB(opm128, opxmm, opxmm); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := VGF2P8MULB(opm256, opymm, opymm); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := VGF2P8MULB(opxmm, opxmm, opxmm); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := VGF2P8MULB(opymm, opymm, opymm); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := VGF2P8MULB(opm512, opzmm, opk, opzmm); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := VGF2P8MULB(opm512, opzmm, opzmm); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := VGF2P8MULB(opzmm, opzmm, opk, opzmm); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := VGF2P8MULB(opzmm, opzmm, opzmm); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := VGF2P8MULB(opm128, opxmm, opk, opxmm); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := VGF2P8MULB(opm256, opymm, opk, opymm); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := VGF2P8MULB(opxmm, opxmm, opk, opxmm); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := VGF2P8MULB(opymm, opymm, opk, opymm); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestVGF2P8MULB_ZValidFormsNoError(t *testing.T) {
|
||||
if _, err := VGF2P8MULB_Z(opm512, opzmm, opk, opzmm); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := VGF2P8MULB_Z(opzmm, opzmm, opk, opzmm); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := VGF2P8MULB_Z(opm128, opxmm, opk, opxmm); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := VGF2P8MULB_Z(opm256, opymm, opk, opymm); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := VGF2P8MULB_Z(opxmm, opxmm, opk, opxmm); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := VGF2P8MULB_Z(opymm, opymm, opk, opymm); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestVHADDPDValidFormsNoError(t *testing.T) {
|
||||
if _, err := VHADDPD(opm128, opxmm, opxmm); err != nil {
|
||||
t.Fatal(err)
|
||||
|
||||
Reference in New Issue
Block a user