aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/internal/obj/arm64/list7.go
diff options
context:
space:
mode:
authorJunyang Shao <shaojunyang@google.com>2026-04-07 22:03:43 +0000
committerJunyang Shao <shaojunyang@google.com>2026-04-13 13:36:18 -0700
commit1aa9d9a69bbf1c9bf1a5806d554ab932c587efd0 (patch)
tree270eed8e15c18da01cab2514c346d1d013410895 /src/cmd/internal/obj/arm64/list7.go
parent42083b1ea08c03e298b1e003c6e477b4757a130c (diff)
downloadgo-1aa9d9a69bbf1c9bf1a5806d554ab932c587efd0.tar.xz
cmd/asm, cmd/internal/obj/arm64: support SVE register lists
This CL adds the register list support for SVE: [Z1.B, Z2.B] [P1.B, P2.B] [Z1.D] [Z1.D, Z2.D, Z3.D] [Z1.D, Z2.D, Z3.D, Z4.D] This CL is generated by CL 763780. Change-Id: I92210097a8a7525a5a53a2dce0b7652397275dd6 Reviewed-on: https://go-review.googlesource.com/c/go/+/763820 Reviewed-by: David Chase <drchase@google.com> LUCI-TryBot-Result: golang-scoped@luci-project-accounts.iam.gserviceaccount.com <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Diffstat (limited to 'src/cmd/internal/obj/arm64/list7.go')
-rw-r--r--src/cmd/internal/obj/arm64/list7.go33
1 files changed, 30 insertions, 3 deletions
diff --git a/src/cmd/internal/obj/arm64/list7.go b/src/cmd/internal/obj/arm64/list7.go
index 3ce949f465..b33bf690bf 100644
--- a/src/cmd/internal/obj/arm64/list7.go
+++ b/src/cmd/internal/obj/arm64/list7.go
@@ -229,11 +229,18 @@ func SPCconv(a int64) string {
func rlconv(list int64) string {
str := ""
- // ARM64 register list follows ARM64 instruction decode schema
+ // For SIMD&FP register list in ARM64, the conv
+ // follows the ARM64 instruction decode schema
// | 31 | 30 | ... | 15 - 12 | 11 - 10 | ... |
// +----+----+-----+---------+---------+-----+
// | | Q | ... | opcode | size | ... |
+ // For Scalable Vector register lists, the conv
+ // follows:
+ // | 33 - 32 | 31 - 30 | ... | 15 - 12 | 11 - 10 | ... | 5 - 0 |
+ // +----+----+----+----+-----+---------+---------+-----+-------+
+ // |regprefix| class 1 | ... | reg cnt | class 2 | ... | reg |
+
firstReg := int(list & 31)
opcode := (list >> 12) & 15
var regCnt int
@@ -251,7 +258,17 @@ func rlconv(list int64) string {
regCnt = -1
}
// Q:size
- arng := ((list>>30)&1)<<2 | (list>>10)&3
+ var regPrefix string
+ regType := (list >> 32) & 3
+ switch regType {
+ case 0:
+ regPrefix = "V"
+ case 1:
+ regPrefix = "Z"
+ case 2:
+ regPrefix = "P"
+ }
+ arng := ((list>>30)&3)<<2 | (list>>10)&3
switch arng {
case 0:
t = "B8"
@@ -269,6 +286,16 @@ func rlconv(list int64) string {
t = "D1"
case 7:
t = "D2"
+ case 9:
+ t = "B"
+ case 10:
+ t = "H"
+ case 11:
+ t = "S"
+ case 13:
+ t = "D"
+ case 14:
+ t = "Q"
}
for i := 0; i < regCnt; i++ {
if str == "" {
@@ -276,7 +303,7 @@ func rlconv(list int64) string {
} else {
str += ","
}
- str += fmt.Sprintf("V%d.", (firstReg+i)&31)
+ str += fmt.Sprintf("%s%d.", regPrefix, (firstReg+i)&31)
str += t
}
str += "]"