aboutsummaryrefslogtreecommitdiff
path: root/src/cmd
diff options
context:
space:
mode:
authorJunyang Shao <shaojunyang@google.com>2025-11-17 20:45:30 +0000
committerJunyang Shao <shaojunyang@google.com>2025-11-17 13:37:42 -0800
commit0978935a99a2293aba75db1d7f925109e10ed0a7 (patch)
treef8cf03ca3a6f5229e779fb61609c57d71270fb3b /src/cmd
parent95871e4a0020ea91b9c0177cbeda763c1613d02f (diff)
downloadgo-0978935a99a2293aba75db1d7f925109e10ed0a7.tar.xz
[dev.simd] cmd/compile, simd: change AES op names and add missing size
This CL changed AESEncryptRound and AESDecryptRound to AESEncryptOneRound and AESDecryptOneRound. This CL also adds the 512-bit version of some AES instructions. Change-Id: Ia851a008cce2145b1ff193a89e172862060a725d Reviewed-on: https://go-review.googlesource.com/c/go/+/721280 LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: David Chase <drchase@google.com>
Diffstat (limited to 'src/cmd')
-rw-r--r--src/cmd/compile/internal/amd64/simdssa.go4
-rw-r--r--src/cmd/compile/internal/ssa/_gen/simdAMD64.rules12
-rw-r--r--src/cmd/compile/internal/ssa/_gen/simdAMD64ops.go4
-rw-r--r--src/cmd/compile/internal/ssa/_gen/simdgenericOps.go12
-rw-r--r--src/cmd/compile/internal/ssa/opGen.go100
-rw-r--r--src/cmd/compile/internal/ssa/rewriteAMD64.go20
-rw-r--r--src/cmd/compile/internal/ssagen/simdintrinsics.go12
7 files changed, 140 insertions, 24 deletions
diff --git a/src/cmd/compile/internal/amd64/simdssa.go b/src/cmd/compile/internal/amd64/simdssa.go
index e2d6f6321b..82ec733cc0 100644
--- a/src/cmd/compile/internal/amd64/simdssa.go
+++ b/src/cmd/compile/internal/amd64/simdssa.go
@@ -178,12 +178,16 @@ func ssaGenSIMDValue(s *ssagen.State, v *ssa.Value) bool {
case ssa.OpAMD64VAESDECLAST128,
ssa.OpAMD64VAESDECLAST256,
+ ssa.OpAMD64VAESDECLAST512,
ssa.OpAMD64VAESDEC128,
ssa.OpAMD64VAESDEC256,
+ ssa.OpAMD64VAESDEC512,
ssa.OpAMD64VAESENCLAST128,
ssa.OpAMD64VAESENCLAST256,
+ ssa.OpAMD64VAESENCLAST512,
ssa.OpAMD64VAESENC128,
ssa.OpAMD64VAESENC256,
+ ssa.OpAMD64VAESENC512,
ssa.OpAMD64VADDPS128,
ssa.OpAMD64VADDPS256,
ssa.OpAMD64VADDPS512,
diff --git a/src/cmd/compile/internal/ssa/_gen/simdAMD64.rules b/src/cmd/compile/internal/ssa/_gen/simdAMD64.rules
index 4723546b12..ea1094b805 100644
--- a/src/cmd/compile/internal/ssa/_gen/simdAMD64.rules
+++ b/src/cmd/compile/internal/ssa/_gen/simdAMD64.rules
@@ -2,12 +2,16 @@
(AESDecryptLastRoundUint8x16 ...) => (VAESDECLAST128 ...)
(AESDecryptLastRoundUint8x32 ...) => (VAESDECLAST256 ...)
-(AESDecryptRoundUint8x16 ...) => (VAESDEC128 ...)
-(AESDecryptRoundUint8x32 ...) => (VAESDEC256 ...)
+(AESDecryptLastRoundUint8x64 ...) => (VAESDECLAST512 ...)
+(AESDecryptOneRoundUint8x16 ...) => (VAESDEC128 ...)
+(AESDecryptOneRoundUint8x32 ...) => (VAESDEC256 ...)
+(AESDecryptOneRoundUint8x64 ...) => (VAESDEC512 ...)
(AESEncryptLastRoundUint8x16 ...) => (VAESENCLAST128 ...)
(AESEncryptLastRoundUint8x32 ...) => (VAESENCLAST256 ...)
-(AESEncryptRoundUint8x16 ...) => (VAESENC128 ...)
-(AESEncryptRoundUint8x32 ...) => (VAESENC256 ...)
+(AESEncryptLastRoundUint8x64 ...) => (VAESENCLAST512 ...)
+(AESEncryptOneRoundUint8x16 ...) => (VAESENC128 ...)
+(AESEncryptOneRoundUint8x32 ...) => (VAESENC256 ...)
+(AESEncryptOneRoundUint8x64 ...) => (VAESENC512 ...)
(AESInvMixColumnsUint32x4 ...) => (VAESIMC128 ...)
(AESRoundKeyGenAssistUint32x4 ...) => (VAESKEYGENASSIST128 ...)
(AbsInt8x16 ...) => (VPABSB128 ...)
diff --git a/src/cmd/compile/internal/ssa/_gen/simdAMD64ops.go b/src/cmd/compile/internal/ssa/_gen/simdAMD64ops.go
index 4f722f8a11..674cfb19d6 100644
--- a/src/cmd/compile/internal/ssa/_gen/simdAMD64ops.go
+++ b/src/cmd/compile/internal/ssa/_gen/simdAMD64ops.go
@@ -28,12 +28,16 @@ func simdAMD64Ops(v11, v21, v2k, vkv, v2kv, v2kk, v31, v3kv, vgpv, vgp, vfpv, vf
{name: "VADDSUBPS256", argLength: 2, reg: v21, asm: "VADDSUBPS", commutative: false, typ: "Vec256", resultInArg0: false},
{name: "VAESDEC128", argLength: 2, reg: v21, asm: "VAESDEC", commutative: false, typ: "Vec128", resultInArg0: false},
{name: "VAESDEC256", argLength: 2, reg: w21, asm: "VAESDEC", commutative: false, typ: "Vec256", resultInArg0: false},
+ {name: "VAESDEC512", argLength: 2, reg: w21, asm: "VAESDEC", commutative: false, typ: "Vec512", resultInArg0: false},
{name: "VAESDECLAST128", argLength: 2, reg: v21, asm: "VAESDECLAST", commutative: false, typ: "Vec128", resultInArg0: false},
{name: "VAESDECLAST256", argLength: 2, reg: w21, asm: "VAESDECLAST", commutative: false, typ: "Vec256", resultInArg0: false},
+ {name: "VAESDECLAST512", argLength: 2, reg: w21, asm: "VAESDECLAST", commutative: false, typ: "Vec512", resultInArg0: false},
{name: "VAESENC128", argLength: 2, reg: v21, asm: "VAESENC", commutative: false, typ: "Vec128", resultInArg0: false},
{name: "VAESENC256", argLength: 2, reg: w21, asm: "VAESENC", commutative: false, typ: "Vec256", resultInArg0: false},
+ {name: "VAESENC512", argLength: 2, reg: w21, asm: "VAESENC", commutative: false, typ: "Vec512", resultInArg0: false},
{name: "VAESENCLAST128", argLength: 2, reg: v21, asm: "VAESENCLAST", commutative: false, typ: "Vec128", resultInArg0: false},
{name: "VAESENCLAST256", argLength: 2, reg: w21, asm: "VAESENCLAST", commutative: false, typ: "Vec256", resultInArg0: false},
+ {name: "VAESENCLAST512", argLength: 2, reg: w21, asm: "VAESENCLAST", commutative: false, typ: "Vec512", resultInArg0: false},
{name: "VAESIMC128", argLength: 1, reg: v11, asm: "VAESIMC", commutative: false, typ: "Vec128", resultInArg0: false},
{name: "VBROADCASTSD256", argLength: 1, reg: v11, asm: "VBROADCASTSD", commutative: false, typ: "Vec256", resultInArg0: false},
{name: "VBROADCASTSD512", argLength: 1, reg: w11, asm: "VBROADCASTSD", commutative: false, typ: "Vec512", resultInArg0: false},
diff --git a/src/cmd/compile/internal/ssa/_gen/simdgenericOps.go b/src/cmd/compile/internal/ssa/_gen/simdgenericOps.go
index 15608e4fa6..b97e5f4f14 100644
--- a/src/cmd/compile/internal/ssa/_gen/simdgenericOps.go
+++ b/src/cmd/compile/internal/ssa/_gen/simdgenericOps.go
@@ -6,12 +6,16 @@ func simdGenericOps() []opData {
return []opData{
{name: "AESDecryptLastRoundUint8x16", argLength: 2, commutative: false},
{name: "AESDecryptLastRoundUint8x32", argLength: 2, commutative: false},
- {name: "AESDecryptRoundUint8x16", argLength: 2, commutative: false},
- {name: "AESDecryptRoundUint8x32", argLength: 2, commutative: false},
+ {name: "AESDecryptLastRoundUint8x64", argLength: 2, commutative: false},
+ {name: "AESDecryptOneRoundUint8x16", argLength: 2, commutative: false},
+ {name: "AESDecryptOneRoundUint8x32", argLength: 2, commutative: false},
+ {name: "AESDecryptOneRoundUint8x64", argLength: 2, commutative: false},
{name: "AESEncryptLastRoundUint8x16", argLength: 2, commutative: false},
{name: "AESEncryptLastRoundUint8x32", argLength: 2, commutative: false},
- {name: "AESEncryptRoundUint8x16", argLength: 2, commutative: false},
- {name: "AESEncryptRoundUint8x32", argLength: 2, commutative: false},
+ {name: "AESEncryptLastRoundUint8x64", argLength: 2, commutative: false},
+ {name: "AESEncryptOneRoundUint8x16", argLength: 2, commutative: false},
+ {name: "AESEncryptOneRoundUint8x32", argLength: 2, commutative: false},
+ {name: "AESEncryptOneRoundUint8x64", argLength: 2, commutative: false},
{name: "AESInvMixColumnsUint32x4", argLength: 1, commutative: false},
{name: "AbsInt8x16", argLength: 1, commutative: false},
{name: "AbsInt8x32", argLength: 1, commutative: false},
diff --git a/src/cmd/compile/internal/ssa/opGen.go b/src/cmd/compile/internal/ssa/opGen.go
index 6bbc29dd12..bd94b4d576 100644
--- a/src/cmd/compile/internal/ssa/opGen.go
+++ b/src/cmd/compile/internal/ssa/opGen.go
@@ -1269,12 +1269,16 @@ const (
OpAMD64VADDSUBPS256
OpAMD64VAESDEC128
OpAMD64VAESDEC256
+ OpAMD64VAESDEC512
OpAMD64VAESDECLAST128
OpAMD64VAESDECLAST256
+ OpAMD64VAESDECLAST512
OpAMD64VAESENC128
OpAMD64VAESENC256
+ OpAMD64VAESENC512
OpAMD64VAESENCLAST128
OpAMD64VAESENCLAST256
+ OpAMD64VAESENCLAST512
OpAMD64VAESIMC128
OpAMD64VBROADCASTSD256
OpAMD64VBROADCASTSD512
@@ -5950,12 +5954,16 @@ const (
OpIsZeroVec
OpAESDecryptLastRoundUint8x16
OpAESDecryptLastRoundUint8x32
- OpAESDecryptRoundUint8x16
- OpAESDecryptRoundUint8x32
+ OpAESDecryptLastRoundUint8x64
+ OpAESDecryptOneRoundUint8x16
+ OpAESDecryptOneRoundUint8x32
+ OpAESDecryptOneRoundUint8x64
OpAESEncryptLastRoundUint8x16
OpAESEncryptLastRoundUint8x32
- OpAESEncryptRoundUint8x16
- OpAESEncryptRoundUint8x32
+ OpAESEncryptLastRoundUint8x64
+ OpAESEncryptOneRoundUint8x16
+ OpAESEncryptOneRoundUint8x32
+ OpAESEncryptOneRoundUint8x64
OpAESInvMixColumnsUint32x4
OpAbsInt8x16
OpAbsInt8x32
@@ -20874,6 +20882,20 @@ var opcodeTable = [...]opInfo{
},
},
{
+ name: "VAESDEC512",
+ argLen: 2,
+ asm: x86.AVAESDEC,
+ reg: regInfo{
+ inputs: []inputInfo{
+ {0, 281474976645120}, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15 X16 X17 X18 X19 X20 X21 X22 X23 X24 X25 X26 X27 X28 X29 X30 X31
+ {1, 281474976645120}, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15 X16 X17 X18 X19 X20 X21 X22 X23 X24 X25 X26 X27 X28 X29 X30 X31
+ },
+ outputs: []outputInfo{
+ {0, 281472829161472}, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X16 X17 X18 X19 X20 X21 X22 X23 X24 X25 X26 X27 X28 X29 X30 X31
+ },
+ },
+ },
+ {
name: "VAESDECLAST128",
argLen: 2,
asm: x86.AVAESDECLAST,
@@ -20902,6 +20924,20 @@ var opcodeTable = [...]opInfo{
},
},
{
+ name: "VAESDECLAST512",
+ argLen: 2,
+ asm: x86.AVAESDECLAST,
+ reg: regInfo{
+ inputs: []inputInfo{
+ {0, 281474976645120}, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15 X16 X17 X18 X19 X20 X21 X22 X23 X24 X25 X26 X27 X28 X29 X30 X31
+ {1, 281474976645120}, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15 X16 X17 X18 X19 X20 X21 X22 X23 X24 X25 X26 X27 X28 X29 X30 X31
+ },
+ outputs: []outputInfo{
+ {0, 281472829161472}, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X16 X17 X18 X19 X20 X21 X22 X23 X24 X25 X26 X27 X28 X29 X30 X31
+ },
+ },
+ },
+ {
name: "VAESENC128",
argLen: 2,
asm: x86.AVAESENC,
@@ -20930,6 +20966,20 @@ var opcodeTable = [...]opInfo{
},
},
{
+ name: "VAESENC512",
+ argLen: 2,
+ asm: x86.AVAESENC,
+ reg: regInfo{
+ inputs: []inputInfo{
+ {0, 281474976645120}, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15 X16 X17 X18 X19 X20 X21 X22 X23 X24 X25 X26 X27 X28 X29 X30 X31
+ {1, 281474976645120}, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15 X16 X17 X18 X19 X20 X21 X22 X23 X24 X25 X26 X27 X28 X29 X30 X31
+ },
+ outputs: []outputInfo{
+ {0, 281472829161472}, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X16 X17 X18 X19 X20 X21 X22 X23 X24 X25 X26 X27 X28 X29 X30 X31
+ },
+ },
+ },
+ {
name: "VAESENCLAST128",
argLen: 2,
asm: x86.AVAESENCLAST,
@@ -20958,6 +21008,20 @@ var opcodeTable = [...]opInfo{
},
},
{
+ name: "VAESENCLAST512",
+ argLen: 2,
+ asm: x86.AVAESENCLAST,
+ reg: regInfo{
+ inputs: []inputInfo{
+ {0, 281474976645120}, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15 X16 X17 X18 X19 X20 X21 X22 X23 X24 X25 X26 X27 X28 X29 X30 X31
+ {1, 281474976645120}, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15 X16 X17 X18 X19 X20 X21 X22 X23 X24 X25 X26 X27 X28 X29 X30 X31
+ },
+ outputs: []outputInfo{
+ {0, 281472829161472}, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X16 X17 X18 X19 X20 X21 X22 X23 X24 X25 X26 X27 X28 X29 X30 X31
+ },
+ },
+ },
+ {
name: "VAESIMC128",
argLen: 1,
asm: x86.AVAESIMC,
@@ -85740,12 +85804,22 @@ var opcodeTable = [...]opInfo{
generic: true,
},
{
- name: "AESDecryptRoundUint8x16",
+ name: "AESDecryptLastRoundUint8x64",
+ argLen: 2,
+ generic: true,
+ },
+ {
+ name: "AESDecryptOneRoundUint8x16",
+ argLen: 2,
+ generic: true,
+ },
+ {
+ name: "AESDecryptOneRoundUint8x32",
argLen: 2,
generic: true,
},
{
- name: "AESDecryptRoundUint8x32",
+ name: "AESDecryptOneRoundUint8x64",
argLen: 2,
generic: true,
},
@@ -85760,12 +85834,22 @@ var opcodeTable = [...]opInfo{
generic: true,
},
{
- name: "AESEncryptRoundUint8x16",
+ name: "AESEncryptLastRoundUint8x64",
+ argLen: 2,
+ generic: true,
+ },
+ {
+ name: "AESEncryptOneRoundUint8x16",
+ argLen: 2,
+ generic: true,
+ },
+ {
+ name: "AESEncryptOneRoundUint8x32",
argLen: 2,
generic: true,
},
{
- name: "AESEncryptRoundUint8x32",
+ name: "AESEncryptOneRoundUint8x64",
argLen: 2,
generic: true,
},
diff --git a/src/cmd/compile/internal/ssa/rewriteAMD64.go b/src/cmd/compile/internal/ssa/rewriteAMD64.go
index dff3333372..042649f256 100644
--- a/src/cmd/compile/internal/ssa/rewriteAMD64.go
+++ b/src/cmd/compile/internal/ssa/rewriteAMD64.go
@@ -16,24 +16,36 @@ func rewriteValueAMD64(v *Value) bool {
case OpAESDecryptLastRoundUint8x32:
v.Op = OpAMD64VAESDECLAST256
return true
- case OpAESDecryptRoundUint8x16:
+ case OpAESDecryptLastRoundUint8x64:
+ v.Op = OpAMD64VAESDECLAST512
+ return true
+ case OpAESDecryptOneRoundUint8x16:
v.Op = OpAMD64VAESDEC128
return true
- case OpAESDecryptRoundUint8x32:
+ case OpAESDecryptOneRoundUint8x32:
v.Op = OpAMD64VAESDEC256
return true
+ case OpAESDecryptOneRoundUint8x64:
+ v.Op = OpAMD64VAESDEC512
+ return true
case OpAESEncryptLastRoundUint8x16:
v.Op = OpAMD64VAESENCLAST128
return true
case OpAESEncryptLastRoundUint8x32:
v.Op = OpAMD64VAESENCLAST256
return true
- case OpAESEncryptRoundUint8x16:
+ case OpAESEncryptLastRoundUint8x64:
+ v.Op = OpAMD64VAESENCLAST512
+ return true
+ case OpAESEncryptOneRoundUint8x16:
v.Op = OpAMD64VAESENC128
return true
- case OpAESEncryptRoundUint8x32:
+ case OpAESEncryptOneRoundUint8x32:
v.Op = OpAMD64VAESENC256
return true
+ case OpAESEncryptOneRoundUint8x64:
+ v.Op = OpAMD64VAESENC512
+ return true
case OpAESInvMixColumnsUint32x4:
v.Op = OpAMD64VAESIMC128
return true
diff --git a/src/cmd/compile/internal/ssagen/simdintrinsics.go b/src/cmd/compile/internal/ssagen/simdintrinsics.go
index 5c941321a4..f3aa904f6c 100644
--- a/src/cmd/compile/internal/ssagen/simdintrinsics.go
+++ b/src/cmd/compile/internal/ssagen/simdintrinsics.go
@@ -14,12 +14,16 @@ const simdPackage = "simd"
func simdIntrinsics(addF func(pkg, fn string, b intrinsicBuilder, archFamilies ...sys.ArchFamily)) {
addF(simdPackage, "Uint8x16.AESDecryptLastRound", opLen2(ssa.OpAESDecryptLastRoundUint8x16, types.TypeVec128), sys.AMD64)
addF(simdPackage, "Uint8x32.AESDecryptLastRound", opLen2(ssa.OpAESDecryptLastRoundUint8x32, types.TypeVec256), sys.AMD64)
- addF(simdPackage, "Uint8x16.AESDecryptRound", opLen2(ssa.OpAESDecryptRoundUint8x16, types.TypeVec128), sys.AMD64)
- addF(simdPackage, "Uint8x32.AESDecryptRound", opLen2(ssa.OpAESDecryptRoundUint8x32, types.TypeVec256), sys.AMD64)
+ addF(simdPackage, "Uint8x64.AESDecryptLastRound", opLen2(ssa.OpAESDecryptLastRoundUint8x64, types.TypeVec512), sys.AMD64)
+ addF(simdPackage, "Uint8x16.AESDecryptOneRound", opLen2(ssa.OpAESDecryptOneRoundUint8x16, types.TypeVec128), sys.AMD64)
+ addF(simdPackage, "Uint8x32.AESDecryptOneRound", opLen2(ssa.OpAESDecryptOneRoundUint8x32, types.TypeVec256), sys.AMD64)
+ addF(simdPackage, "Uint8x64.AESDecryptOneRound", opLen2(ssa.OpAESDecryptOneRoundUint8x64, types.TypeVec512), sys.AMD64)
addF(simdPackage, "Uint8x16.AESEncryptLastRound", opLen2(ssa.OpAESEncryptLastRoundUint8x16, types.TypeVec128), sys.AMD64)
addF(simdPackage, "Uint8x32.AESEncryptLastRound", opLen2(ssa.OpAESEncryptLastRoundUint8x32, types.TypeVec256), sys.AMD64)
- addF(simdPackage, "Uint8x16.AESEncryptRound", opLen2(ssa.OpAESEncryptRoundUint8x16, types.TypeVec128), sys.AMD64)
- addF(simdPackage, "Uint8x32.AESEncryptRound", opLen2(ssa.OpAESEncryptRoundUint8x32, types.TypeVec256), sys.AMD64)
+ addF(simdPackage, "Uint8x64.AESEncryptLastRound", opLen2(ssa.OpAESEncryptLastRoundUint8x64, types.TypeVec512), sys.AMD64)
+ addF(simdPackage, "Uint8x16.AESEncryptOneRound", opLen2(ssa.OpAESEncryptOneRoundUint8x16, types.TypeVec128), sys.AMD64)
+ addF(simdPackage, "Uint8x32.AESEncryptOneRound", opLen2(ssa.OpAESEncryptOneRoundUint8x32, types.TypeVec256), sys.AMD64)
+ addF(simdPackage, "Uint8x64.AESEncryptOneRound", opLen2(ssa.OpAESEncryptOneRoundUint8x64, types.TypeVec512), sys.AMD64)
addF(simdPackage, "Uint32x4.AESInvMixColumns", opLen1(ssa.OpAESInvMixColumnsUint32x4, types.TypeVec128), sys.AMD64)
addF(simdPackage, "Uint32x4.AESRoundKeyGenAssist", opLen1Imm8(ssa.OpAESRoundKeyGenAssistUint32x4, types.TypeVec128, 0), sys.AMD64)
addF(simdPackage, "Int8x16.Abs", opLen1(ssa.OpAbsInt8x16, types.TypeVec128), sys.AMD64)