all: VBMI2 instructions (#363)

Adds the "Vector Bit Manipulation Instructions 2" 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 #349 with simplifications.
Specifically, as prompted by the `dupl` linter we extract some common forms
lists into a helper `forms.go` file.

Co-authored-by: Vaughn Iverson <vsivsi@yahoo.com>
This commit is contained in:
Michael McLoughlin
2023-01-14 13:25:44 -08:00
committed by GitHub
parent 05ed388d0f
commit e2c0a40f50
11 changed files with 8609 additions and 400 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -2384,10 +2384,14 @@ func TestContextInstructions(t *testing.T) {
ctx.VPCMPUQ_BCST(opimm8, opm64, opxmm, opk, opk)
ctx.VPCMPUW(opimm8, opm128, opxmm, opk, opk)
ctx.VPCMPW(opimm8, opm128, opxmm, opk, opk)
ctx.VPCOMPRESSB(opxmm, opk, opm128)
ctx.VPCOMPRESSB_Z(opxmm, opk, opxmm)
ctx.VPCOMPRESSD(opxmm, opk, opm128)
ctx.VPCOMPRESSD_Z(opxmm, opk, opm128)
ctx.VPCOMPRESSQ(opxmm, opk, opm128)
ctx.VPCOMPRESSQ_Z(opxmm, opk, opm128)
ctx.VPCOMPRESSW(opxmm, opk, opm128)
ctx.VPCOMPRESSW_Z(opxmm, opk, opxmm)
ctx.VPCONFLICTD(opm128, opk, opxmm)
ctx.VPCONFLICTD_BCST(opm32, opk, opxmm)
ctx.VPCONFLICTD_BCST_Z(opm32, opk, opxmm)
@@ -2482,10 +2486,14 @@ func TestContextInstructions(t *testing.T) {
ctx.VPERMT2W_Z(opm128, opxmm, opk, opxmm)
ctx.VPERMW(opm128, opxmm, opk, opxmm)
ctx.VPERMW_Z(opm128, opxmm, opk, opxmm)
ctx.VPEXPANDB(opm128, opk, opxmm)
ctx.VPEXPANDB_Z(opm128, opk, opxmm)
ctx.VPEXPANDD(opm128, opk, opxmm)
ctx.VPEXPANDD_Z(opm128, opk, opxmm)
ctx.VPEXPANDQ(opm128, opk, opxmm)
ctx.VPEXPANDQ_Z(opm128, opk, opxmm)
ctx.VPEXPANDW(opm128, opk, opxmm)
ctx.VPEXPANDW_Z(opm128, opk, opxmm)
ctx.VPEXTRB(opimm8, opxmm, opm8)
ctx.VPEXTRD(opimm8, opxmm, opm32)
ctx.VPEXTRQ(opimm8, opxmm, opm64)
@@ -2730,6 +2738,46 @@ func TestContextInstructions(t *testing.T) {
ctx.VPSCATTERDQ(opxmm, opk, opvm32x)
ctx.VPSCATTERQD(opxmm, opk, opvm64x)
ctx.VPSCATTERQQ(opxmm, opk, opvm64x)
ctx.VPSHLDD(opimm8, opm128, opxmm, opk, opxmm)
ctx.VPSHLDD_BCST(opimm8, opm32, opxmm, opk, opxmm)
ctx.VPSHLDD_BCST_Z(opimm8, opm32, opxmm, opk, opxmm)
ctx.VPSHLDD_Z(opimm8, opm128, opxmm, opk, opxmm)
ctx.VPSHLDQ(opimm8, opm128, opxmm, opk, opxmm)
ctx.VPSHLDQ_BCST(opimm8, opm64, opxmm, opk, opxmm)
ctx.VPSHLDQ_BCST_Z(opimm8, opm64, opxmm, opk, opxmm)
ctx.VPSHLDQ_Z(opimm8, opm128, opxmm, opk, opxmm)
ctx.VPSHLDVD(opm128, opxmm, opk, opxmm)
ctx.VPSHLDVD_BCST(opm32, opxmm, opk, opxmm)
ctx.VPSHLDVD_BCST_Z(opm32, opxmm, opk, opxmm)
ctx.VPSHLDVD_Z(opm128, opxmm, opk, opxmm)
ctx.VPSHLDVQ(opm128, opxmm, opk, opxmm)
ctx.VPSHLDVQ_BCST(opm64, opxmm, opk, opxmm)
ctx.VPSHLDVQ_BCST_Z(opm64, opxmm, opk, opxmm)
ctx.VPSHLDVQ_Z(opm128, opxmm, opk, opxmm)
ctx.VPSHLDVW(opm128, opxmm, opk, opxmm)
ctx.VPSHLDVW_Z(opm128, opxmm, opk, opxmm)
ctx.VPSHLDW(opimm8, opm128, opxmm, opk, opxmm)
ctx.VPSHLDW_Z(opimm8, opm128, opxmm, opk, opxmm)
ctx.VPSHRDD(opimm8, opm128, opxmm, opk, opxmm)
ctx.VPSHRDD_BCST(opimm8, opm32, opxmm, opk, opxmm)
ctx.VPSHRDD_BCST_Z(opimm8, opm32, opxmm, opk, opxmm)
ctx.VPSHRDD_Z(opimm8, opm128, opxmm, opk, opxmm)
ctx.VPSHRDQ(opimm8, opm128, opxmm, opk, opxmm)
ctx.VPSHRDQ_BCST(opimm8, opm64, opxmm, opk, opxmm)
ctx.VPSHRDQ_BCST_Z(opimm8, opm64, opxmm, opk, opxmm)
ctx.VPSHRDQ_Z(opimm8, opm128, opxmm, opk, opxmm)
ctx.VPSHRDVD(opm128, opxmm, opk, opxmm)
ctx.VPSHRDVD_BCST(opm32, opxmm, opk, opxmm)
ctx.VPSHRDVD_BCST_Z(opm32, opxmm, opk, opxmm)
ctx.VPSHRDVD_Z(opm128, opxmm, opk, opxmm)
ctx.VPSHRDVQ(opm128, opxmm, opk, opxmm)
ctx.VPSHRDVQ_BCST(opm64, opxmm, opk, opxmm)
ctx.VPSHRDVQ_BCST_Z(opm64, opxmm, opk, opxmm)
ctx.VPSHRDVQ_Z(opm128, opxmm, opk, opxmm)
ctx.VPSHRDVW(opm128, opxmm, opk, opxmm)
ctx.VPSHRDVW_Z(opm128, opxmm, opk, opxmm)
ctx.VPSHRDW(opimm8, opm128, opxmm, opk, opxmm)
ctx.VPSHRDW_Z(opimm8, opm128, opxmm, opk, opxmm)
ctx.VPSHUFB(opm256, opymm, opymm)
ctx.VPSHUFBITQMB(opm128, opxmm, opk, opk)
ctx.VPSHUFB_Z(opm128, opxmm, opk, opxmm)