all: BITALG instructions (#362)

Adds the AVX-512 Bit Algorithms instruction set.

These new instructions are added via the `opcodesextra` mechanism #345, since
they're missing from the opcodes database.

Contributed by @vsivsi. Extracted from #234 with simplifications for AVX-512
form expansion.

Co-authored-by: Vaughn Iverson <vsivsi@yahoo.com>
This commit is contained in:
Michael McLoughlin
2023-01-10 18:55:12 -08:00
committed by GitHub
parent a42c8ae281
commit 05ed388d0f
8 changed files with 1308 additions and 159 deletions

View File

@@ -37178,6 +37178,66 @@ func TestVPMULUDQ_ZValidFormsNoError(t *testing.T) {
}
}
func TestVPOPCNTBValidFormsNoError(t *testing.T) {
if _, err := VPOPCNTB(opm128, opk, opxmm); err != nil {
t.Fatal(err)
}
if _, err := VPOPCNTB(opm128, opxmm); err != nil {
t.Fatal(err)
}
if _, err := VPOPCNTB(opm256, opk, opymm); err != nil {
t.Fatal(err)
}
if _, err := VPOPCNTB(opm256, opymm); err != nil {
t.Fatal(err)
}
if _, err := VPOPCNTB(opxmm, opk, opxmm); err != nil {
t.Fatal(err)
}
if _, err := VPOPCNTB(opxmm, opxmm); err != nil {
t.Fatal(err)
}
if _, err := VPOPCNTB(opymm, opk, opymm); err != nil {
t.Fatal(err)
}
if _, err := VPOPCNTB(opymm, opymm); err != nil {
t.Fatal(err)
}
if _, err := VPOPCNTB(opm512, opk, opzmm); err != nil {
t.Fatal(err)
}
if _, err := VPOPCNTB(opm512, opzmm); err != nil {
t.Fatal(err)
}
if _, err := VPOPCNTB(opzmm, opk, opzmm); err != nil {
t.Fatal(err)
}
if _, err := VPOPCNTB(opzmm, opzmm); err != nil {
t.Fatal(err)
}
}
func TestVPOPCNTB_ZValidFormsNoError(t *testing.T) {
if _, err := VPOPCNTB_Z(opm128, opk, opxmm); err != nil {
t.Fatal(err)
}
if _, err := VPOPCNTB_Z(opm256, opk, opymm); err != nil {
t.Fatal(err)
}
if _, err := VPOPCNTB_Z(opxmm, opk, opxmm); err != nil {
t.Fatal(err)
}
if _, err := VPOPCNTB_Z(opymm, opk, opymm); err != nil {
t.Fatal(err)
}
if _, err := VPOPCNTB_Z(opm512, opk, opzmm); err != nil {
t.Fatal(err)
}
if _, err := VPOPCNTB_Z(opzmm, opk, opzmm); err != nil {
t.Fatal(err)
}
}
func TestVPOPCNTDValidFormsNoError(t *testing.T) {
if _, err := VPOPCNTD(opm128, opk, opxmm); err != nil {
t.Fatal(err)
@@ -37364,6 +37424,66 @@ func TestVPOPCNTQ_ZValidFormsNoError(t *testing.T) {
}
}
func TestVPOPCNTWValidFormsNoError(t *testing.T) {
if _, err := VPOPCNTW(opm128, opk, opxmm); err != nil {
t.Fatal(err)
}
if _, err := VPOPCNTW(opm128, opxmm); err != nil {
t.Fatal(err)
}
if _, err := VPOPCNTW(opm256, opk, opymm); err != nil {
t.Fatal(err)
}
if _, err := VPOPCNTW(opm256, opymm); err != nil {
t.Fatal(err)
}
if _, err := VPOPCNTW(opxmm, opk, opxmm); err != nil {
t.Fatal(err)
}
if _, err := VPOPCNTW(opxmm, opxmm); err != nil {
t.Fatal(err)
}
if _, err := VPOPCNTW(opymm, opk, opymm); err != nil {
t.Fatal(err)
}
if _, err := VPOPCNTW(opymm, opymm); err != nil {
t.Fatal(err)
}
if _, err := VPOPCNTW(opm512, opk, opzmm); err != nil {
t.Fatal(err)
}
if _, err := VPOPCNTW(opm512, opzmm); err != nil {
t.Fatal(err)
}
if _, err := VPOPCNTW(opzmm, opk, opzmm); err != nil {
t.Fatal(err)
}
if _, err := VPOPCNTW(opzmm, opzmm); err != nil {
t.Fatal(err)
}
}
func TestVPOPCNTW_ZValidFormsNoError(t *testing.T) {
if _, err := VPOPCNTW_Z(opm128, opk, opxmm); err != nil {
t.Fatal(err)
}
if _, err := VPOPCNTW_Z(opm256, opk, opymm); err != nil {
t.Fatal(err)
}
if _, err := VPOPCNTW_Z(opxmm, opk, opxmm); err != nil {
t.Fatal(err)
}
if _, err := VPOPCNTW_Z(opymm, opk, opymm); err != nil {
t.Fatal(err)
}
if _, err := VPOPCNTW_Z(opm512, opk, opzmm); err != nil {
t.Fatal(err)
}
if _, err := VPOPCNTW_Z(opzmm, opk, opzmm); err != nil {
t.Fatal(err)
}
}
func TestVPORValidFormsNoError(t *testing.T) {
if _, err := VPOR(opm256, opymm, opymm); err != nil {
t.Fatal(err)
@@ -38417,6 +38537,45 @@ func TestVPSHUFBValidFormsNoError(t *testing.T) {
}
}
func TestVPSHUFBITQMBValidFormsNoError(t *testing.T) {
if _, err := VPSHUFBITQMB(opm128, opxmm, opk, opk); err != nil {
t.Fatal(err)
}
if _, err := VPSHUFBITQMB(opm128, opxmm, opk); err != nil {
t.Fatal(err)
}
if _, err := VPSHUFBITQMB(opm256, opymm, opk, opk); err != nil {
t.Fatal(err)
}
if _, err := VPSHUFBITQMB(opm256, opymm, opk); err != nil {
t.Fatal(err)
}
if _, err := VPSHUFBITQMB(opxmm, opxmm, opk, opk); err != nil {
t.Fatal(err)
}
if _, err := VPSHUFBITQMB(opxmm, opxmm, opk); err != nil {
t.Fatal(err)
}
if _, err := VPSHUFBITQMB(opymm, opymm, opk, opk); err != nil {
t.Fatal(err)
}
if _, err := VPSHUFBITQMB(opymm, opymm, opk); err != nil {
t.Fatal(err)
}
if _, err := VPSHUFBITQMB(opzmm, opzmm, opk, opk); err != nil {
t.Fatal(err)
}
if _, err := VPSHUFBITQMB(opzmm, opzmm, opk); err != nil {
t.Fatal(err)
}
if _, err := VPSHUFBITQMB(opm512, opzmm, opk, opk); err != nil {
t.Fatal(err)
}
if _, err := VPSHUFBITQMB(opm512, opzmm, opk); err != nil {
t.Fatal(err)
}
}
func TestVPSHUFB_ZValidFormsNoError(t *testing.T) {
if _, err := VPSHUFB_Z(opm128, opxmm, opk, opxmm); err != nil {
t.Fatal(err)