aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/internal/obj
diff options
context:
space:
mode:
authorAlexander Musman <alexander.musman@gmail.com>2025-11-01 14:44:39 +0300
committerGopher Robot <gobot@golang.org>2025-11-03 13:09:40 -0800
commit0c4444e13dc7f6a56b16224d32359559edff93b6 (patch)
treef38dabf7bbe50212a4b057f290299fe68e22b0ee /src/cmd/internal/obj
parent85bec791a0941734520217d548f80714554e5f20 (diff)
downloadgo-0c4444e13dc7f6a56b16224d32359559edff93b6.tar.xz
cmd/internal/obj: support arm64 FMOVQ large offset encoding
Support arm64 FMOVQ with large offset in immediate which is encoded using register offset instruction in opldrr or opstrr. This will help allowing folding immediate into new ssa ops FMOVQload and FMOVQstore. For example: FMOVQ F0, -20000(R0) is encoded as following: MOVD 3(PC), R27 FMOVQ F0, (R0)(R27) RET ffff b1e0 # constant value Change-Id: Ib71f92f6ff4b310bda004a440b1df41ffe164523 Reviewed-on: https://go-review.googlesource.com/c/go/+/716960 Reviewed-by: Cherry Mui <cherryyz@google.com> Auto-Submit: Michael Pratt <mpratt@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Michael Pratt <mpratt@google.com>
Diffstat (limited to 'src/cmd/internal/obj')
-rw-r--r--src/cmd/internal/obj/arm64/asm7.go4
1 files changed, 4 insertions, 0 deletions
diff --git a/src/cmd/internal/obj/arm64/asm7.go b/src/cmd/internal/obj/arm64/asm7.go
index befd1bee13..7e7f028bfb 100644
--- a/src/cmd/internal/obj/arm64/asm7.go
+++ b/src/cmd/internal/obj/arm64/asm7.go
@@ -7276,6 +7276,8 @@ func (c *ctxt7) opldrr(p *obj.Prog, a obj.As, rt, rn, rm int16, extension bool)
op = OptionS<<10 | 0x3<<21 | 0x17<<27 | 1<<26
case AFMOVD:
op = OptionS<<10 | 0x3<<21 | 0x1f<<27 | 1<<26
+ case AFMOVQ:
+ op = OptionS<<10 | 0x7<<21 | 0x07<<27 | 1<<26
default:
c.ctxt.Diag("bad opldrr %v\n%v", a, p)
return 0
@@ -7308,6 +7310,8 @@ func (c *ctxt7) opstrr(p *obj.Prog, a obj.As, rt, rn, rm int16, extension bool)
op = OptionS<<10 | 0x1<<21 | 0x17<<27 | 1<<26
case AFMOVD:
op = OptionS<<10 | 0x1<<21 | 0x1f<<27 | 1<<26
+ case AFMOVQ:
+ op = OptionS<<10 | 0x5<<21 | 0x07<<27 | 1<<26
default:
c.ctxt.Diag("bad opstrr %v\n%v", a, p)
return 0