aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/internal/obj/arm64/list7.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/internal/obj/arm64/list7.go')
-rw-r--r--src/cmd/internal/obj/arm64/list7.go17
1 files changed, 14 insertions, 3 deletions
diff --git a/src/cmd/internal/obj/arm64/list7.go b/src/cmd/internal/obj/arm64/list7.go
index 424da1c22d..3ce949f465 100644
--- a/src/cmd/internal/obj/arm64/list7.go
+++ b/src/cmd/internal/obj/arm64/list7.go
@@ -176,14 +176,25 @@ func rconv(r int) string {
return fmt.Sprintf("R%d<<%d", r&31, (r>>5)&7)
case REG_ARNG <= r && r < REG_ELEM:
return fmt.Sprintf("V%d.%s", r&31, arrange((r>>5)&15))
- case REG_ELEM <= r && r < REG_ELEM_END:
+ case REG_ELEM <= r && r < REG_ZARNG:
return fmt.Sprintf("V%d.%s", r&31, arrange((r>>5)&15))
- case REG_ZARNG <= r && r < REG_PARNGZM:
+ case REG_ZARNG <= r && r < REG_PZELEM:
return fmt.Sprintf("Z%d.%s", r&31, arrange((r>>5)&15))
+ case REG_PZELEM <= r && r < REG_PARNGZM:
+ regPrefix := "Z"
+ reg := r & 31
+ if r&(1<<5) != 0 {
+ regPrefix = "P"
+ if reg >= 16 {
+ regPrefix = "PN"
+ reg -= 16
+ }
+ }
+ return fmt.Sprintf("%s%d", regPrefix, reg)
case REG_PARNGZM <= r && r < REG_PARNGZM_END:
// SVE predicate register with arrangement.
// Pn.<T> or Pn/M, Pn/Z.
- arng := (r >> 5) & 31
+ arng := (r >> 5) & 15
suffix := arrange(arng)
reg := r & 31
if reg >= 16 {