aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/internal/obj/arm64/inst.go
diff options
context:
space:
mode:
authorJunyang Shao <shaojunyang@google.com>2026-04-10 17:14:35 +0000
committerJunyang Shao <shaojunyang@google.com>2026-04-13 13:36:48 -0700
commit356b87fa7bbba02debea59d2d03e1eca1750ccb6 (patch)
treecf151c602d80cc2c5faf4547de8ec00800275431 /src/cmd/internal/obj/arm64/inst.go
parent65203e06e61429f0dfc79a406212fa9b99599546 (diff)
downloadgo-356b87fa7bbba02debea59d2d03e1eca1750ccb6.tar.xz
cmd/asm, cmd/internal/obj/arm64: support memory with MUL VL imm offset
This CL is generated by CL 765440. This CL supports this addressing pattern: (VL*imm)(Reg) (-VL*imm)(Reg) Change-Id: I4d1bab2ef6c4141699a47b28aa14b28cdee6cb3f Reviewed-on: https://go-review.googlesource.com/c/go/+/765420 LUCI-TryBot-Result: golang-scoped@luci-project-accounts.iam.gserviceaccount.com <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: David Chase <drchase@google.com> Commit-Queue: Junyang Shao <shaojunyang@google.com>
Diffstat (limited to 'src/cmd/internal/obj/arm64/inst.go')
-rw-r--r--src/cmd/internal/obj/arm64/inst.go7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/cmd/internal/obj/arm64/inst.go b/src/cmd/internal/obj/arm64/inst.go
index 111f707bdd..e1f4e46595 100644
--- a/src/cmd/internal/obj/arm64/inst.go
+++ b/src/cmd/internal/obj/arm64/inst.go
@@ -145,6 +145,9 @@ func aclass(a *obj.Addr) AClass {
}
if a.Type == obj.TYPE_MEM {
if a.Index == 0 {
+ if a.Scale&-32768 != 0 {
+ return AC_MEMOFFMULVL
+ }
return AC_MEMOFF
}
return AC_MEMEXT
@@ -352,7 +355,7 @@ 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
+ // AClass: AC_MEMOFF, AC_MEMOFFMULVL
// GNU mnemonic: [<reg>.<T>, #<imm>]
// Go mnemonic:
// imm(reg.T)
@@ -360,7 +363,7 @@ func addrComponent(a *obj.Addr, acl AClass, index int) uint32 {
// Type = TYPE_MEM
// Reg = Base register (with arrangement if applicable)
// Offset = Immediate offset
- case AC_MEMOFF:
+ case AC_MEMOFF, AC_MEMOFFMULVL:
switch index {
case 0:
return uint32(a.Reg & 31)