diff options
| author | Junyang Shao <shaojunyang@google.com> | 2026-04-09 21:54:32 +0000 |
|---|---|---|
| committer | Junyang Shao <shaojunyang@google.com> | 2026-04-13 13:36:41 -0700 |
| commit | 65203e06e61429f0dfc79a406212fa9b99599546 (patch) | |
| tree | 0235af1e2c9f4891a2006a96e2cbc2501d8a679c /src/cmd/internal/obj/arm64/inst.go | |
| parent | 4398c11b51eb591407c3665dacc99fc83c0d34d7 (diff) | |
| download | go-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.go | 23 |
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 } |
