all: VAES instructions (#358)
Adds "Vector Advanced Encryption Standard" instruction set. These are added via the `opcodesextra` mechanism #345, since they're missing from the opcodes database. Contributed by @vsivsi. Extracted from #349 with minor tweaks. Co-authored-by: Vaughn Iverson <vsivsi@yahoo.com>
This commit is contained in:
committed by
GitHub
parent
92f38ce96d
commit
0569748e19
@@ -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.
|
||||
|
||||
@@ -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) {
|
||||
|
||||
1264
x86/zoptab.go
1264
x86/zoptab.go
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user