aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/internal/obj/arm64/inst.go
diff options
context:
space:
mode:
authorJunyang Shao <shaojunyang@google.com>2026-04-09 21:54:32 +0000
committerJunyang Shao <shaojunyang@google.com>2026-04-13 13:36:41 -0700
commit65203e06e61429f0dfc79a406212fa9b99599546 (patch)
tree0235af1e2c9f4891a2006a96e2cbc2501d8a679c /src/cmd/internal/obj/arm64/inst.go
parent4398c11b51eb591407c3665dacc99fc83c0d34d7 (diff)
downloadgo-65203e06e61429f0dfc79a406212fa9b99599546.tar.xz
cmd/asm, cmd/internal/obj/arm64: support memory with imm offset in SVE
This CL is generated by CL 765100 This CL supports this addressing pattern: imm(reg.T) Change-Id: I16789e8e6cf03c4fa225c0fe1bd31dc23c9feb21 Reviewed-on: https://go-review.googlesource.com/c/go/+/765080 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/inst.go')
-rw-r--r--src/cmd/internal/obj/arm64/inst.go23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/cmd/internal/obj/arm64/inst.go b/src/cmd/internal/obj/arm64/inst.go
index ed415c3ee3..111f707bdd 100644
--- a/src/cmd/internal/obj/arm64/inst.go
+++ b/src/cmd/internal/obj/arm64/inst.go
@@ -144,6 +144,9 @@ func aclass(a *obj.Addr) AClass {
}
}
if a.Type == obj.TYPE_MEM {
+ if a.Index == 0 {
+ return AC_MEMOFF
+ }
return AC_MEMEXT
}
if a.Type == obj.TYPE_SPECIAL {
@@ -349,6 +352,25 @@ func addrComponent(a *obj.Addr, acl AClass, index int) uint32 {
default:
panic(fmt.Errorf("unknown elm index at %d in AClass %d", index, acl))
}
+ // AClass: AC_MEMOFF
+ // GNU mnemonic: [<reg>.<T>, #<imm>]
+ // Go mnemonic:
+ // imm(reg.T)
+ // Encoding:
+ // Type = TYPE_MEM
+ // Reg = Base register (with arrangement if applicable)
+ // Offset = Immediate offset
+ case AC_MEMOFF:
+ switch index {
+ case 0:
+ return uint32(a.Reg & 31)
+ case 1:
+ return uint32((a.Reg >> 5) & 15)
+ case 2:
+ return uint32(a.Offset)
+ default:
+ panic(fmt.Errorf("unknown elm index at %d in AClass %d", index, acl))
+ }
// AClass: AC_MEMEXT
// GNU mnemonic: [<reg1>.<T1>, <reg2>.<T2>, <mod> <amount>]
// Go mnemonic:
@@ -758,5 +780,6 @@ func (i *instEncoder) tryEncode(p *obj.Prog) (uint32, bool) {
}
}
}
+
return bin, true
}