Repository: mmcloughlin/avo
Pull request #358 (2023-01-08 05:32:40)

all: VAES instructions

codecov-commenter: # [Codecov](https://codecov.io/gh/mmcloughlin/avo/pull/358?src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Michael+McLoughlin) Report
> Merging [#358](https://codecov.io/gh/mmcloughlin/avo/pull/358?src=pr&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Michael+McLoughlin) (2c04312) into [master](https://codecov.io/gh/mmcloughlin/avo/commit/92f38ce96d15a3162dd64f1cd49fd279d8988271?el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Michael+McLoughlin) (92f38ce) will **not change** coverage.
> The diff coverage is `80.00%`.

```diff
@@           Coverage Diff           @@
##           master     #358   +/-   ##
=======================================
  Coverage   75.98%   75.98%           
=======================================
  Files          65       65           
  Lines       20710    20710           
=======================================
  Hits        15737    15737           
  Misses       4890     4890           
  Partials       83       83           
```

| Flag | Coverage Δ | |
|---|---|---|
| integration | `11.92% <0.00%> (ø)` | |
| unittests | `73.07% <80.00%> (ø)` | |

Flags with carried forward coverage won't be shown. [Click here](https://docs.codecov.io/docs/carryforward-flags?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Michael+McLoughlin#carryforward-flags-in-the-pull-request-comment) to find out more.

| [Impacted Files](https://codecov.io/gh/mmcloughlin/avo/pull/358?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Michael+McLoughlin) | Coverage Δ | |
|---|---|---|
| [x86/zoptab.go](https://codecov.io/gh/mmcloughlin/avo/pull/358?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Michael+McLoughlin#diff-eDg2L3pvcHRhYi5nbw==) | `92.42% <ø> (ø)` | |
| [build/zinstructions.go](https://codecov.io/gh/mmcloughlin/avo/pull/358?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Michael+McLoughlin#diff-YnVpbGQvemluc3RydWN0aW9ucy5nbw==) | `67.65% <66.66%> (ø)` | |
| [x86/zctors.go](https://codecov.io/gh/mmcloughlin/avo/pull/358?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Michael+McLoughlin#diff-eDg2L3pjdG9ycy5nbw==) | `100.00% <100.00%> (ø)` | |

Help us with your feedback. Take ten seconds to tell us [how you rate us](https://about.codecov.io/nps?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Michael+McLoughlin). Have a feature suggestion? [Share it here.](https://app.codecov.io/gh/feedback/?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Michael+McLoughlin)


Patch:
diff --git a/build/zinstructions.go b/build/zinstructions.go
index a0cffd7..28dedb5 100644
--- a/build/zinstructions.go
+++ b/build/zinstructions.go
@@ -16894,10 +16894,14 @@ func VADDSUBPS(mxy, xy, xy1 operand.Op) { ctx.VADDSUBPS(mxy, xy, xy1) }
 //
 //	VAESDEC m128 xmm xmm
 //	VAESDEC xmm  xmm xmm
+//	VAESDEC m256 ymm ymm
+//	VAESDEC ymm  ymm ymm
+//	VAESDEC m512 zmm zmm
+//	VAESDEC zmm  zmm zmm
 //
 // Construct and append a VAESDEC instruction to the active function.
-func (c *Context) VAESDEC(mx, x, x1 operand.Op) {
-	c.addinstruction(x86.VAESDEC(mx, x, x1))
+func (c *Context) VAESDEC(mxyz, xyz, xyz1 operand.Op) {
+	c.addinstruction(x86.VAESDEC(mxyz, xyz, xyz1))
 }
 
 // VAESDEC: Perform One Round of an AES Decryption Flow.
@@ -16906,10 +16910,14 @@ func (c *Context) VAESDEC(mx, x, x1 operand.Op) {
 //
 //	VAESDEC m128 xmm xmm
 //	VAESDEC xmm  xmm xmm
+//	VAESDEC m256 ymm ymm
+//	VAESDEC ymm  ymm ymm
+//	VAESDEC m512 zmm zmm
+//	VAESDEC zmm  zmm zmm
 //
 // Construct and append a VAESDEC instruction to the active function.
 // Operates on the global context.
-func VAESDEC(mx, x, x1 operand.Op) { ctx.VAESDEC(mx, x, x1) }
+func VAESDEC(mxyz, xyz, xyz1 operand.Op) { ctx.VAESDEC(mxyz, xyz, xyz1) }
 
 // VAESDECLAST: Perform Last Round of an AES Decryption Flow.
 //
@@ -16917,10 +16925,14 @@ func VAESDEC(mx, x, x1 operand.Op) { ctx.VAESDEC(mx, x, x1) }
 //
 //	VAESDECLAST m128 xmm xmm
 //	VAESDECLAST xmm  xmm xmm
+//	VAESDECLAST m256 ymm ymm
+//	VAESDECLAST ymm  ymm ymm
+//	VAESDECLAST m512 zmm zmm
+//	VAESDECLAST zmm  zmm zmm
 //
 // Construct and append a VAESDECLAST instruction to the active function.
-func (c *Context) VAESDECLAST(mx, x, x1 operand.Op) {
-	c.addinstruction(x86.VAESDECLAST(mx, x, x1))
+func (c *Context) VAESDECLAST(mxyz, xyz, xyz1 operand.Op) {
+	c.addinstruction(x86.VAESDECLAST(mxyz, xyz, xyz1))
 }
 
 // VAESDECLAST: Perform Last Round of an AES Decryption Flow.
@@ -16929,10 +16941,14 @@ func (c *Context) VAESDECLAST(mx, x, x1 operand.Op) {
 //
 //	VAESDECLAST m128 xmm xmm
 //	VAESDECLAST xmm  xmm xmm
+//	VAESDECLAST m256 ymm ymm
+//	VAESDECLAST ymm  ymm ymm
+//	VAESDECLAST m512 zmm zmm
+//	VAESDECLAST zmm  zmm zmm
 //
 // Construct and append a VAESDECLAST instruction to the active function.
 // Operates on the global context.
-func VAESDECLAST(mx, x, x1 operand.Op) { ctx.VAESDECLAST(mx, x, x1) }
+func VAESDECLAST(mxyz, xyz, xyz1 operand.Op) { ctx.VAESDECLAST(mxyz, xyz, xyz1) }
 
 // VAESENC: Perform One Round of an AES Encryption Flow.
 //
@@ -16940,10 +16956,14 @@ func VAESDECLAST(mx, x, x1 operand.Op) { ctx.VAESDECLAST(mx, x, x1) }
 //
 //	VAESENC m128 xmm xmm
 //	VAESENC xmm  xmm xmm
+//	VAESENC m256 ymm ymm
+//	VAESENC ymm  ymm ymm
+//	VAESENC m512 zmm zmm
+//	VAESENC zmm  zmm zmm
 //
 // Construct and append a VAESENC instruction to the active function.
-func (c *Context) VAESENC(mx, x, x1 operand.Op) {
-	c.addinstruction(x86.VAESENC(mx, x, x1))
+func (c *Context) VAESENC(mxyz, xyz, xyz1 operand.Op) {
+	c.addinstruction(x86.VAESENC(mxyz, xyz, xyz1))
 }
 
 // VAESENC: Perform One Round of an AES Encryption Flow.
@@ -16952,10 +16972,14 @@ func (c *Context) VAESENC(mx, x, x1 operand.Op) {
 //
 //	VAESENC m128 xmm xmm
 //	VAESENC xmm  xmm xmm
+//	VAESENC m256 ymm ymm
+//	VAESENC ymm  ymm ymm
+//	VAESENC m512 zmm zmm
+//	VAESENC zmm  zmm zmm
 //
 // Construct and append a VAESENC instruction to the active function.
 // Operates on the global context.
-func VAESENC(mx, x, x1 operand.Op) { ctx.VAESENC(mx, x, x1) }
+func VAESENC(mxyz, xyz, xyz1 operand.Op) { ctx.VAESENC(mxyz, xyz, xyz1) }
 
 // VAESENCLAST: Perform Last Round of an AES Encryption Flow.
 //
@@ -16963,10 +16987,14 @@ func VAESENC(mx, x, x1 operand.Op) { ctx.VAESENC(mx, x, x1) }
 //
 //	VAESENCLAST m128 xmm xmm
 //	VAESENCLAST xmm  xmm xmm
+//	VAESENCLAST m256 ymm ymm
+//	VAESENCLAST ymm  ymm ymm
+//	VAESENCLAST m512 zmm zmm
+//	VAESENCLAST zmm  zmm zmm
 //
 // Construct and append a VAESENCLAST instruction to the active function.
-func (c *Context) VAESENCLAST(mx, x, x1 operand.Op) {
-	c.addinstruction(x86.VAESENCLAST(mx, x, x1))
+func (c *Context) VAESENCLAST(mxyz, xyz, xyz1 operand.Op) {
+	c.addinstruction(x86.VAESENCLAST(mxyz, xyz, xyz1))
 }
 
 // VAESENCLAST: Perform Last Round of an AES Encryption Flow.
@@ -16975,10 +17003,14 @@ func (c *Context) VAESENCLAST(mx, x, x1 operand.Op) {
 //
 //	VAESENCLAST m128 xmm xmm
 //	VAESENCLAST xmm  xmm xmm
+//	VAESENCLAST m256 ymm ymm
+//	VAESENCLAST ymm  ymm ymm
+//	VAESENCLAST m512 zmm zmm
+//	VAESENCLAST zmm  zmm zmm
 //
 // Construct and append a VAESENCLAST instruction to the active function.
 // Operates on the global context.
-func VAESENCLAST(mx, x, x1 operand.Op) { ctx.VAESENCLAST(mx, x, x1) }
+func VAESENCLAST(mxyz, xyz, xyz1 operand.Op) { ctx.VAESENCLAST(mxyz, xyz, xyz1) }
 
 // VAESIMC: Perform the AES InvMixColumn Transformation.
 //
diff --git a/internal/inst/ztable.go b/internal/inst/ztable.go
index bfb50fa..1a16b28 100644
--- a/internal/inst/ztable.go
+++ b/internal/inst/ztable.go
@@ -17437,6 +17437,42 @@ var Instructions = []Instruction{
 				},
 				EncodingType: 0x3,
 			},
+			{
+				ISA: []string{"VAES"},
+				Operands: []Operand{
+					{Type: "m256", Action: 0x1},
+					{Type: "ymm", Action: 0x1},
+					{Type: "ymm", Action: 0x2},
+				},
+				EncodingType: 0x3,
+			},
+			{
+				ISA: []string{"VAES"},
+				Operands: []Operand{
+					{Type: "ymm", Action: 0x1},
+					{Type: "ymm", Action: 0x1},
+					{Type: "ymm", Action: 0x2},
+				},
+				EncodingType: 0x3,
+			},
+			{
+				ISA: []string{"AVX512F", "VAES"},
+				Operands: []Operand{
+					{Type: "m512", Action: 0x1},
+					{Type: "zmm", Action: 0x1},
+					{Type: "zmm", Action: 0x2},
+				},
+				EncodingType: 0x4,
+			},
+			{
+				ISA: []string{"AVX512F", "VAES"},
+				Operands: []Operand{
+					{Type: "zmm", Action: 0x1},
+					{Type: "zmm", Action: 0x1},
+					{Type: "zmm", Action: 0x2},
+				},
+				EncodingType: 0x4,
+			},
 		},
 	},
 	{
@@ -17461,6 +17497,42 @@ var Instructions = []Instruction{
 				},
 				EncodingType: 0x3,
 			},
+			{
+				ISA: []string{"VAES"},
+				Operands: []Operand{
+					{Type: "m256", Action: 0x1},
+					{Type: "ymm", Action: 0x1},
+					{Type: "ymm", Action: 0x2},
+				},
+				EncodingType: 0x3,
+			},
+			{
+				ISA: []string{"VAES"},
+				Operands: []Operand{
+					{Type: "ymm", Action: 0x1},
+					{Type: "ymm", Action: 0x1},
+					{Type: "ymm", Action: 0x2},
+				},
+				EncodingType: 0x3,
+			},
+			{
+				ISA: []string{"AVX512F", "VAES"},
+				Operands: []Operand{
+					{Type: "m512", Action: 0x1},
+					{Type: "zmm", Action: 0x1},
+					{Type: "zmm", Action: 0x2},
+				},
+				EncodingType: 0x4,
+			},
+			{
+				ISA: []string{"AVX512F", "VAES"},
+				Operands: []Operand{
+					{Type: "zmm", Action: 0x1},
+					{Type: "zmm", Action: 0x1},
+					{Type: "zmm", Action: 0x2},
+				},
+				EncodingType: 0x4,
+			},
 		},
 	},
 	{
@@ -17485,6 +17557,42 @@ var Instructions = []Instruction{
 				},
 				EncodingType: 0x3,
 			},
+			{
+				ISA: []string{"VAES"},
+				Operands: []Operand{
+					{Type: "m256", Action: 0x1},
+					{Type: "ymm", Action: 0x1},
+					{Type: "ymm", Action: 0x2},
+				},
+				EncodingType: 0x3,
+			},
+			{
+				ISA: []string{"VAES"},
+				Operands: []Operand{
+					{Type: "ymm", Action: 0x1},
+					{Type: "ymm", Action: 0x1},
+					{Type: "ymm", Action: 0x2},
+				},
+				EncodingType: 0x3,
+			},
+			{
+				ISA: []string{"AVX512F", "VAES"},
+				Operands: []Operand{
+					{Type: "m512", Action: 0x1},
+					{Type: "zmm", Action: 0x1},
+					{Type: "zmm", Action: 0x2},
+				},
+				EncodingType: 0x4,
+			},
+			{
+				ISA: []string{"AVX512F", "VAES"},
+				Operands: []Operand{
+					{Type: "zmm", Action: 0x1},
+					{Type: "zmm", Action: 0x1},
+					{Type: "zmm", Action: 0x2},
+				},
+				EncodingType: 0x4,
+			},
 		},
 	},
 	{
@@ -17509,6 +17617,42 @@ var Instructions = []Instruction{
 				},
 				EncodingType: 0x3,
 			},
+			{
+				ISA: []string{"VAES"},
+				Operands: []Operand{
+					{Type: "m256", Action: 0x1},
+					{Type: "ymm", Action: 0x1},
+					{Type: "ymm", Action: 0x2},
+				},
+				EncodingType: 0x3,
+			},
+			{
+				ISA: []string{"VAES"},
+				Operands: []Operand{
+					{Type: "ymm", Action: 0x1},
+					{Type: "ymm", Action: 0x1},
+					{Type: "ymm", Action: 0x2},
+				},
+				EncodingType: 0x3,
+			},
+			{
+				ISA: []string{"AVX512F", "VAES"},
+				Operands: []Operand{
+					{Type: "m512", Action: 0x1},
+					{Type: "zmm", Action: 0x1},
+					{Type: "zmm", Action: 0x2},
+				},
+				EncodingType: 0x4,
+			},
+			{
+				ISA: []string{"AVX512F", "VAES"},
+				Operands: []Operand{
+					{Type: "zmm", Action: 0x1},
+					{Type: "zmm", Action: 0x1},
+					{Type: "zmm", Action: 0x2},
+				},
+				EncodingType: 0x4,
+			},
 		},
 	},
 	{
diff --git a/internal/opcodesextra/instructions.go b/internal/opcodesextra/instructions.go
index 39a4249..9935662 100644
--- a/internal/opcodesextra/instructions.go
+++ b/internal/opcodesextra/instructions.go
@@ -7,6 +7,7 @@ import "github.com/mmcloughlin/avo/internal/inst"
 var sets = [][]*inst.Instruction{
 	movlqzx,
 	gfni,
+	vaes,
 }
 
 // Instructions returns a list of extras to add to the instructions database.
diff --git a/internal/opcodesextra/vaes.go b/internal/opcodesextra/vaes.go
new file mode 100644
index 0000000..ccb0bd6
--- /dev/null
+++ b/internal/opcodesextra/vaes.go
@@ -0,0 +1,184 @@
+package opcodesextra
+
+import "github.com/mmcloughlin/avo/internal/inst"
+
+// vaes is the "Vector Advanced Encryption Standard" instruction set.
+var vaes = []*inst.Instruction{
+	// Reference: https://github.com/golang/go/blob/go1.19.3/src/cmd/internal/obj/x86/avx_optabs.go#L1217-L1244
+	//
+	//		{as: AVAESDEC, ytab: _yvaesdec, prefix: Pavx, op: opBytes{
+	//			avxEscape | vex128 | vex66 | vex0F38 | vexW0, 0xDE,
+	//			avxEscape | vex256 | vex66 | vex0F38 | vexW0, 0xDE,
+	//			avxEscape | evex128 | evex66 | evex0F38 | evexW0, evexN16, 0xDE,
+	//			avxEscape | evex256 | evex66 | evex0F38 | evexW0, evexN32, 0xDE,
+	//			avxEscape | evex512 | evex66 | evex0F38 | evexW0, evexN64, 0xDE,
+	//		}},
+	//		{as: AVAESDECLAST, ytab: _yvaesdec, prefix: Pavx, op: opBytes{
+	//			avxEscape | vex128 | vex66 | vex0F38 | vexW0, 0xDF,
+	//			avxEscape | vex256 | vex66 | vex0F38 | vexW0, 0xDF,
+	//			avxEscape | evex128 | evex66 | evex0F38 | evexW0, evexN16, 0xDF,
+	//			avxEscape | evex256 | evex66 | evex0F38 | evexW0, evexN32, 0xDF,
+	//			avxEscape | evex512 | evex66 | evex0F38 | evexW0, evexN64, 0xDF,
+	//		}},
+	//		{as: AVAESENC, ytab: _yvaesdec, prefix: Pavx, op: opBytes{
+	//			avxEscape | vex128 | vex66 | vex0F38 | vexW0, 0xDC,
+	//			avxEscape | vex256 | vex66 | vex0F38 | vexW0, 0xDC,
+	//			avxEscape | evex128 | evex66 | evex0F38 | evexW0, evexN16, 0xDC,
+	//			avxEscape | evex256 | evex66 | evex0F38 | evexW0, evexN32, 0xDC,
+	//			avxEscape | evex512 | evex66 | evex0F38 | evexW0, evexN64, 0xDC,
+	//		}},
+	//		{as: AVAESENCLAST, ytab: _yvaesdec, prefix: Pavx, op: opBytes{
+	//			avxEscape | vex128 | vex66 | vex0F38 | vexW0, 0xDD,
+	//			avxEscape | vex256 | vex66 | vex0F38 | vexW0, 0xDD,
+	//			avxEscape | evex128 | evex66 | evex0F38 | evexW0, evexN16, 0xDD,
+	//			avxEscape | evex256 | evex66 | evex0F38 | evexW0, evexN32, 0xDD,
+	//			avxEscape | evex512 | evex66 | evex0F38 | evexW0, evexN64, 0xDD,
+	//		}},
+	//
+	{
+		Opcode:  "VAESDEC",
+		Summary: "Perform One Round of an AES Decryption Flow",
+		Forms:   vaesforms,
+	},
+	{
+		Opcode:  "VAESDECLAST",
+		Summary: "Perform Last Round of an AES Decryption Flow",
+		Forms:   vaesforms,
+	},
+	{
+		Opcode:  "VAESENC",
+		Summary: "Perform One Round of an AES Encryption Flow",
+		Forms:   vaesforms,
+	},
+	{
+		Opcode:  "VAESENCLAST",
+		Summary: "Perform Last Round of an AES Encryption Flow",
+		Forms:   vaesforms,
+	},
+}
+
+// VAESDEC, VAESDECLAST, VAESENC and VAESENCLAST forms.
+//
+// See: https://software.intel.com/en-us/download/intel-64-and-ia-32-architectures-sdm-combined-volumes-1-2a-2b-2c-2d-3a-3b-3c-3d-and-4
+//
+// Reference: https://github.com/golang/go/blob/go1.19.3/src/cmd/internal/obj/x86/avx_optabs.go#L111-L117
+//
+//	var _yvaesdec = []ytab{
+//		{zcase: Zvex_rm_v_r, zoffset: 2, args: argList{Yxm, Yxr, Yxr}},
+//		{zcase: Zvex_rm_v_r, zoffset: 2, args: argList{Yym, Yyr, Yyr}},
+//		{zcase: Zevex_rm_v_r, zoffset: 3, args: argList{YxmEvex, YxrEvex, YxrEvex}},
+//		{zcase: Zevex_rm_v_r, zoffset: 3, args: argList{YymEvex, YyrEvex, YyrEvex}},
+//		{zcase: Zevex_rm_v_r, zoffset: 3, args: argList{Yzm, Yzr, Yzr}},
+//	}
+var vaesforms = inst.Forms{
+	// VEX.128.66.0F38.WIG DE /r VAESDEC xmm1, xmm2, xmm3/m128  AVX + AES
+	// VEX.128.66.0F38.WIG DF /r VAESDECLAST xmm1, xmm2, xmm3/m128  AVX + AES
+	// VEX.128.66.0F38.WIG DC /r VAESENC xmm1, xmm2, xmm3/m128  AVX + AES
+	// VEX.128.66.0F38.WIG DD /r VAESENCLAST xmm1, xmm2, xmm3/m128  AVX + AES
+	{
+		ISA: []string{"AES", "AVX"},
+		Operands: []inst.Operand{
+			{Type: "m128", Action: inst.R},
+			{Type: "xmm", Action: inst.R},
+			{Type: "xmm", Action: inst.W},
+		},
+		EncodingType: inst.EncodingTypeVEX,
+	},
+	{
+		ISA: []string{"AES", "AVX"},
+		Operands: []inst.Operand{
+			{Type: "xmm", Action: inst.R},
+			{Type: "xmm", Action: inst.R},
+			{Type: "xmm", Action: inst.W},
+		},
+		EncodingType: inst.EncodingTypeVEX,
+	},
+	// VEX.256.66.0F38.WIG DE /r VAESDEC ymm1, ymm2, ymm3/m256  VAES
+	// VEX.256.66.0F38.WIG DF /r VAESDECLAST ymm1, ymm2, ymm3/m256  VAES
+	// VEX.256.66.0F38.WIG DC /r VAESENC ymm1, ymm2, ymm3/m256  VAES
+	// VEX.256.66.0F38.WIG DD /r VAESENCLAST ymm1, ymm2, ymm3/m256  VAES
+	{
+		ISA: []string{"VAES"},
+		Operands: []inst.Operand{
+			{Type: "m256", Action: inst.R},
+			{Type: "ymm", Action: inst.R},
+			{Type: "ymm", Action: inst.W},
+		},
+		EncodingType: inst.EncodingTypeVEX,
+	},
+	{
+		ISA: []string{"VAES"},
+		Operands: []inst.Operand{
+			{Type: "ymm", Action: inst.R},
+			{Type: "ymm", Action: inst.R},
+			{Type: "ymm", Action: inst.W},
+		},
+		EncodingType: inst.EncodingTypeVEX,
+	},
+	// EVEX.128.66.0F38.WIG DE /r VAESDEC xmm1, xmm2, xmm3/m128  AVX512VL + VAES
+	// EVEX.128.66.0F38.WIG DF /r VAESDECLAST xmm1, xmm2, xmm3/m128  AVX512VL + VAES
+	// EVEX.128.66.0F38.WIG DC /r VAESENC xmm1, xmm2, xmm3/m128  AVX512VL + VAES
+	// EVEX.128.66.0F38.WIG DD /r VAESENCLAST xmm1, xmm2, xmm3/m128  AVX512VL + VAES
+	{
+		ISA: []string{"AVX512VL", "VAES"},
+		Operands: []inst.Operand{
+			{Type: "m128", Action: inst.R},
+			{Type: "xmm", Action: inst.R},
+			{Type: "xmm", Action: inst.W},
+		},
+		EncodingType: inst.EncodingTypeEVEX,
+	},
+	{
+		ISA: []string{"AVX512VL", "VAES"},
+		Operands: []inst.Operand{
+			{Type: "xmm", Action: inst.R},
+			{Type: "xmm", Action: inst.R},
+			{Type: "xmm", Action: inst.W},
+		},
+		EncodingType: inst.EncodingTypeEVEX,
+	},
+	// EVEX.256.66.0F38.WIG DE /r VAESDEC ymm1, ymm2, ymm3/m256  AVX512VL + VAES
+	// EVEX.256.66.0F38.WIG DF /r VAESDECLAST ymm1, ymm2, ymm3/m256  AVX512VL + VAES
+	// EVEX.256.66.0F38.WIG DC /r VAESENC ymm1, ymm2, ymm3/m256  AVX512VL + VAES
+	// EVEX.256.66.0F38.WIG DD /r VAESENCLAST ymm1, ymm2, ymm3/m256  AVX512VL + VAES
+	{
+		ISA: []string{"AVX512VL", "VAES"},
+		Operands: []inst.Operand{
+			{Type: "m256", Action: inst.R},
+			{Type: "ymm", Action: inst.R},
+			{Type: "ymm", Action: inst.W},
+		},
+		EncodingType: inst.EncodingTypeEVEX,
+	},
+	{
+		ISA: []string{"AVX512VL", "VAES"},
+		Operands: []inst.Operand{
+			{Type: "ymm", Action: inst.R},
+			{Type: "ymm", Action: inst.R},
+			{Type: "ymm", Action: inst.W},
+		},
+		EncodingType: inst.EncodingTypeEVEX,
+	},
+	// EVEX.512.66.0F38.WIG DE /r VAESDEC zmm1, zmm2, zmm3/m512  AVX512F + VAES
+	// EVEX.512.66.0F38.WIG DF /r VAESDECLAST zmm1, zmm2, zmm3/m512  AVX512F + VAES
+	// EVEX.512.66.0F38.WIG DC /r VAESENC zmm1, zmm2, zmm3/m512  AVX512F + VAES
+	// EVEX.512.66.0F38.WIG DD /r VAESENCLAST zmm1, zmm2, zmm3/m512  AVX512F + VAES
+	{
+		ISA: []string{"AVX512F", "VAES"},
+		Operands: []inst.Operand{
+			{Type: "m512", Action: inst.R},
+			{Type: "zmm", Action: inst.R},
+			{Type: "zmm", Action: inst.W},
+		},
+		EncodingType: inst.EncodingTypeEVEX,
+	},
+	{
+		ISA: []string{"AVX512F", "VAES"},
+		Operands: []inst.Operand{
+			{Type: "zmm", Action: inst.R},
+			{Type: "zmm", Action: inst.R},
+			{Type: "zmm", Action: inst.W},
+		},
+		EncodingType: inst.EncodingTypeEVEX,
+	},
+}
diff --git a/x86/zctors.go b/x86/zctors.go
index 85a2ee6..c8cdc3f 100644
--- a/x86/zctors.go
+++ b/x86/zctors.go
@@ -7396,8 +7396,12 @@ func VADDSUBPS(mxy, xy, xy1 operand.Op) (*intrep.Instruction, error) {
 //
 //	VAESDEC m128 xmm xmm
 //	VAESDEC xmm  xmm xmm
-func VAESDEC(mx, x, x1 operand.Op) (*intrep.Instruction, error) {
-	return build(opcVAESDEC.Forms(), sffxs{}, []operand.Op{mx, x, x1})
+//	VAESDEC m256 ymm ymm
+//	VAESDEC ymm  ymm ymm
+//	VAESDEC m512 zmm zmm
+//	VAESDEC zmm  zmm zmm
+func VAESDEC(mxyz, xyz, xyz1 operand.Op) (*intrep.Instruction, error) {
+	return build(opcVAESDEC.Forms(), sffxs{}, []operand.Op{mxyz, xyz, xyz1})
 }
 
 // VAESDECLAST: Perform Last Round of an AES Decryption Flow.
@@ -7406,8 +7410,12 @@ func VAESDEC(mx, x, x1 operand.Op) (*intrep.Instruction, error) {
 //
 //	VAESDECLAST m128 xmm xmm
 //	VAESDECLAST xmm  xmm xmm
-func VAESDECLAST(mx, x, x1 operand.Op) (*intrep.Instruction, error) {
-	return build(opcVAESDECLAST.Forms(), sffxs{}, []operand.Op{mx, x, x1})
+//	VAESDECLAST m256 ymm ymm
+//	VAESDECLAST ymm  ymm ymm
+//	VAESDECLAST m512 zmm zmm
+//	VAESDECLAST zmm  zmm zmm
+func VAESDECLAST(mxyz, xyz, xyz1 operand.Op) (*intrep.Instruction, error) {
+	return build(opcVAESDECLAST.Forms(), sffxs{}, []operand.Op{mxyz, xyz, xyz1})
 }
 
 // VAESENC: Perform One Round of an AES Encryption Flow.
@@ -7416,8 +7424,12 @@ func VAESDECLAST(mx, x, x1 operand.Op) (*intrep.Instruction, error) {
 //
 //	VAESENC m128 xmm xmm
 //	VAESENC xmm  xmm xmm
-func VAESENC(mx, x, x1 operand.Op) (*intrep.Instruction, error) {
-	return build(opcVAESENC.Forms(), sffxs{}, []operand.Op{mx, x, x1})
+//	VAESENC m256 ymm ymm
+//	VAESENC ymm  ymm ymm
+//	VAESENC m512 zmm zmm
+//	VAESENC zmm  zmm zmm
+func VAESENC(mxyz, xyz, xyz1 operand.Op) (*intrep.Instruction, error) {
+	return build(opcVAESENC.Forms(), sffxs{}, []operand.Op{mxyz, xyz, xyz1})
 }
 
 // VAESENCLAST: Perform Last Round of an AES Encryption Flow.
@@ -7426,8 +7438,12 @@ func VAESENC(mx, x, x1 operand.Op) (*intrep.Instruction, error) {
 //
 //	VAESENCLAST m128 xmm xmm
 //	VAESENCLAST xmm  xmm xmm
-func VAESENCLAST(mx, x, x1 operand.Op) (*intrep.Instruction, error) {
-	return build(opcVAESENCLAST.Forms(), sffxs{}, []operand.Op{mx, x, x1})
+//	VAESENCLAST m256 ymm ymm
+//	VAESENCLAST ymm  ymm ymm
+//	VAESENCLAST m512 zmm zmm
+//	VAESENCLAST zmm  zmm zmm
+func VAESENCLAST(mxyz, xyz, xyz1 operand.Op) (*intrep.Instruction, error) {
+	return build(opcVAESENCLAST.Forms(), sffxs{}, []operand.Op{mxyz, xyz, xyz1})
 }
 
 // VAESIMC: Perform the AES InvMixColumn Transformation.
diff --git a/x86/zoptab.go b/x86/zoptab.go
index 34608a4..a738027 100644
--- a/x86/zoptab.go
+++ b/x86/zoptab.go
@@ -300,6 +300,8 @@ const (
 	isasAVX
 	isasAVX512F_AVX512VL
 	isasAES_AVX
+	isasVAES
+	isasAVX512F_VAES
 	isasAVX512DQ_AVX512VL
 	isasAVX2
 	isasF16C
@@ -362,6 +364,8 @@ var isaslisttable = [][]string{
 	{"AVX"},
 	{"AVX512F", "AVX512VL"},
 	{"AES", "AVX"},
+	{"VAES"},
+	{"AVX512F", "VAES"},
 	{"AVX512DQ", "AVX512VL"},
 	{"AVX2"},
 	{"F16C"},
@@ -4704,12 +4708,28 @@ var forms = []form{
 	{opcVADDSUBPS, sffxsclsNIL, 0, isasAVX, 3, oprnds{{uint8(oprndtypeYMM), false, actionR}, {uint8(oprndtypeYMM), false, actionR}, {uint8(oprndtypeYMM), false, actionW}}},
 	{opcVAESDEC, sffxsclsNIL, 0, isasAES_AVX, 3, oprnds{{uint8(oprndtypeM128), false, actionR}, {uint8(oprndtypeXMM), false, actionR}, {uint8(oprndtypeXMM), false, actionW}}},
 	{opcVAESDEC, sffxsclsNIL, 0, isasAES_AVX, 3, oprnds{{uint8(oprndtypeXMM), false, actionR}, {uint8(oprndtypeXMM), false, actionR}, {uint8(oprndtypeXMM), false, actionW}}},
+	{opcVAESDEC, sffxsclsNIL, 0, isasVAES, 3, oprnds{{uint8(oprndtypeM256), false, actionR}, {uint8(oprndtypeYMM), false, actionR}, {uint8(oprndtypeYMM), false, actionW}}},
+	{opcVAESDEC, sffxsclsNIL, 0, isasVAES, 3, oprnds{{uint8(oprndtypeYMM), false, actionR}, {uint8(oprndtypeYMM), false, actionR}, {uint8(oprndtypeYMM), false, actionW}}},
+	{opcVAESDEC, sffxsclsNIL, 0, isasAVX512F_VAES, 3, oprnds{{uint8(oprndtypeM512), false, actionR}, {uint8(oprndtypeZMM), false, actionR}, {uint8(oprndtypeZMM), false, actionW}}},
+	{opcVAESDEC, sffxsclsNIL, 0, isasAVX512F_VAES, 3, oprnds{{uint8(oprndtypeZMM), false, actionR}, {uint8(oprndtypeZMM), false, actionR}, {uint8(oprndtypeZMM), false, actionW}}},
 	{opcVAESDECLAST, sffxsclsNIL, 0, isasAES_AVX, 3, oprnds{{uint8(oprndtypeM128), false, actionR}, {uint8(oprndtypeXMM), false, actionR}, {uint8(oprndtypeXMM), false, actionW}}},
 	{opcVAESDECLAST, sffxsclsNIL, 0, isasAES_AVX, 3, oprnds{{uint8(oprndtypeXMM), false, actionR}, {uint8(oprndtypeXMM), false, actionR}, {uint8(oprndtypeXMM), false, actionW}}},
+	{opcVAESDECLAST, sffxsclsNIL, 0, isasVAES, 3, oprnds{{uint8(oprndtypeM256), false, actionR}, {uint8(oprndtypeYMM), false, actionR}, {uint8(oprndtypeYMM), false, actionW}}},
+	{opcVAESDECLAST, sffxsclsNIL, 0, isasVAES, 3, oprnds{{uint8(oprndtypeYMM), false, actionR}, {uint8(oprndtypeYMM), false, actionR}, {uint8(oprndtypeYMM), false, actionW}}},
+	{opcVAESDECLAST, sffxsclsNIL, 0, isasAVX512F_VAES, 3, oprnds{{uint8(oprndtypeM512), false, actionR}, {uint8(oprndtypeZMM), false, actionR}, {uint8(oprndtypeZMM), false, actionW}}},
+	{opcVAESDECLAST, sffxsclsNIL, 0, isasAVX512F_VAES, 3, oprnds{{uint8(oprndtypeZMM), false, actionR}, {uint8(oprndtypeZMM), false, actionR}, {uint8(oprndtypeZMM), false, actionW}}},
 	{opcVAESENC, sffxsclsNIL, 0, isasAES_AVX, 3, oprnds{{uint8(oprndtypeM128), false, actionR}, {uint8(oprndtypeXMM), false, actionR}, {uint8(oprndtypeXMM), false, actionW}}},
 	{opcVAESENC, sffxsclsNIL, 0, isasAES_AVX, 3, oprnds{{uint8(oprndtypeXMM), false, actionR}, {uint8(oprndtypeXMM), false, actionR}, {uint8(oprndtypeXMM), false, actionW}}},
+	{opcVAESENC, sffxsclsNIL, 0, isasVAES, 3, oprnds{{uint8(oprndtypeM256), false, actionR}, {uint8(oprndtypeYMM), false, actionR}, {uint8(oprndtypeYMM), false, actionW}}},
+	{opcVAESENC, sffxsclsNIL, 0, isasVAES, 3, oprnds{{uint8(oprndtypeYMM), false, actionR}, {uint8(oprndtypeYMM), false, actionR}, {uint8(oprndtypeYMM), false, actionW}}},
+	{opcVAESENC, sffxsclsNIL, 0, isasAVX512F_VAES, 3, oprnds{{uint8(oprndtypeM512), false, actionR}, {uint8(oprndtypeZMM), false, actionR}, {uint8(oprndtypeZMM), false, actionW}}},
+	{opcVAESENC, sffxsclsNIL, 0, isasAVX512F_VAES, 3, oprnds{{uint8(oprndtypeZMM), false, actionR}, {uint8(oprndtypeZMM), false, actionR}, {uint8(oprndtypeZMM), false, actionW}}},
 	{opcVAESENCLAST, sffxsclsNIL, 0, isasAES_AVX, 3, oprnds{{uint8(oprndtypeM128), false, actionR}, {uint8(oprndtypeXMM), false, actionR}, {uint8(oprndtypeXMM), false, actionW}}},
 	{opcVAESENCLAST, sffxsclsNIL, 0, isasAES_AVX, 3, oprnds{{uint8(oprndtypeXMM), false, actionR}, {uint8(oprndtypeXMM), false, actionR}, {uint8(oprndtypeXMM), false, actionW}}},
+	{opcVAESENCLAST, sffxsclsNIL, 0, isasVAES, 3, oprnds{{uint8(oprndtypeM256), false, actionR}, {uint8(oprndtypeYMM), false, actionR}, {uint8(oprndtypeYMM), false, actionW}}},
+	{opcVAESENCLAST, sffxsclsNIL, 0, isasVAES, 3, oprnds{{uint8(oprndtypeYMM), false, actionR}, {uint8(oprndtypeYMM), false, actionR}, {uint8(oprndtypeYMM), false, actionW}}},
+	{opcVAESENCLAST, sffxsclsNIL, 0, isasAVX512F_VAES, 3, oprnds{{uint8(oprndtypeM512), false, actionR}, {uint8(oprndtypeZMM), false, actionR}, {uint8(oprndtypeZMM), false, actionW}}},
+	{opcVAESENCLAST, sffxsclsNIL, 0, isasAVX512F_VAES, 3, oprnds{{uint8(oprndtypeZMM), false, actionR}, {uint8(oprndtypeZMM), false, actionR}, {uint8(oprndtypeZMM), false, actionW}}},
 	{opcVAESIMC, sffxsclsNIL, 0, isasAES_AVX, 2, oprnds{{uint8(oprndtypeM128), false, actionR}, {uint8(oprndtypeXMM), false, actionW}}},
 	{opcVAESIMC, sffxsclsNIL, 0, isasAES_AVX, 2, oprnds{{uint8(oprndtypeXMM), false, actionR}, {uint8(oprndtypeXMM), false, actionW}}},
 	{opcVAESKEYGENASSIST, sffxsclsNIL, 0, isasAES_AVX, 3, oprnds{{uint8(oprndtypeIMM8), false, actionN}, {uint8(oprndtypeM128), false, actionR}, {uint8(oprndtypeXMM), false, actionW}}},
@@ -15102,627 +15122,627 @@ var opcformstable = [][]form{
 	forms[1714:1723],
 	forms[1723:1727],
 	forms[1727:1731],
-	forms[1731:1733],
-	forms[1733:1735],
-	forms[1735:1737],
-	forms[1737:1739],
-	forms[1739:1741],
-	forms[1741:1743],
-	forms[1743:1770],
-	forms[1770:1797],
-	forms[1797:1824],
-	forms[1824:1851],
-	forms[1851:1878],
-	forms[1878:1905],
-	forms[1905:1932],
-	forms[1932:1959],
-	forms[1959:1963],
-	forms[1963:1967],
-	forms[1967:1971],
-	forms[1971:1975],
-	forms[1975:1976],
-	forms[1976:1988],
-	forms[1988:1994],
-	forms[1994:1997],
-	forms[1997:2003],
-	forms[2003:2006],
-	forms[2006:2007],
-	forms[2007:2025],
-	forms[2025:2031],
-	forms[2031:2034],
-	forms[2034:2040],
-	forms[2040:2043],
-	forms[2043:2055],
-	forms[2055:2069],
-	forms[2069:2093],
-	forms[2093:2117],
-	forms[2117:2125],
-	forms[2125:2133],
-	forms[2133:2136],
-	forms[2136:2139],
-	forms[2139:2157],
-	forms[2157:2175],
-	forms[2175:2202],
-	forms[2202:2232],
-	forms[2232:2244],
-	forms[2244:2253],
-	forms[2253:2262],
-	forms[2262:2274],
-	forms[2274:2283],
-	forms[2283:2292],
-	forms[2292:2322],
-	forms[2322:2334],
-	forms[2334:2343],
-	forms[2343:2352],
-	forms[2352:2382],
-	forms[2382:2403],
-	forms[2403:2433],
-	forms[2433:2463],
-	forms[2463:2484],
-	forms[2484:2514],
-	forms[2514:2544],
-	forms[2544:2574],
-	forms[2574:2604],
-	forms[2604:2616],
-	forms[2616:2625],
-	forms[2625:2634],
-	forms[2634:2637],
-	forms[2637:2640],
-	forms[2640:2649],
-	forms[2649:2652],
-	forms[2652:2655],
-	forms[2655:2657],
-	forms[2657:2660],
-	forms[2660:2663],
-	forms[2663:2666],
-	forms[2666:2675],
-	forms[2675:2678],
-	forms[2678:2681],
-	forms[2681:2684],
-	forms[2684:2687],
-	forms[2687:2699],
-	forms[2699:2708],
-	forms[2708:2717],
-	forms[2717:2747],
-	forms[2747:2759],
-	forms[2759:2768],
-	forms[2768:2777],
-	forms[2777:2807],
-	forms[2807:2837],
-	forms[2837:2867],
-	forms[2867:2897],
-	forms[2897:2927],
-	forms[2927:2930],
-	forms[2930:2933],
-	forms[2933:2936],
-	forms[2936:2939],
-	forms[2939:2942],
-	forms[2942:2945],
-	forms[2945:2948],
-	forms[2948:2951],
-	forms[2951:2978],
-	forms[2978:3008],
-	forms[3008:3038],
-	forms[3038:3050],
-	forms[3050:3059],
-	forms[3059:3068],
-	forms[3068:3070],
-	forms[3070:3073],
-	forms[3073:3076],
-	forms[3076:3079],
-	forms[3079:3097],
-	forms[3097:3127],
-	forms[3127:3157],
-	forms[3157:3166],
-	forms[3166:3175],
-	forms[3175:3177],
-	forms[3177:3181],
-	forms[3181:3193],
-	forms[3193:3205],
-	forms[3205:3223],
-	forms[3223:3241],
-	forms[3241:3243],
-	forms[3243:3255],
-	forms[3255:3261],
-	forms[3261:3273],
-	forms[3273:3279],
-	forms[3279:3281],
-	forms[3281:3293],
-	forms[3293:3299],
-	forms[3299:3311],
-	forms[3311:3317],
-	forms[3317:3319],
-	forms[3319:3349],
-	forms[3349:3379],
-	forms[3379:3388],
-	forms[3388:3397],
-	forms[3397:3427],
-	forms[3427:3457],
-	forms[3457:3466],
-	forms[3466:3475],
-	forms[3475:3505],
-	forms[3505:3535],
-	forms[3535:3544],
-	forms[3544:3553],
-	forms[3553:3583],
-	forms[3583:3613],
-	forms[3613:3622],
-	forms[3622:3631],
-	forms[3631:3661],
-	forms[3661:3691],
-	forms[3691:3721],
-	forms[3721:3751],
-	forms[3751:3781],
-	forms[3781:3811],
-	forms[3811:3841],
-	forms[3841:3871],
-	forms[3871:3880],
-	forms[3880:3889],
-	forms[3889:3919],
-	forms[3919:3949],
-	forms[3949:3958],
-	forms[3958:3967],
-	forms[3967:3997],
-	forms[3997:4027],
-	forms[4027:4036],
-	forms[4036:4045],
-	forms[4045:4075],
-	forms[4075:4105],
-	forms[4105:4135],
-	forms[4135:4165],
-	forms[4165:4195],
-	forms[4195:4225],
-	forms[4225:4255],
-	forms[4255:4285],
-	forms[4285:4294],
-	forms[4294:4303],
-	forms[4303:4333],
-	forms[4333:4363],
-	forms[4363:4372],
-	forms[4372:4381],
-	forms[4381:4411],
-	forms[4411:4441],
-	forms[4441:4450],
-	forms[4450:4459],
-	forms[4459:4489],
-	forms[4489:4519],
-	forms[4519:4528],
-	forms[4528:4537],
-	forms[4537:4567],
-	forms[4567:4597],
-	forms[4597:4606],
-	forms[4606:4615],
-	forms[4615:4645],
-	forms[4645:4675],
-	forms[4675:4684],
-	forms[4684:4693],
-	forms[4693:4699],
-	forms[4699:4705],
-	forms[4705:4711],
-	forms[4711:4717],
-	forms[4717:4723],
-	forms[4723:4729],
-	forms[4729:4733],
-	forms[4733:4737],
-	forms[4737:4742],
-	forms[4742:4747],
-	forms[4747:4752],
-	forms[4752:4757],
-	forms[4757:4787],
-	forms[4787:4817],
-	forms[4817:4826],
-	forms[4826:4835],
-	forms[4835:4865],
-	forms[4865:4895],
-	forms[4895:4904],
-	forms[4904:4913],
-	forms[4913:4940],
-	forms[4940:4967],
-	forms[4967:4985],
-	forms[4985:4989],
-	forms[4989:4993],
-	forms[4993:4997],
-	forms[4997:5001],
-	forms[5001:5003],
-	forms[5003:5015],
-	forms[5015:5021],
-	forms[5021:5033],
-	forms[5033:5039],
-	forms[5039:5041],
-	forms[5041:5053],
-	forms[5053:5059],
-	forms[5059:5071],
-	forms[5071:5077],
-	forms[5077:5079],
-	forms[5079:5081],
-	forms[5081:5082],
-	forms[5082:5083],
-	forms[5083:5087],
-	forms[5087:5091],
-	forms[5091:5121],
-	forms[5121:5151],
-	forms[5151:5160],
-	forms[5160:5169],
-	forms[5169:5199],
-	forms[5199:5229],
-	forms[5229:5238],
-	forms[5238:5247],
-	forms[5247:5274],
-	forms[5274:5301],
-	forms[5301:5305],
-	forms[5305:5323],
-	forms[5323:5329],
-	forms[5329:5356],
-	forms[5356:5383],
-	forms[5383:5389],
-	forms[5389:5416],
-	forms[5416:5443],
-	forms[5443:5470],
-	forms[5470:5497],
-	forms[5497:5498],
-	forms[5498:5500],
-	forms[5500:5502],
-	forms[5502:5503],
-	forms[5503:5505],
-	forms[5505:5507],
-	forms[5507:5509],
-	forms[5509:5511],
-	forms[5511:5514],
-	forms[5514:5517],
-	forms[5517:5520],
-	forms[5520:5523],
-	forms[5523:5528],
-	forms[5528:5536],
-	forms[5536:5554],
-	forms[5554:5572],
-	forms[5572:5580],
-	forms[5580:5607],
-	forms[5607:5634],
-	forms[5634:5638],
-	forms[5638:5668],
-	forms[5668:5698],
-	forms[5698:5707],
-	forms[5707:5716],
-	forms[5716:5743],
-	forms[5743:5770],
-	forms[5770:5788],
-	forms[5788:5815],
-	forms[5815:5842],
-	forms[5842:5860],
-	forms[5860:5887],
-	forms[5887:5905],
-	forms[5905:5932],
-	forms[5932:5950],
-	forms[5950:5968],
-	forms[5968:5995],
-	forms[5995:6022],
-	forms[6022:6040],
-	forms[6040:6058],
-	forms[6058:6076],
-	forms[6076:6094],
-	forms[6094:6112],
-	forms[6112:6130],
-	forms[6130:6134],
-	forms[6134:6161],
-	forms[6161:6165],
-	forms[6165:6192],
-	forms[6192:6219],
-	forms[6219:6246],
-	forms[6246:6264],
-	forms[6264:6282],
-	forms[6282:6286],
-	forms[6286:6304],
-	forms[6304:6331],
-	forms[6331:6358],
-	forms[6358:6376],
-	forms[6376:6380],
-	forms[6380:6384],
-	forms[6384:6411],
-	forms[6411:6438],
-	forms[6438:6441],
-	forms[6441:6444],
-	forms[6444:6471],
-	forms[6471:6498],
-	forms[6498:6500],
-	forms[6500:6512],
-	forms[6512:6530],
-	forms[6530:6546],
-	forms[6546:6568],
-	forms[6568:6590],
-	forms[6590:6606],
-	forms[6606:6608],
-	forms[6608:6610],
-	forms[6610:6626],
-	forms[6626:6648],
-	forms[6648:6670],
-	forms[6670:6686],
-	forms[6686:6688],
-	forms[6688:6690],
-	forms[6690:6708],
-	forms[6708:6720],
-	forms[6720:6738],
-	forms[6738:6756],
-	forms[6756:6768],
-	forms[6768:6780],
-	forms[6780:6798],
-	forms[6798:6816],
-	forms[6816:6843],
-	forms[6843:6870],
-	forms[6870:6872],
-	forms[6872:6874],
-	forms[6874:6892],
-	forms[6892:6910],
-	forms[6910:6928],
-	forms[6928:6955],
-	forms[6955:6982],
-	forms[6982:7009],
-	forms[7009:7036],
-	forms[7036:7054],
-	forms[7054:7108],
-	forms[7108:7162],
-	forms[7162:7198],
-	forms[7198:7216],
-	forms[7216:7252],
-	forms[7252:7270],
-	forms[7270:7297],
-	forms[7297:7324],
-	forms[7324:7351],
-	forms[7351:7378],
-	forms[7378:7396],
-	forms[7396:7414],
-	forms[7414:7432],
-	forms[7432:7450],
-	forms[7450:7452],
-	forms[7452:7454],
-	forms[7454:7456],
-	forms[7456:7458],
-	forms[7458:7463],
-	forms[7463:7468],
-	forms[7468:7473],
-	forms[7473:7478],
-	forms[7478:7482],
-	forms[7482:7486],
-	forms[7486:7490],
-	forms[7490:7492],
-	forms[7492:7496],
-	forms[7496:7500],
-	forms[7500:7504],
-	forms[7504:7506],
+	forms[1731:1737],
+	forms[1737:1743],
+	forms[1743:1749],
+	forms[1749:1755],
+	forms[1755:1757],
+	forms[1757:1759],
+	forms[1759:1786],
+	forms[1786:1813],
+	forms[1813:1840],
+	forms[1840:1867],
+	forms[1867:1894],
+	forms[1894:1921],
+	forms[1921:1948],
+	forms[1948:1975],
+	forms[1975:1979],
+	forms[1979:1983],
+	forms[1983:1987],
+	forms[1987:1991],
+	forms[1991:1992],
+	forms[1992:2004],
+	forms[2004:2010],
+	forms[2010:2013],
+	forms[2013:2019],
+	forms[2019:2022],
+	forms[2022:2023],
+	forms[2023:2041],
+	forms[2041:2047],
+	forms[2047:2050],
+	forms[2050:2056],
+	forms[2056:2059],
+	forms[2059:2071],
+	forms[2071:2085],
+	forms[2085:2109],
+	forms[2109:2133],
+	forms[2133:2141],
+	forms[2141:2149],
+	forms[2149:2152],
+	forms[2152:2155],
+	forms[2155:2173],
+	forms[2173:2191],
+	forms[2191:2218],
+	forms[2218:2248],
+	forms[2248:2260],
+	forms[2260:2269],
+	forms[2269:2278],
+	forms[2278:2290],
+	forms[2290:2299],
+	forms[2299:2308],
+	forms[2308:2338],
+	forms[2338:2350],
+	forms[2350:2359],
+	forms[2359:2368],
+	forms[2368:2398],
+	forms[2398:2419],
+	forms[2419:2449],
+	forms[2449:2479],
+	forms[2479:2500],
+	forms[2500:2530],
+	forms[2530:2560],
+	forms[2560:2590],
+	forms[2590:2620],
+	forms[2620:2632],
+	forms[2632:2641],
+	forms[2641:2650],
+	forms[2650:2653],
+	forms[2653:2656],
+	forms[2656:2665],
+	forms[2665:2668],
+	forms[2668:2671],
+	forms[2671:2673],
+	forms[2673:2676],
+	forms[2676:2679],
+	forms[2679:2682],
+	forms[2682:2691],
+	forms[2691:2694],
+	forms[2694:2697],
+	forms[2697:2700],
+	forms[2700:2703],
+	forms[2703:2715],
+	forms[2715:2724],
+	forms[2724:2733],
+	forms[2733:2763],
+	forms[2763:2775],
+	forms[2775:2784],
+	forms[2784:2793],
+	forms[2793:2823],
+	forms[2823:2853],
+	forms[2853:2883],
+	forms[2883:2913],
+	forms[2913:2943],
+	forms[2943:2946],
+	forms[2946:2949],
+	forms[2949:2952],
+	forms[2952:2955],
+	forms[2955:2958],
+	forms[2958:2961],
+	forms[2961:2964],
+	forms[2964:2967],
+	forms[2967:2994],
+	forms[2994:3024],
+	forms[3024:3054],
+	forms[3054:3066],
+	forms[3066:3075],
+	forms[3075:3084],
+	forms[3084:3086],
+	forms[3086:3089],
+	forms[3089:3092],
+	forms[3092:3095],
+	forms[3095:3113],
+	forms[3113:3143],
+	forms[3143:3173],
+	forms[3173:3182],
+	forms[3182:3191],
+	forms[3191:3193],
+	forms[3193:3197],
+	forms[3197:3209],
+	forms[3209:3221],
+	forms[3221:3239],
+	forms[3239:3257],
+	forms[3257:3259],
+	forms[3259:3271],
+	forms[3271:3277],
+	forms[3277:3289],
+	forms[3289:3295],
+	forms[3295:3297],
+	forms[3297:3309],
+	forms[3309:3315],
+	forms[3315:3327],
+	forms[3327:3333],
+	forms[3333:3335],
+	forms[3335:3365],
+	forms[3365:3395],
+	forms[3395:3404],
+	forms[3404:3413],
+	forms[3413:3443],
+	forms[3443:3473],
+	forms[3473:3482],
+	forms[3482:3491],
+	forms[3491:3521],
+	forms[3521:3551],
+	forms[3551:3560],
+	forms[3560:3569],
+	forms[3569:3599],
+	forms[3599:3629],
+	forms[3629:3638],
+	forms[3638:3647],
+	forms[3647:3677],
+	forms[3677:3707],
+	forms[3707:3737],
+	forms[3737:3767],
+	forms[3767:3797],
+	forms[3797:3827],
+	forms[3827:3857],
+	forms[3857:3887],
+	forms[3887:3896],
+	forms[3896:3905],
+	forms[3905:3935],
+	forms[3935:3965],
+	forms[3965:3974],
+	forms[3974:3983],
+	forms[3983:4013],
+	forms[4013:4043],
+	forms[4043:4052],
+	forms[4052:4061],
+	forms[4061:4091],
+	forms[4091:4121],
+	forms[4121:4151],
+	forms[4151:4181],
+	forms[4181:4211],
+	forms[4211:4241],
+	forms[4241:4271],
+	forms[4271:4301],
+	forms[4301:4310],
+	forms[4310:4319],
+	forms[4319:4349],
+	forms[4349:4379],
+	forms[4379:4388],
+	forms[4388:4397],
+	forms[4397:4427],
+	forms[4427:4457],
+	forms[4457:4466],
+	forms[4466:4475],
+	forms[4475:4505],
+	forms[4505:4535],
+	forms[4535:4544],
+	forms[4544:4553],
+	forms[4553:4583],
+	forms[4583:4613],
+	forms[4613:4622],
+	forms[4622:4631],
+	forms[4631:4661],
+	forms[4661:4691],
+	forms[4691:4700],
+	forms[4700:4709],
+	forms[4709:4715],
+	forms[4715:4721],
+	forms[4721:4727],
+	forms[4727:4733],
+	forms[4733:4739],
+	forms[4739:4745],
+	forms[4745:4749],
+	forms[4749:4753],
+	forms[4753:4758],
+	forms[4758:4763],
+	forms[4763:4768],
+	forms[4768:4773],
+	forms[4773:4803],
+	forms[4803:4833],
+	forms[4833:4842],
+	forms[4842:4851],
+	forms[4851:4881],
+	forms[4881:4911],
+	forms[4911:4920],
+	forms[4920:4929],
+	forms[4929:4956],
+	forms[4956:4983],
+	forms[4983:5001],
+	forms[5001:5005],
+	forms[5005:5009],
+	forms[5009:5013],
+	forms[5013:5017],
+	forms[5017:5019],
+	forms[5019:5031],
+	forms[5031:5037],
+	forms[5037:5049],
+	forms[5049:5055],
+	forms[5055:5057],
+	forms[5057:5069],
+	forms[5069:5075],
+	forms[5075:5087],
+	forms[5087:5093],
+	forms[5093:5095],
+	forms[5095:5097],
+	forms[5097:5098],
+	forms[5098:5099],
+	forms[5099:5103],
+	forms[5103:5107],
+	forms[5107:5137],
+	forms[5137:5167],
+	forms[5167:5176],
+	forms[5176:5185],
+	forms[5185:5215],
+	forms[5215:5245],
+	forms[5245:5254],
+	forms[5254:5263],
+	forms[5263:5290],
+	forms[5290:5317],
+	forms[5317:5321],
+	forms[5321:5339],
+	forms[5339:5345],
+	forms[5345:5372],
+	forms[5372:5399],
+	forms[5399:5405],
+	forms[5405:5432],
+	forms[5432:5459],
+	forms[5459:5486],
+	forms[5486:5513],
+	forms[5513:5514],
+	forms[5514:5516],
+	forms[5516:5518],
+	forms[5518:5519],
+	forms[5519:5521],
+	forms[5521:5523],
+	forms[5523:5525],
+	forms[5525:5527],
+	forms[5527:5530],
+	forms[5530:5533],
+	forms[5533:5536],
+	forms[5536:5539],
+	forms[5539:5544],
+	forms[5544:5552],
+	forms[5552:5570],
+	forms[5570:5588],
+	forms[5588:5596],
+	forms[5596:5623],
+	forms[5623:5650],
+	forms[5650:5654],
+	forms[5654:5684],
+	forms[5684:5714],
+	forms[5714:5723],
+	forms[5723:5732],
+	forms[5732:5759],
+	forms[5759:5786],
+	forms[5786:5804],
+	forms[5804:5831],
+	forms[5831:5858],
+	forms[5858:5876],
+	forms[5876:5903],
+	forms[5903:5921],
+	forms[5921:5948],
+	forms[5948:5966],
+	forms[5966:5984],
+	forms[5984:6011],
+	forms[6011:6038],
+	forms[6038:6056],
+	forms[6056:6074],
+	forms[6074:6092],
+	forms[6092:6110],
+	forms[6110:6128],
+	forms[6128:6146],
+	forms[6146:6150],
+	forms[6150:6177],
+	forms[6177:6181],
+	forms[6181:6208],
+	forms[6208:6235],
+	forms[6235:6262],
+	forms[6262:6280],
+	forms[6280:6298],
+	forms[6298:6302],
+	forms[6302:6320],
+	forms[6320:6347],
+	forms[6347:6374],
+	forms[6374:6392],
+	forms[6392:6396],
+	forms[6396:6400],
+	forms[6400:6427],
+	forms[6427:6454],
+	forms[6454:6457],
+	forms[6457:6460],
+	forms[6460:6487],
+	forms[6487:6514],
+	forms[6514:6516],
+	forms[6516:6528],
+	forms[6528:6546],
+	forms[6546:6562],
+	forms[6562:6584],
+	forms[6584:6606],
+	forms[6606:6622],
+	forms[6622:6624],
+	forms[6624:6626],
+	forms[6626:6642],
+	forms[6642:6664],
+	forms[6664:6686],
+	forms[6686:6702],
+	forms[6702:6704],
+	forms[6704:6706],
+	forms[6706:6724],
+	forms[6724:6736],
+	forms[6736:6754],
+	forms[6754:6772],
+	forms[6772:6784],
+	forms[6784:6796],
+	forms[6796:6814],
+	forms[6814:6832],
+	forms[6832:6859],
+	forms[6859:6886],
+	forms[6886:6888],
+	forms[6888:6890],
+	forms[6890:6908],
+	forms[6908:6926],
+	forms[6926:6944],
+	forms[6944:6971],
+	forms[6971:6998],
+	forms[6998:7025],
+	forms[7025:7052],
+	forms[7052:7070],
+	forms[7070:7124],
+	forms[7124:7178],
+	forms[7178:7214],
+	forms[7214:7232],
+	forms[7232:7268],
+	forms[7268:7286],
+	forms[7286:7313],
+	forms[7313:7340],
+	forms[7340:7367],
+	forms[7367:7394],
+	forms[7394:7412],
+	forms[7412:7430],
+	forms[7430:7448],
+	forms[7448:7466],
+	forms[7466:7468],
+	forms[7468:7470],
+	forms[7470:7472],
+	forms[7472:7474],
+	forms[7474:7479],
+	forms[7479:7484],
+	forms[7484:7489],
+	forms[7489:7494],
+	forms[7494:7498],
+	forms[7498:7502],
+	forms[7502:7506],
 	forms[7506:7508],
-	forms[7508:7510],
-	forms[7510:7512],
-	forms[7512:7539],
-	forms[7539:7566],
-	forms[7566:7593],
-	forms[7593:7620],
-	forms[7620:7638],
-	forms[7638:7656],
-	forms[7656:7660],
-	forms[7660:7664],
-	forms[7664:7682],
-	forms[7682:7709],
-	forms[7709:7736],
-	forms[7736:7754],
-	forms[7754:7772],
-	forms[7772:7799],
-	forms[7799:7826],
-	forms[7826:7844],
-	forms[7844:7862],
-	forms[7862:7889],
-	forms[7889:7916],
-	forms[7916:7934],
-	forms[7934:7952],
-	forms[7952:7979],
-	forms[7979:8006],
-	forms[8006:8024],
-	forms[8024:8027],
-	forms[8027:8030],
-	forms[8030:8048],
-	forms[8048:8066],
-	forms[8066:8069],
-	forms[8069:8072],
-	forms[8072:8075],
-	forms[8075:8078],
-	forms[8078:8080],
-	forms[8080:8083],
-	forms[8083:8101],
-	forms[8101:8119],
-	forms[8119:8137],
-	forms[8137:8155],
-	forms[8155:8173],
-	forms[8173:8191],
-	forms[8191:8209],
-	forms[8209:8227],
-	forms[8227:8245],
-	forms[8245:8263],
-	forms[8263:8281],
-	forms[8281:8299],
-	forms[8299:8317],
-	forms[8317:8335],
-	forms[8335:8353],
-	forms[8353:8371],
-	forms[8371:8389],
-	forms[8389:8407],
-	forms[8407:8425],
-	forms[8425:8443],
-	forms[8443:8461],
-	forms[8461:8464],
-	forms[8464:8482],
-	forms[8482:8500],
-	forms[8500:8518],
-	forms[8518:8536],
-	forms[8536:8554],
-	forms[8554:8572],
-	forms[8572:8590],
-	forms[8590:8617],
-	forms[8617:8635],
-	forms[8635:8653],
-	forms[8653:8671],
-	forms[8671:8698],
-	forms[8698:8725],
-	forms[8725:8743],
-	forms[8743:8770],
-	forms[8770:8797],
-	forms[8797:8806],
-	forms[8806:8815],
-	forms[8815:8819],
-	forms[8819:8846],
-	forms[8846:8873],
-	forms[8873:8900],
-	forms[8900:8927],
-	forms[8927:8954],
-	forms[8954:8981],
-	forms[8981:9008],
-	forms[9008:9035],
-	forms[9035:9062],
-	forms[9062:9089],
-	forms[9089:9095],
-	forms[9095:9098],
-	forms[9098:9101],
-	forms[9101:9104],
-	forms[9104:9107],
-	forms[9107:9125],
-	forms[9125:9152],
-	forms[9152:9170],
-	forms[9170:9188],
-	forms[9188:9192],
-	forms[9192:9196],
-	forms[9196:9200],
-	forms[9200:9245],
-	forms[9245:9251],
-	forms[9251:9296],
-	forms[9296:9323],
-	forms[9323:9350],
-	forms[9350:9368],
-	forms[9368:9404],
-	forms[9404:9449],
-	forms[9449:9494],
-	forms[9494:9521],
-	forms[9521:9548],
-	forms[9548:9566],
-	forms[9566:9602],
-	forms[9602:9647],
-	forms[9647:9653],
-	forms[9653:9698],
-	forms[9698:9725],
-	forms[9725:9752],
-	forms[9752:9770],
-	forms[9770:9806],
-	forms[9806:9824],
-	forms[9824:9851],
-	forms[9851:9878],
-	forms[9878:9896],
-	forms[9896:9914],
-	forms[9914:9932],
-	forms[9932:9950],
-	forms[9950:9968],
-	forms[9968:9995],
-	forms[9995:10022],
-	forms[10022:10026],
-	forms[10026:10038],
-	forms[10038:10056],
-	forms[10056:10074],
-	forms[10074:10086],
-	forms[10086:10098],
-	forms[10098:10116],
-	forms[10116:10134],
-	forms[10134:10146],
-	forms[10146:10164],
-	forms[10164:10191],
-	forms[10191:10218],
-	forms[10218:10236],
-	forms[10236:10254],
-	forms[10254:10281],
-	forms[10281:10308],
-	forms[10308:10326],
-	forms[10326:10330],
-	forms[10330:10357],
-	forms[10357:10384],
-	forms[10384:10414],
-	forms[10414:10444],
-	forms[10444:10453],
-	forms[10453:10462],
-	forms[10462:10489],
-	forms[10489:10516],
-	forms[10516:10522],
-	forms[10522:10528],
-	forms[10528:10540],
-	forms[10540:10552],
-	forms[10552:10561],
-	forms[10561:10570],
-	forms[10570:10574],
-	forms[10574:10576],
-	forms[10576:10603],
-	forms[10603:10630],
-	forms[10630:10636],
-	forms[10636:10642],
-	forms[10642:10672],
-	forms[10672:10702],
-	forms[10702:10711],
-	forms[10711:10720],
-	forms[10720:10724],
-	forms[10724:10728],
-	forms[10728:10730],
-	forms[10730:10732],
-	forms[10732:10759],
-	forms[10759:10786],
-	forms[10786:10792],
-	forms[10792:10798],
-	forms[10798:10810],
-	forms[10810:10822],
-	forms[10822:10831],
-	forms[10831:10840],
-	forms[10840:10844],
-	forms[10844:10846],
-	forms[10846:10876],
-	forms[10876:10906],
-	forms[10906:10915],
-	forms[10915:10924],
-	forms[10924:10927],
-	forms[10927:10930],
-	forms[10930:10933],
-	forms[10933:10936],
-	forms[10936:10954],
-	forms[10954:10972],
-	forms[10972:10990],
-	forms[10990:11008],
-	forms[11008:11035],
-	forms[11035:11062],
-	forms[11062:11092],
-	forms[11092:11122],
-	forms[11122:11131],
-	forms[11131:11140],
-	forms[11140:11141],
-	forms[11141:11171],
-	forms[11171:11201],
-	forms[11201:11210],
-	forms[11210:11219],
-	forms[11219:11223],
-	forms[11223:11227],
-	forms[11227:11230],
-	forms[11230:11233],
-	forms[11233:11260],
-	forms[11260:11287],
-	forms[11287:11314],
-	forms[11314:11341],
-	forms[11341:11368],
-	forms[11368:11395],
-	forms[11395:11396],
-	forms[11396:11397],
-	forms[11397:11399],
-	forms[11399:11401],
-	forms[11401:11403],
-	forms[11403:11405],
-	forms[11405:11408],
-	forms[11408:11413],
-	forms[11413:11418],
-	forms[11418:11423],
-	forms[11423:11424],
-	forms[11424:11425],
-	forms[11425:11431],
-	forms[11431:11439],
-	forms[11439:11441],
-	forms[11441:11443],
-	forms[11443:11451],
-	forms[11451:11459],
+	forms[7508:7512],
+	forms[7512:7516],
+	forms[7516:7520],
+	forms[7520:7522],
+	forms[7522:7524],
+	forms[7524:7526],
+	forms[7526:7528],
+	forms[7528:7555],
+	forms[7555:7582],
+	forms[7582:7609],
+	forms[7609:7636],
+	forms[7636:7654],
+	forms[7654:7672],
+	forms[7672:7676],
+	forms[7676:7680],
+	forms[7680:7698],
+	forms[7698:7725],
+	forms[7725:7752],
+	forms[7752:7770],
+	forms[7770:7788],
+	forms[7788:7815],
+	forms[7815:7842],
+	forms[7842:7860],
+	forms[7860:7878],
+	forms[7878:7905],
+	forms[7905:7932],
+	forms[7932:7950],
+	forms[7950:7968],
+	forms[7968:7995],
+	forms[7995:8022],
+	forms[8022:8040],
+	forms[8040:8043],
+	forms[8043:8046],
+	forms[8046:8064],
+	forms[8064:8082],
+	forms[8082:8085],
+	forms[8085:8088],
+	forms[8088:8091],
+	forms[8091:8094],
+	forms[8094:8096],
+	forms[8096:8099],
+	forms[8099:8117],
+	forms[8117:8135],
+	forms[8135:8153],
+	forms[8153:8171],
+	forms[8171:8189],
+	forms[8189:8207],
+	forms[8207:8225],
+	forms[8225:8243],
+	forms[8243:8261],
+	forms[8261:8279],
+	forms[8279:8297],
+	forms[8297:8315],
+	forms[8315:8333],
+	forms[8333:8351],
+	forms[8351:8369],
+	forms[8369:8387],
+	forms[8387:8405],
+	forms[8405:8423],
+	forms[8423:8441],
+	forms[8441:8459],
+	forms[8459:8477],
+	forms[8477:8480],
+	forms[8480:8498],
+	forms[8498:8516],
+	forms[8516:8534],
+	forms[8534:8552],
+	forms[8552:8570],
+	forms[8570:8588],
+	forms[8588:8606],
+	forms[8606:8633],
+	forms[8633:8651],
+	forms[8651:8669],
+	forms[8669:8687],
+	forms[8687:8714],
+	forms[8714:8741],
+	forms[8741:8759],
+	forms[8759:8786],
+	forms[8786:8813],
+	forms[8813:8822],
+	forms[8822:8831],
+	forms[8831:8835],
+	forms[8835:8862],
+	forms[8862:8889],
+	forms[8889:8916],
+	forms[8916:8943],
+	forms[8943:8970],
+	forms[8970:8997],
+	forms[8997:9024],
+	forms[9024:9051],
+	forms[9051:9078],
+	forms[9078:9105],
+	forms[9105:9111],
+	forms[9111:9114],
+	forms[9114:9117],
+	forms[9117:9120],
+	forms[9120:9123],
+	forms[9123:9141],
+	forms[9141:9168],
+	forms[9168:9186],
+	forms[9186:9204],
+	forms[9204:9208],
+	forms[9208:9212],
+	forms[9212:9216],
+	forms[9216:9261],
+	forms[9261:9267],
+	forms[9267:9312],
+	forms[9312:9339],
+	forms[9339:9366],
+	forms[9366:9384],
+	forms[9384:9420],
+	forms[9420:9465],
+	forms[9465:9510],
+	forms[9510:9537],
+	forms[9537:9564],
+	forms[9564:9582],
+	forms[9582:9618],
+	forms[9618:9663],
+	forms[9663:9669],
+	forms[9669:9714],
+	forms[9714:9741],
+	forms[9741:9768],
+	forms[9768:9786],
+	forms[9786:9822],
+	forms[9822:9840],
+	forms[9840:9867],
+	forms[9867:9894],
+	forms[9894:9912],
+	forms[9912:9930],
+	forms[9930:9948],
+	forms[9948:9966],
+	forms[9966:9984],
+	forms[9984:10011],
+	forms[10011:10038],
+	forms[10038:10042],
+	forms[10042:10054],
+	forms[10054:10072],
+	forms[10072:10090],
+	forms[10090:10102],
+	forms[10102:10114],
+	forms[10114:10132],
+	forms[10132:10150],
+	forms[10150:10162],
+	forms[10162:10180],
+	forms[10180:10207],
+	forms[10207:10234],
+	forms[10234:10252],
+	forms[10252:10270],
+	forms[10270:10297],
+	forms[10297:10324],
+	forms[10324:10342],
+	forms[10342:10346],
+	forms[10346:10373],
+	forms[10373:10400],
+	forms[10400:10430],
+	forms[10430:10460],
+	forms[10460:10469],
+	forms[10469:10478],
+	forms[10478:10505],
+	forms[10505:10532],
+	forms[10532:10538],
+	forms[10538:10544],
+	forms[10544:10556],
+	forms[10556:10568],
+	forms[10568:10577],
+	forms[10577:10586],
+	forms[10586:10590],
+	forms[10590:10592],
+	forms[10592:10619],
+	forms[10619:10646],
+	forms[10646:10652],
+	forms[10652:10658],
+	forms[10658:10688],
+	forms[10688:10718],
+	forms[10718:10727],
+	forms[10727:10736],
+	forms[10736:10740],
+	forms[10740:10744],
+	forms[10744:10746],
+	forms[10746:10748],
+	forms[10748:10775],
+	forms[10775:10802],
+	forms[10802:10808],
+	forms[10808:10814],
+	forms[10814:10826],
+	forms[10826:10838],
+	forms[10838:10847],
+	forms[10847:10856],
+	forms[10856:10860],
+	forms[10860:10862],
+	forms[10862:10892],
+	forms[10892:10922],
+	forms[10922:10931],
+	forms[10931:10940],
+	forms[10940:10943],
+	forms[10943:10946],
+	forms[10946:10949],
+	forms[10949:10952],
+	forms[10952:10970],
+	forms[10970:10988],
+	forms[10988:11006],
+	forms[11006:11024],
+	forms[11024:11051],
+	forms[11051:11078],
+	forms[11078:11108],
+	forms[11108:11138],
+	forms[11138:11147],
+	forms[11147:11156],
+	forms[11156:11157],
+	forms[11157:11187],
+	forms[11187:11217],
+	forms[11217:11226],
+	forms[11226:11235],
+	forms[11235:11239],
+	forms[11239:11243],
+	forms[11243:11246],
+	forms[11246:11249],
+	forms[11249:11276],
+	forms[11276:11303],
+	forms[11303:11330],
+	forms[11330:11357],
+	forms[11357:11384],
+	forms[11384:11411],
+	forms[11411:11412],
+	forms[11412:11413],
+	forms[11413:11415],
+	forms[11415:11417],
+	forms[11417:11419],
+	forms[11419:11421],
+	forms[11421:11424],
+	forms[11424:11429],
+	forms[11429:11434],
+	forms[11434:11439],
+	forms[11439:11440],
+	forms[11440:11441],
+	forms[11441:11447],
+	forms[11447:11455],
+	forms[11455:11457],
+	forms[11457:11459],
+	forms[11459:11467],
+	forms[11467:11475],
 }


Test patch:
diff --git a/x86/zctors_test.go b/x86/zctors_test.go
index c7b707f..2c323e1 100644
--- a/x86/zctors_test.go
+++ b/x86/zctors_test.go
@@ -7467,6 +7467,18 @@ func TestVAESDECValidFormsNoError(t *testing.T) {
 	if _, err := VAESDEC(opxmm, opxmm, opxmm); err != nil {
 		t.Fatal(err)
 	}
+	if _, err := VAESDEC(opm256, opymm, opymm); err != nil {
+		t.Fatal(err)
+	}
+	if _, err := VAESDEC(opymm, opymm, opymm); err != nil {
+		t.Fatal(err)
+	}
+	if _, err := VAESDEC(opm512, opzmm, opzmm); err != nil {
+		t.Fatal(err)
+	}
+	if _, err := VAESDEC(opzmm, opzmm, opzmm); err != nil {
+		t.Fatal(err)
+	}
 }
 
 func TestVAESDECLASTValidFormsNoError(t *testing.T) {
@@ -7476,6 +7488,18 @@ func TestVAESDECLASTValidFormsNoError(t *testing.T) {
 	if _, err := VAESDECLAST(opxmm, opxmm, opxmm); err != nil {
 		t.Fatal(err)
 	}
+	if _, err := VAESDECLAST(opm256, opymm, opymm); err != nil {
+		t.Fatal(err)
+	}
+	if _, err := VAESDECLAST(opymm, opymm, opymm); err != nil {
+		t.Fatal(err)
+	}
+	if _, err := VAESDECLAST(opm512, opzmm, opzmm); err != nil {
+		t.Fatal(err)
+	}
+	if _, err := VAESDECLAST(opzmm, opzmm, opzmm); err != nil {
+		t.Fatal(err)
+	}
 }
 
 func TestVAESENCValidFormsNoError(t *testing.T) {
@@ -7485,6 +7509,18 @@ func TestVAESENCValidFormsNoError(t *testing.T) {
 	if _, err := VAESENC(opxmm, opxmm, opxmm); err != nil {
 		t.Fatal(err)
 	}
+	if _, err := VAESENC(opm256, opymm, opymm); err != nil {
+		t.Fatal(err)
+	}
+	if _, err := VAESENC(opymm, opymm, opymm); err != nil {
+		t.Fatal(err)
+	}
+	if _, err := VAESENC(opm512, opzmm, opzmm); err != nil {
+		t.Fatal(err)
+	}
+	if _, err := VAESENC(opzmm, opzmm, opzmm); err != nil {
+		t.Fatal(err)
+	}
 }
 
 func TestVAESENCLASTValidFormsNoError(t *testing.T) {
@@ -7494,6 +7530,18 @@ func TestVAESENCLASTValidFormsNoError(t *testing.T) {
 	if _, err := VAESENCLAST(opxmm, opxmm, opxmm); err != nil {
 		t.Fatal(err)
 	}
+	if _, err := VAESENCLAST(opm256, opymm, opymm); err != nil {
+		t.Fatal(err)
+	}
+	if _, err := VAESENCLAST(opymm, opymm, opymm); err != nil {
+		t.Fatal(err)
+	}
+	if _, err := VAESENCLAST(opm512, opzmm, opzmm); err != nil {
+		t.Fatal(err)
+	}
+	if _, err := VAESENCLAST(opzmm, opzmm, opzmm); err != nil {
+		t.Fatal(err)
+	}
 }
 
 func TestVAESIMCValidFormsNoError(t *testing.T) {