diff options
| author | Junyang Shao <shaojunyang@google.com> | 2026-04-10 17:14:35 +0000 |
|---|---|---|
| committer | Junyang Shao <shaojunyang@google.com> | 2026-04-13 13:36:48 -0700 |
| commit | 356b87fa7bbba02debea59d2d03e1eca1750ccb6 (patch) | |
| tree | cf151c602d80cc2c5faf4547de8ec00800275431 /src/cmd/internal/obj/arm64/inst.go | |
| parent | 65203e06e61429f0dfc79a406212fa9b99599546 (diff) | |
| download | go-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.go | 7 |
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) |
